import styled from 'styled-components'; import { breakpoints, colours, fonts } from '@times-components/ts-styleguide'; import { Container } from '../../shared/shared-styles'; const sportBorder = '#c8dfd0'; const roboto = "'Roboto', sans-serif"; const darkBg = '#121212'; const darkBorder = '#333'; const darkFeatureGreen = '#1e3a2a'; const darkFeatureYellow = '#3a3520'; const darkFeatureRed = '#3a2020'; const darkFeatureBorderYellow = '#554d2e'; const darkFeatureBorderRed = '#552e2e'; export const PageViewContainer = styled(Container)` border-top: none; background-color: ${colours.functional.white}; margin-bottom: 0; `; export const Title = styled.h3<{ isApp?: boolean }>` text-align: center; font-family: ${fonts.headline}; font-size: 20px; font-weight: 800; padding-top: 16px; padding-bottom: 12px; margin: 0; color: ${colours.functional.primary}; @media (min-width: ${breakpoints.medium}px) { font-size: 24px; } ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: #ffffff !important; } `}; `; export const WidgetContainer = styled.div<{ isApp?: boolean; bordered?: boolean; widget?: 'player_ranking' | 'team_ranking'; minHeight?: number; yellowCardPosition?: number; redCardPosition?: number; }>` background-color: ${colours.functional.white}; overflow: hidden; ${props => props.minHeight && `min-height: ${props.minHeight}px;`} .Opta > .Opta_W > div { padding-bottom: 0; } .Opta table { margin-bottom: 0; } ${props => props.isApp && ` @media (prefers-color-scheme: dark) { background-color: ${darkBg}; .Opta:not(:has(.Opta-Cf)) { background-color: ${darkBg} !important; color: #ffffff !important; * { background-color: ${darkBg} !important; color: #ffffff !important; } } } `} .Opta .Opta_W { margin: 0; background-color: transparent; h2 { display: none; } .Opta-Cf { background-color: transparent !important; margin: 0; padding: 0; } .Opta-TabbedContent > li > h3.Opta-Exp { display: none; } .Opta-js-main, .Opta-Tabs { ${props => props.isApp && ` @media (prefers-color-scheme: dark) { background-color: ${darkBg} !important; } `}; } .Opta-Tabs { position: relative; &::after { content: ''; position: absolute; top: 0; right: 0; width: 40px; height: 60px; background: linear-gradient(to left, ${ colours.functional.white }, transparent); pointer-events: none; z-index: 1; ${props => props.bordered && ` right: 1px; top: 9px; border-radius: 0 8px 0 0; `} ${props => props.isApp && ` @media (prefers-color-scheme: dark) { background: linear-gradient(to left, ${darkBg}, transparent); } `} @media (min-width: 720px) { display: none; } } } .Opta-Tabs.Opta-TabsMore > .Opta-Nav > ul { height: auto !important; min-height: 0 !important; position: static !important; max-height: none !important; padding-bottom: 16px !important; background-color: transparent !important; } .Opta-Tabs.Opta-TabsMore > .Opta-Nav > ul > li { display: block !important; position: static !important; float: none !important; top: auto !important; right: auto !important; bottom: auto !important; left: auto !important; } .Opta-Tabs.Opta-TabsMore > .Opta-Nav .Opta-More, .Opta-Tabs.Opta-TabsMore > .Opta-Nav .Opta-more, .Opta-Tabs.Opta-TabsMore > .Opta-Nav .Opta-NavMore, .Opta-Tabs.Opta-TabsMore > .Opta-Nav .Opta-Nav-More { display: none !important; } .Opta-Nav { display: block !important; background-color: transparent !important; border: 0 !important; padding-bottom: 0; overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; scrollbar-width: none; ${props => props.bordered && ` border: 1px solid ${sportBorder} !important; border-bottom: none !important; border-radius: 8px 8px 0 0; padding: 16px 12px 0 12px !important; `} ${props => props.bordered && props.isApp && ` @media (prefers-color-scheme: dark) { border-color: ${darkBorder} !important; } `} ${props => props.isApp && ` @media (prefers-color-scheme: dark) { background-color: ${darkBg} !important; } `} &::-webkit-scrollbar { display: none; } /* Hide dropdown trigger and force full tab list visibility */ > h3 { display: none !important; } > ul { display: flex !important; justify-content: center !important; align-items: center; gap: 12px; margin: 0 !important; padding: 0 !important; width: max-content; min-width: 100%; list-style: none; background-color: transparent !important; border: 0 !important; white-space: nowrap; flex-wrap: nowrap; li { margin: 0 !important; padding: 0 !important; flex: 0 0 auto; background-color: transparent !important; border: 0 !important; a, button, span { display: block; padding: 12px 20px; height: auto !important; min-height: 0 !important; font-family: ${roboto}; font-weight: 600; font-size: 14px; line-height: normal !important; text-decoration: none; color: ${colours.functional.primary}; background-color: transparent !important; border: 1px solid ${sportBorder} !important; border-radius: 100px; white-space: nowrap; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white} !important; border-color: ${darkBorder} !important; } `}; } &.Opta-On a, &.Opta-On button, &.Opta-On span, &.active a, &.active button, &.active span { border: 2px solid ${colours.functional.black} !important; background-color: transparent !important; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { border-color: ${colours.functional.white} !important; } `}; } } } } .Opta-Overlayer, .Opta-Overlay { display: none !important; } table.Opta-Ranking { width: 100%; border-collapse: separate; border-spacing: 0; background-color: transparent; border: 1px solid ${sportBorder}; ${props => props.bordered ? 'border-radius: 0 0 8px 8px;' : 'border-radius: 8px;'} overflow: hidden; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { border-color: ${darkBorder}; } `} tbody { tr { td { vertical-align: middle; font-family: ${roboto}; color: ${colours.functional.primary}; background-color: transparent !important; border-bottom: 1px solid ${sportBorder}; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white}; border-color: ${darkBorder}; } `}; } &:last-child td { border-bottom: none; } /* Hide player photos — only show team crests */ td.Opta-Image { display: none; } /* Rank number */ td.Opta-Rank { width: 40px; min-width: 40px; height: 40px; font-family: ${roboto}; font-weight: 500; font-size: 24px; text-align: center; padding-right: 12px; @media (min-width: ${breakpoints.medium}px) { padding-right: 24px; } } /* Team crest / flag */ td.Opta-Crest { width: 40px; min-width: 40px; padding-left: 0; padding-right: 16px; .Opta-Image-Holder { width: 40px !important; height: 40px !important; border-radius: 50%; overflow: hidden; display: flex; align-items: center; justify-content: center; img { width: 40px; height: 40px; object-fit: cover; } } } /* Player name & team container */ td .Opta-PlayerName { font-family: ${roboto}; font-weight: 500; font-size: 14px; color: ${colours.functional.primary}; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white}; } `}; } td .Opta-Team { font-family: ${roboto}; font-weight: 400; font-size: 14px; margin-top: 10px; color: ${colours.functional.secondary}; background-image: none !important; padding-left: 0 !important; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white}; } `}; } /* Score */ td.Opta-Score { font-family: ${roboto}; font-weight: 500; font-size: 24px; text-align: right; padding-right: 12px; color: ${colours.functional.primary}; div { display: none; } ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white}; } `}; } } /* Regular rows: no background */ tr.Opta-Odd, tr.Opta-Even { background-color: ${colours.functional.white}; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { background-color: ${darkBg}; } `}; } /* Regular rows: padding 8px 12px */ tr:not(.Opta-FeatureHeader) { td { padding-top: 12px; padding-bottom: 12px; font-size: 18px; } ${props => props.widget === 'team_ranking' && ` td[class*="Opta-Team-"] { font-size: 14px; } `} td:first-child { padding-left: 12px; } td:last-child { padding-right: 24px; } } /* Featured row(s): gradient background, padding 16px 12px, larger name */ tr.Opta-FeatureHeader { background: linear-gradient( 90deg, ${colours.functional.white} 0%, #ddf3e8 100% ) !important; td { border-bottom: 1px solid ${sportBorder}; } ${props => props.isApp && ` @media (prefers-color-scheme: dark) { background: linear-gradient(90deg, ${darkBg} 0%, ${darkFeatureGreen} 100%) !important; } td { @media (prefers-color-scheme: dark) { border-color: ${darkBorder}; } } `} td { padding-top: 16px; padding-bottom: 16px; } td:first-child { padding-left: 12px; } td:last-child { padding-right: 24px; } td .Opta-PlayerName { font-weight: 600; font-size: 16px; color: ${colours.functional.primary} !important; @media (min-width: ${breakpoints.medium}px) { font-size: 18px; } ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white} !important; } `}; } ${props => props.widget === 'team_ranking' && ` td[class*="Opta-Team-"] { font-weight: 600; font-size: 16px; @media (min-width: ${breakpoints.medium}px) { font-size: 18px; } } `} td .Opta-Team { color: ${colours.functional.black} !important; ${props => props.isApp && ` @media (prefers-color-scheme: dark) { color: ${colours.functional.white} !important; } `}; } } } } /* Yellow cards tab – warm gradient */ ${props => props.yellowCardPosition && props.yellowCardPosition > 0 ? ` .Opta-TabbedContent > li:nth-child(${props.yellowCardPosition}) { table.Opta-Ranking tbody tr.Opta-FeatureHeader { background: linear-gradient( 90deg, ${colours.functional.white} 0%, #fffbd8 100% ) !important; td { border-bottom: 1px solid #ffdfb5; } ${ props.isApp ? ` @media (prefers-color-scheme: dark) { background: linear-gradient(90deg, ${darkBg} 0%, ${darkFeatureYellow} 100%) !important; } td { @media (prefers-color-scheme: dark) { border-color: ${darkFeatureBorderYellow}; } } ` : '' } } } ` : ''} /* Red cards tab – red gradient */ ${props => props.redCardPosition && props.redCardPosition > 0 ? ` .Opta-TabbedContent > li:nth-child(${props.redCardPosition}) { table.Opta-Ranking tbody tr.Opta-FeatureHeader { background: linear-gradient( 90deg, ${colours.functional.white} 0%, #ffe8e8 100% ) !important; td { border-bottom: 1px solid #ffcac5; } ${ props.isApp ? ` @media (prefers-color-scheme: dark) { background: linear-gradient(90deg, ${darkBg} 0%, ${darkFeatureRed} 100%) !important; } td { @media (prefers-color-scheme: dark) { border-color: ${darkFeatureBorderRed}; } } ` : '' } } } ` : ''} } `;