|
@@ -0,0 +1,136 @@
|
|
|
|
+import styled from '@emotion/styled'
|
|
|
|
+import { fluidRange } from 'polished'
|
|
|
|
+
|
|
|
|
+import { Avatar, Button } from '@/shared/components'
|
|
|
|
+import { breakpoints, colors, spacing, typography } from '@/shared/theme'
|
|
|
|
+import { Link } from '@reach/router'
|
|
|
|
+
|
|
|
|
+export const Container = styled.section`
|
|
|
|
+ position: relative;
|
|
|
|
+
|
|
|
|
+ // because of the fixed aspect ratio, as the viewport width grows, the media will occupy more height as well
|
|
|
|
+ // so that the media doesn't take too big of a portion of the space, we let the content overlap the media via a negative margin
|
|
|
|
+ @media screen and (min-width: ${breakpoints.small}) {
|
|
|
|
+ margin-bottom: -75px;
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.medium}) {
|
|
|
|
+ margin-bottom: -200px;
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.large}) {
|
|
|
|
+ margin-bottom: -250px;
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.xlarge}) {
|
|
|
|
+ margin-bottom: -400px;
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.xxlarge}) {
|
|
|
|
+ margin-bottom: -600px;
|
|
|
|
+ }
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const MediaWrapper = styled.div`
|
|
|
|
+ margin: 0 calc(-1 * var(--global-horizontal-padding));
|
|
|
|
+ width: calc(100% + calc(2 * var(--global-horizontal-padding)));
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const BackgroundImage = styled.div<{ src: string }>`
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 0;
|
|
|
|
+ padding-top: 56.25%;
|
|
|
|
+ background-repeat: no-repeat;
|
|
|
|
+ background-position: center;
|
|
|
|
+ background-attachment: local;
|
|
|
|
+ background-size: cover;
|
|
|
|
+
|
|
|
|
+ // as the content overlaps the media more and more as the viewport width grows, we need to hide some part of the media with a gradient
|
|
|
|
+ // this helps with keeping a consistent background behind a page content - we don't want the media to peek out in the content spacing
|
|
|
|
+ background-image: linear-gradient(0deg, black 0%, rgba(0, 0, 0, 0) 20%), url(${({ src }) => src});
|
|
|
|
+ @media screen and (min-width: ${breakpoints.small}) {
|
|
|
|
+ background-image: linear-gradient(0deg, black 0%, rgba(0, 0, 0, 0) 50%), url(${({ src }) => src});
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.medium}) {
|
|
|
|
+ background-image: linear-gradient(0deg, black 0%, rgba(0, 0, 0, 0) 70%), url(${({ src }) => src});
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.large}) {
|
|
|
|
+ background-image: linear-gradient(0deg, black 0%, black 20%, rgba(0, 0, 0, 0) 90%), url(${({ src }) => src});
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.xlarge}) {
|
|
|
|
+ background-image: linear-gradient(0deg, black 0%, black 25%, rgba(0, 0, 0, 0) 90%), url(${({ src }) => src});
|
|
|
|
+ }
|
|
|
|
+ @media screen and (min-width: ${breakpoints.xxlarge}) {
|
|
|
|
+ background-image: linear-gradient(0deg, black 0%, black 30%, rgba(0, 0, 0, 0) 90%), url(${({ src }) => src});
|
|
|
|
+ }
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const InfoContainer = styled.div`
|
|
|
|
+ position: relative;
|
|
|
|
+ margin-top: -${spacing.xxl};
|
|
|
|
+ padding-bottom: ${spacing.xs};
|
|
|
|
+
|
|
|
|
+ @media screen and (min-width: ${breakpoints.small}) {
|
|
|
|
+ position: absolute;
|
|
|
|
+ margin: 0;
|
|
|
|
+ padding: 0;
|
|
|
|
+ bottom: 15%;
|
|
|
|
+ max-width: 80%;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @media screen and (min-width: ${breakpoints.medium}) {
|
|
|
|
+ bottom: 30%;
|
|
|
|
+ max-width: 60%;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @media screen and (min-width: ${breakpoints.large}) {
|
|
|
|
+ bottom: 35%;
|
|
|
|
+ max-width: 40%;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @media screen and (min-width: ${breakpoints.xlarge}) {
|
|
|
|
+ bottom: 45%;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @media screen and (min-width: ${breakpoints.xxlarge}) {
|
|
|
|
+ bottom: 60%;
|
|
|
|
+ }
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const ChannelLink = styled(Link)`
|
|
|
|
+ margin-bottom: ${spacing.m};
|
|
|
|
+ display: inline-block;
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const StyledAvatar = styled(Avatar)`
|
|
|
|
+ width: 64px;
|
|
|
|
+ height: 64px;
|
|
|
|
+ @media screen and (min-width: ${breakpoints.medium}) {
|
|
|
|
+ width: 88px;
|
|
|
|
+ height: 88px;
|
|
|
|
+ }
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const TitleContainer = styled.div`
|
|
|
|
+ margin-bottom: ${spacing.xxl};
|
|
|
|
+ @media screen and (min-width: ${breakpoints.medium}) {
|
|
|
|
+ margin-bottom: ${spacing.xxxl};
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ h2 {
|
|
|
|
+ ${fluidRange({ prop: 'fontSize', fromSize: '40px', toSize: '60px' })};
|
|
|
|
+ ${fluidRange({ prop: 'lineHeight', fromSize: '48px', toSize: '68px' })};
|
|
|
|
+ font-family: ${typography.fonts.headers};
|
|
|
|
+ font-weight: 700;
|
|
|
|
+ margin: 0 0 ${spacing.s} 0;
|
|
|
|
+ @media screen and (min-width: ${breakpoints.medium}) {
|
|
|
|
+ margin-bottom: ${spacing.m};
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ span {
|
|
|
|
+ ${fluidRange({ prop: 'fontSize', fromSize: '14px', toSize: '28px' })};
|
|
|
|
+ ${fluidRange({ prop: 'lineHeight', fromSize: '20px', toSize: '30px' })};
|
|
|
|
+ color: ${colors.white};
|
|
|
|
+ }
|
|
|
|
+`
|
|
|
|
+
|
|
|
|
+export const PlayButton = styled(Button)`
|
|
|
|
+ width: 116px;
|
|
|
|
+`
|