UNPKG

@viewdo/dxp-story-player-assets

Version:
914 lines (784 loc) 23.4 kB
//=============================== // Vanilla Bean settings and mixins //=============================== .init-vanillabean(@primary: #1a658f, @secondary: #7566a0, @highlight: #FDD757, @theme: default, @experienceWidth: 48rem) { .vanillabean-dependencies(); .vanillabean-setup(); .vanillabean-setup() { //text colors @lightText: @white; @darkText: #212121; @contrast: contrast(@primary, @darkText, @lightText); //White or Black @contrastInverted: contrast(@contrast, @darkText, @lightText); /*===================== 1 Color Palette ======================*/ .genMonocramaticClasses(@primary, primary, standard, background); .genMonocramaticClasses(@primary, primary, standard, color); .genMonocramaticClasses(@secondary, secondary, standard, background); .genMonocramaticClasses(@secondary, secondary, standard, color); /*===================== 2 Buttons ======================*/ .setThemeStyles(@theme); @defaultButtonStyles: { border-radius: 100px; text-transform: uppercase; font-size: 0.75rem; font-weight: bold; padding: 1rem 1.5rem; cursor: pointer; text-decoration: none; background: @buttonBgColor; box-shadow: @buttonShadow; color: @buttonTextColor; }; @footerCTAButtonStyles: { background: @highlight; color: contrast(@highlight, @darkText, @lightText); font-size: 1.125rem; border-radius: 8px; padding: 0.5em 1.5em; margin: 0.5em; text-decoration: none; display: inline-flex; flex-direction: row; text-align: left; align-items: center; justify-content: center; line-height: 1.4; .responsive(mobile, {font-size: 1rem;}); }; //default buttons .ivx-input-container-buttons { .genButtons(default, @defaultButtonStyles); .ivx-input-buttons { display: block; width: 100%; max-width: 20rem; margin: 0.5rem auto; &[id*="undefined"] { box-shadow: none; text-transform: none; text-decoration: underline; font-weight: normal; font-size: 0.875rem; background: none; } } } //skip button .ivx-input-buttons-skip { display: inline-block; background: @contrast; color: @secondary; padding: 0.25rem 1rem; margin: 1rem 0; font-size: 0.75rem; text-transform: uppercase; font-weight: bold; cursor: pointer; } //footer cta buttons #footer { .ivx-link-container { .genButtons(default, @footerCTAButtonStyles); } } /*===================== 3 Components ======================*/ .progress-bar { height: 0.5rem; background: @white; .progress-indicator { height: 100%; background: @primary; border: 2px solid @white; box-sizing: border-box; } } .progress-read-out { display: none; } /*===================== 4 Video Players ======================*/ //fix video centering issue section.ivx-state-video-section { max-width: 100%; header, footer { max-width: 85%; margin: 0 auto; } } //custom controls .genPlayerStyles(); .vanillabean-video-controls(@theme); .vanillabean-video-controls(@theme) when (@theme = default) { @buttonColor: contrast(@primary); @scrubBar: contrast(@contrast, @darkText, @secondary); .vanillabean-global-video-styles(@buttonColor, @buttonColor, @scrubBar); } .vanillabean-video-controls(@theme) when (@theme = dark) { .vanillabean-global-video-styles(#fff, #fff, @primary); } .vanillabean-video-controls(@theme) when (@theme = light) { .vanillabean-global-video-styles(#000, #000, @primary); } .vanillabean-global-video-styles(@buttonColor, @scrubBG, @scrubBar) { .createVideoControls(); .ivx-video-controls .ivx-video-controls-container { margin: 0 auto; -webkit-transition: max-width 0.5s ease; transition: max-width 0.5s ease; &.ivx-video-paused { max-width: 700px; } &.ivx-video-playing { max-width: 80vw; } } .ivx-video-controls .ivx-video-controls-container .ivx-video-controls-play-pause, .ivx-video-controls .ivx-video-controls-container .ivx-video-controls-mute { background: none; color: @buttonColor; border: none; } .ivx-video-controls .video-control-container .scrub-bar { background-color: @scrubBG; } .ivx-video-controls .video-control-container .scrub-bar .time-lapsed { background-color: @scrubBar; } } //make sure video poster images fill player area for Vimeo video { object-fit: cover; } /*===================== 5 Forms ======================*/ @baseSubmitButton: { @defaultButtonStyles(); margin: 1rem 0; }; @optionsContainers: { margin-top: 1em; .ivx-input-label { display: block; text-transform: uppercase; font-weight: bold; font-size: 0.75em; padding-bottom: 0.5em; text-align: left; } }; @baseTextInput: background @white, border none; .genErrorMessages(); .genErrorMessageContainers(); .genTextInputs(custom, @baseTextInput); .genTextInputContainers(); .genTextareaInputs(custom, @baseTextInput); .genTextareaInputContainers(); .genRadioInputs(); .genRadioInputContainers(); .genCheckboxInputs(); .genCheckboxInputContainers(); .genOptionsInputs(); .genOptionsInputContainers(custom, @optionsContainers); .genSubmitButtonInputs(default, @baseSubmitButton); //remove white background from errors .ivx-input-error-message { background: none; color: @errorColor; clear: both; } //override - need to make a custom mixin in base to do this .ivx-input-container-text, .ivx-input-container-email, .ivx-input-container-url, .ivx-input-container-number, .ivx-input-container-options, .ivx-input-container-textarea { .ivx-input-label { color: @inputLabelColor; } } .responsive( mobile, {.ivx-input-container-text, .ivx-input-container-email, .ivx-input-container-url, .ivx-input-container-number, .ivx-input-container-options, .ivx-input-container-textarea, .ivx-input-container-radio, .ivx-input-container-checkbox {margin-top: .25em;}} ); //custom checkboxes .ivx-input-container-checkbox { label{ font-size: .75rem; text-align: left; padding-left: 2rem; } } #collect-form #consented input { background: none; border: none; display: block; height: 0px; } .checklist-item { float: left; transform: translateX(8vw); input { background: none; border: none; display: block; height: 0px; } } .ivx-input-container-checkbox .ivx-input-label { position: relative; .ivx-input-checkbox { appearance: none; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; padding-left: 1rem; &:before { content: ""; display: block; width: 1.25rem; height: 1.25rem; background: white; position: absolute; left: 0; top: 50%; transform: translateY(-50%); } &:checked:after { content: ""; display: block; position: absolute; left: 0.25em; top: 50%; transform: translateY(-100%); background: black; width: 0.875em; height: 0.6125em; -webkit-mask-image: url(https://static.dxp.media/viewdo/vanilla-bean/images/icons/check.svg); -webkit-mask-size: contain; mask-image: url(https://static.dxp.media/viewdo/vanilla-bean/images/icons/check.svg); mask-size: contain; margin: 0.31875em 0.18755em; } } } //custom radio buttons .ivx-input-container-radio { span:not(.error-message) { display: block; text-transform: uppercase; font-weight: bold; font-size: 0.75em; color: @inputLabelColor; padding-bottom: 0.5em; text-align: left; } label { position: relative; .ivx-input-radio { appearance: none; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; padding-left: 1rem; &:before { content: ""; display: block; width: 1.25rem; height: 1.25rem; border-radius: 1.25rem; background: white; position: absolute; left: 0px; top: 50%; transform: translateY(-50%); } &:checked:after { content: ""; display: block; position: absolute; left: 0.1875rem; top: 50%; transform: translateY(-50%); background: @primary; width: 0.875rem; border-radius: 0.875rem; height: 0.875rem; } } } } //custom select lists .ivx-input-container-options { label { position: relative; &:after { content: "\25BC"; display: block; width: 10px; height: 10px; right: 0px; position: absolute; top: 37px; right: 13px; font-size: 0.75em; color: @primary; } } select { appearance: none; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; border: none; border-radius: 0px; padding: 0.5em 0.75em; } } // submit button styles .ivx-input-submit-button { margin: 2rem 0; &:hover { background: white; color: black; } } // a subtle focus style for keyboard-input elements input[type="text"]:focus, input[type="text"]:focus, textarea:focus { outline: 1px solid @outlineColor; } textarea { height: 225px; width: inherit; background: rgba(255, 255, 255, 0.75); border-radius: 5px; padding: 2rem; } .survey2 #survey2-form label { display: none; } /* no outline for non-keyboard-inputs elements */ button:focus, select:focus { outline: none; } /*===================== 6 Scenes ======================*/ /*========================= Vanilla Bean Mixins =========================== 1. Layout 2. Backgrounds 3. Typography =========================*/ /*===================== 1 Layout ======================*/ ._defaultVanillaBeanSettings() { html, body { height: 100%; min-height: 100%; overflow: hidden; } img { max-width: 100%; } #header { line-height: 0; #logo { padding: @logoPadding 0 0; img { display: block; margin: 0 auto; height: auto; width: auto; max-height: @logoHeight; max-width: 15rem; .responsive(mobile, {max-height: @logoHeight * .667;}); } } } //dimensions for vertical responsiveness @progressHeight: 0.5rem; @logoTotalHeight: @logoHeight + @logoPadding; @textHeight: 3.25rem; @textPad: 1rem; @skipButton: 3.625rem; @footerHeight: 6.0625rem; //this will cover the tagline for header or footer @contentPad: 3rem; @videoSpaceV: @progressHeight + @logoTotalHeight + @logoPadding + @textHeight + @textPad + @footerHeight + @contentPad + @skipButton; @videoSpaceH: 1.777777777777778 * @videoSpaceV; ._landscapeSettings { } ._desktopSettings { video { -webkit-transition: max-width 0.5s ease; transition: max-width 0.5s ease; height: auto; } &.ivx-video-paused { max-width: 700px; } &.ivx-video-playing { max-width: 80vw; } } .ivx-video-player-html5 { .responsive(desktop, {._desktopSettings;}); .responsive(landscape, {._landscapeSettings;}); } } .vanillabean-layout(@layoutType: default, @logoPadding: 1.5rem, @logoHeight: 3rem, @contentMargin: 1.5rem, @taglineHeight: 2.5rem) when (@layoutType = default) { //grid options - @columnCount, @gutterWidth (in pixels), @maxContainerWidth (any units), @gridtype (flexbox or default); @gutterWidth: 16px; @maxContainerWidth: 80rem; .make-grids(12, @gutterWidth, @maxContainerWidth); ._defaultVanillaBeanSettings(); body { display: flex; flex-direction: column; background-color: @primary; color: @themeTextColor; #header, #footer { flex: 0 0 auto; text-align: center; } #footer { background-color: @footerBgColor; } #state-player { flex: 1 1 auto; display: flex; flex-direction: column; overflow: auto; text-align: center; box-sizing: border-box; padding: @contentMargin 0; width: 100vw; max-width: 100vw; //fade out content when scrolling to separate header and footer -webkit-mask-image: linear-gradient( to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 5%, rgba(0, 0, 0, 1) 95%, rgba(0, 0, 0, 0) 100% ); mask-image: linear-gradient( to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 5%, rgba(0, 0, 0, 1) 95%, rgba(0, 0, 0, 0) 100% ); > *:first-child, > * { margin: auto; //center the content vertically max-width: @maxContainerWidth; min-width: 20rem; } section { &:not(.ivx-state-video-section) { .ivx-grid-1-1; } &.ivx-state-input-section { max-width: @experienceWidth; } &.ivx-state-video-section { header, footer { padding: 0 @gutterWidth; } } } } .header-tagline, .footer-tagline { background: @taglineBg; color: contrast(@taglineBg); line-height: @taglineHeight; .tagline-link { color: contrast(@taglineBg); font-size: ~"calc(@{taglineHeight} * .375)"; font-weight: bold; text-decoration: none; } .responsive( mobile, {@mobileTaglineHeight: @taglineHeight * .667; line-height: @mobileTaglineHeight; .tagline-link{font-size: ~"calc(@{mobileTaglineHeight} * .375)" ; max-width: 75%; line-height: 1.25; padding: 0.75rem 0;}} ); } .header-tagline{ margin-top: @logoPadding; } .footer-tagline { background: @footerTaglineBg; } } ///////////////////// //Responsive Styles ///////////////////// //Mobile landscape .responsive(landscape, {body{overflow: auto; display: block;}}); } //====================== // 1 Backgrounds //====================== .vanillabean-backgrounds(@primaryBgImage: ""; @secondaryBackgroundImages: none ""; @blurAmount: 3px; @primaryBgColor: @themePrimaryBgColor; @primaryBgOpacity: 15%; @secondaryBgColor: @themeSecondaryBgColor; @secondaryBgOpacity:@primaryBgOpacity ) { .primary-background { opacity: 1; transition: opacity 0.5s ease; } .genBackgroundImageClasses( global-bg, @primaryBgImage, @blurAmount, @primaryBgColor, @primaryBgOpacity, true, center, center ); .addBackgrounds(length(@secondaryBackgroundImages)); .addBackgrounds(@i) when (@i > 2) { .addBackgrounds(@i - 2); @key: extract(@secondaryBackgroundImages, @i - 1); @value: extract(@secondaryBackgroundImages, @i); .genBackgroundImageClasses( @key, @value, @blurAmount, @secondaryBgColor, @secondaryBgOpacity, true, center, center ); .secondary-background { &.ivx-background-image-@{key} { + .primary-background { opacity: 0; } } } } .addBackgrounds(@i) when (@i = 2) { @key: extract(@secondaryBackgroundImages, @i - 1); @value: extract(@secondaryBackgroundImages, @i); .genBackgroundImageClasses( @key, @value, @blurAmount, @secondaryBgColor, @secondaryBgOpacity, true, center, center ); .secondary-background { &.ivx-background-image-@{key} { + .primary-background { opacity: 0; } } } } } //====================== // 2 Typography //====================== .vanillabean-typography(@primaryFont: "Open Sans", sans-serif; @secondaryFont: @primaryFont; @baseFontSize: 16px; @mobileFontSize: 16px; @h1Size: 1.5rem;) { @bodyFont: @primaryFont; @headingFont: @secondaryFont; @fontSystem: primary; .setFontSystem(@fontSystem, @bodyFont, @headingFont, 1.3, 400); .setGlobalFont({.ivx-font-primary}); body { h1 { font-size: @h1Size; //use this for larger text like personalizations span { display: block; font-size: 3em; } small { margin: 0.5rem 0 1.5rem; } } h2 { font-size: @h1Size * 5 / 6; } h1 + h2 { margin-top: -0.875rem; } ul { display: block; text-align: left; li { a { color: white; } } } //Mobile landscape .responsive( mobile, {h1{font-size: @h1Size * .8;} h2{font-size: @h1Size * 2 / 3;}} ); } } //====================== // 3 Themes //====================== .setThemeStyles(@theme: default) when (@theme = default) { //theme colors @themeTextColor: @contrast; @themePrimaryBgColor: @primary; @themeSecondaryBgColor: @secondary; //forms @inputLabelColor: @contrast; @errorColor: contrast(@primary, #9c2b2e, #fff568); @outlineColor: fadeout(@contrastInverted, 85%); //footer and tagline @footerBgColor: fadeout(@contrastInverted, 85%); @taglineBg: fade(@contrastInverted, 25%); @footerTaglineBg: @taglineBg; //global buttons @buttonBgColor: none; @buttonShadow: inset 0px 0px 0px 2px @themeTextColor; @buttonTextColor: @themeTextColor; //ctas @ctaButtonBg: @buttonBgColor; @ctaButtonTextColor: @themeTextColor; @ctaButtonShadow: @buttonShadow; @ctaButtonPersistentBg: @highlight; @ctaButtonPersistentTextColor: contrast(@ctaButtonPersistentBg, @darkText, @lightText); //previous next navigation @navigationButtonTextColor: @themeTextColor; } .setThemeStyles(@theme: default) when (@theme = light) { //theme colors @themeTextColor: #4d4d4d; @themePrimaryBgColor: @white; @themeSecondaryBgColor: @white; //forms @inputLabelColor: @themeTextColor; @errorColor: #9c2b2e; @outlineColor: fadeout(@contrastInverted, 85%); //footer and tagline @footerBgColor: @primary; @taglineBg: @secondary; @footerTaglineBg: darken(@footerBgColor, 10%); //global buttons @buttonBgColor: @secondary; @buttonShadow: 0 0 15px 0 rgba(0, 0, 0, 0.2); @buttonTextColor: contrast(@secondary); //ctas @ctaButtonBg: @secondary; @ctaButtonTextColor: contrast(@ctaButtonBg); @ctaButtonShadow: none; @ctaButtonPersistentBg: @highlight; @ctaButtonPersistentTextColor: contrast(@ctaButtonPersistentBg, @darkText, @lightText); //previous next navigation @navigationButtonTextColor: @themeTextColor; } .setThemeStyles(@theme: default) when (@theme = dark) { //theme colors @themeTextColor: @white; @themePrimaryBgColor: #1c1c1c; @themeSecondaryBgColor: @themePrimaryBgColor; //forms @inputLabelColor: @themeTextColor; @errorColor: #fff568; @outlineColor: fadeout(@contrastInverted, 85%); //footer and tagline @footerBgColor: @primary; @taglineBg: rgba(0, 0, 0, 0.25); @footerTaglineBg: darken(@footerBgColor, 10%); //global buttons @buttonBgColor: @secondary; @buttonShadow: none; @buttonTextColor: contrast(@secondary); //ctas @ctaButtonBg: @secondary; @ctaButtonTextColor: contrast(@ctaButtonBg); @ctaButtonShadow: none; @ctaButtonPersistentBg: @highlight; @ctaButtonPersistentTextColor: contrast(@ctaButtonPersistentBg, @darkText, @lightText); //previous next navigation @navigationButtonTextColor: @themeTextColor; } } //========================= // Base iVX Styles & Mixins //========================= .vanillabean-dependencies() { //dxp base styles @import "../../base/index.less"; //dxp base mixins @import (reference) "../../base/framework.less"; @import (reference) "../../base/colors.less"; @import (reference) "../../base/typography.less"; @import (reference) "../../base/backgrounds.less"; @import (reference) "../../base/video-controls.less"; @import (reference) "../../base/buttons.less"; @import (reference) "../../base/icons.less"; @import (reference) "../../base/grid.less"; @import (reference) "../../base/responsive.less"; @import (reference) "../../base/animations.less"; @import (reference) "../../base/inputs.less"; //vanillabean scene styles @import (reference) "scenes/index.less"; //this is only for forge - MUST ADD IN JSON METADATA #player-services { display: none; } //init dxp base mixins .init(); .framework-mixins(); .color-palette-mixins(); .typography-mixins(); .background-mixins(); .video-control-mixins(); .button-mixins(); .form-input-mixins(); .grid-mixins(); .responsive-mixins(); .ivx-animations(); } }