media/css/firefox/new/desktop/refresh-experiment.scss (532 lines of code) (raw):
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
@use 'sass:math';
$font-path: '/media/protocol/fonts';
$image-path: '/media/protocol/img';
@import '~@mozilla-protocol/core/protocol/css/includes/lib';
@import '~@mozilla-protocol/core/protocol/css/components/logos/wordmark';
@import '~@mozilla-protocol/core/protocol/css/components/logos/wordmark-product-firefox';
@import '~@mozilla-protocol/core/protocol/css/components/notification-bar';
@import '~@mozilla-protocol/core/protocol/css/components/section-heading';
@import '~@mozilla-protocol/core/protocol/css/templates/multi-column';
@import '../../../protocol/components/sub-navigation';
// --------------------------------------------------------------------------
// Protocol over-rides
// https://github.com/mozilla/protocol/issues/345
// https://github.com/mozilla/protocol/issues/536
// https://github.com/mozilla/bedrock/pull/9096
// xs
$v-grid-xs: $layout-md;
$h-grid-xs: $layout-xs;
// md
$v-grid-md: $layout-xl * 0.5;
$h-grid-md: 64px;
// lg
$v-grid-lg: 192px * 0.5;
$h-grid-lg: 80px;
main {
background-color: $color-white; // for IE6
color: $color-dark-gray-30;
h2,
h3,
h4 {
color: $color-marketing-gray-99;
margin-bottom: $spacing-md;
text-wrap: balance;
}
h3 {
font-weight: normal;
}
img {
.mzp-c-card & {
display: block;
margin-bottom: $spacing-lg;
}
}
}
// notification
.mzp-c-notification-bar {
a:link {
margin: 0;
}
}
// emphasis box
.mzp-c-emphasis-box {
padding: $v-grid-xs $h-grid-xs;
background-color: #EDEDF0;
border-radius: 30px;
max-width: $content-xl + $layout-xl;
box-sizing: border-box;
margin: 0 auto;
@media #{$mq-md} {
padding: $layout-md;
border-radius: 40px;
}
@media #{$mq-lg} {
padding: $layout-lg;
border-radius: 60px;
}
@media #{$mq-xl} {
padding: $layout-xl;
}
}
// button container
.mzp-c-button-download-container {
.main-download & { // target main to avoid conflicting with nav
margin-bottom: 0;
}
.t-intro & {
@include bidi(((text-align, left, right),));
}
.t-features &,
.t-discover & {
display: block;
}
}
// cta link
button.mzp-c-cta-link {
background: none;
border: 0;
color: $color-link;
cursor: pointer;
padding: 0;
text-decoration: underline;
&:hover {
color: $color-link-hover;
}
}
// --------------------------------------------------------------------------
// conditional content classes
.show-android,
.show-ios {
display: none !important; /* stylelint-disable-line declaration-no-important */
}
.ios .show-ios {
display: block !important; /* stylelint-disable-line declaration-no-important */
}
.android .show-android {
display: block !important; /* stylelint-disable-line declaration-no-important */
}
.ios,
.android {
#download-features,
#download-discover {
display: none;
}
}
.show-else {
.android &,
.ios & {
display: none !important; /* stylelint-disable-line declaration-no-important */
}
}
// --------------------------------------------------------------------------
.u-visually-hidden {
@include visually-hidden;
}
// --------------------------------------------------------------------------
// section titles
.mzp-c-section-heading {
@include text-title-md;
}
// --------------------------------------------------------------------------
// Blocks
// used for highlights, hero, and mobile
.c-block {
margin: 0 auto;
overflow-x: hidden;
padding: $v-grid-xs 0;
position: relative;
@media #{$mq-md} {
padding: $v-grid-md 0;
}
@media #{$mq-lg} {
padding: $v-grid-lg 0;
}
}
.c-block-container {
@include clearfix;
@include border-box;
margin: 0 auto;
max-width: $content-xl + $layout-xl * 2;
min-width: $content-xs;
padding: 0 $layout-sm;
.c-block-media-img {
margin: 0 auto;
}
@media #{$mq-lg} {
padding: 0 $layout-xl;
}
// vertical and horizontal aligment for body or media
// text align works for float fallback
// justify positioning works for no constraint
// absolute positioning works on constrain-height
@media #{$mq-md} {
padding: 0 $layout-lg;
.l-h-start {
@include bidi(((text-align, left, right),));
justify-self: start;
.c-block-media-img {
@include bidi((
(margin-right, auto, margin-left, 0),
(margin-left, 0, margin-right, 0),
));
}
}
.l-h-center {
justify-self: center;
text-align: center;
.c-block-media-img {
margin: 0 auto;
}
}
.l-h-end {
justify-self: end;
.c-block-media-img {
@include bidi((
(margin-left, auto, margin-right, 0),
(margin-right, 0, margin-left, 0),
));
}
}
}
// vertical alignment only browsers with grid support
@supports (display:grid) {
.l-v-start {
align-self: start;
}
.l-v-center {
align-self: center;
}
.l-v-end {
align-self: end;
}
}
}
.c-block-media-img {
display: block;
}
.c-block-body {
position: relative;
// vertical spacing between body and media before side by side display kicks in
@media all and (max-width: #{$screen-md - 1}) {
&:first-child {
margin-bottom: $v-grid-xs;
}
&:last-child {
margin-top: $v-grid-xs;
}
.mzp-has-media-hide-on-sm & {
margin-bottom: 0;
margin-top: 0;
}
}
}
.c-block-media {
position: relative;
@media (max-width: #{$screen-md - 1px}) {
.mzp-has-media-hide-on-sm & {
display: none;
}
}
// constraints on height or width of media
@media all and (max-width: #{$screen-md - 1}) {
// center image & constrain width
&.l-media-constrain-on-sm {
text-align: center;
.c-block-media-img {
margin: 0 auto;
width: $content-sm;
}
}
}
}
// --------------------------------------
// side by side layout, float based fall back
@media #{$mq-md} {
.c-block-body {
@include border-box;
@include bidi(((float, left, right),));
width: 50%;
padding: 0 ($h-grid-lg * 0.5);
> *:first-child {
margin-top: 0;
}
> *:last-child {
margin-bottom: 0;
}
.l-reversed & {
@include bidi(((float, right, left),));
}
}
.c-block-media {
@include border-box;
@include bidi(((float, right, left),));
width: 50%;
padding: 0 ($h-grid-lg * 0.5);
.l-reversed & {
@include bidi(((float, left, right),));
}
}
}
// --------------------------------------
// side by side layout, grid based
@media #{$mq-md} {
@supports (display:grid) {
.c-block-container {
// grid is all start/end based we don't need bidi declarations for RTL support \o/
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-areas: 'body media';
grid-column-gap: $h-grid-lg;
.l-reversed > & {
grid-template-areas: 'media body';
}
}
.c-block-body,
.c-block-media {
.c-block-container & { // extra specificitly to over-ride the styles that make the float fall-back work
float: none;
min-width: 0; // because of https://stackoverflow.com/questions/43311943/prevent-content-from-expanding-grid-items
padding: 0;
width: auto;
}
}
.c-block-body {
grid-area: body;
max-width: $content-sm;
}
.c-block-media {
align-self: stretch;
grid-area: media;
.c-block-media-img {
display: block;
max-width: 100%;
}
}
}
}
// --------------------------------------------------------------------------
// intro
.c-intro-download-alt {
@include text-body-xs;
color: $color-dark-gray-30;
display: block;
margin-top: $spacing-md;
a:link,
a:visited {
color: inherit;
text-decoration: none;
}
a:hover,
a:active,
a:focus {
text-decoration: underline;
}
}
// --------------------------------------------------------------------------
// releases
// different from card row of 3 because of behaviour at mq-md
.t-releases h2 {
@include visually-hidden;
}
.t-releases ul {
@include clearfix;
margin: 0 auto;
li {
margin-bottom: $layout-lg;
padding-top: $layout-md + $spacing-md;
position: relative;
.t-custom &:last-child {
margin-bottom: 0;
}
}
img {
display: block;
margin: 0 auto;
text-align: center;
position: absolute;
top: 0;
left: 0;
max-height: $layout-sm;
}
p {
margin-bottom: 0;
}
@media #{$mq-md} {
img {
float: left;
margin-left: 0;
margin-right: $layout-sm;
}
}
@media #{$mq-lg} {
li {
float: left;
width: calc(33.3% - (#{$h-grid-lg} - #{math.div($h-grid-lg, 3)}));
margin-bottom: 0;
padding-top: 54px + $spacing-xl;
&:nth-child(2n) {
margin-left: $h-grid-lg;
margin-right: $h-grid-lg;
}
}
img {
float: none;
max-height: 54px;
}
.t-cursor img {
max-height: 38px;
}
}
}
.c-notes {
margin-bottom: 0;
text-align: center;
@media #{$mq-lg} {
margin-top: $layout-sm;
margin-bottom: $layout-sm * -1;
}
}
// --------------------------------------------------------------------------
// highlights
// includes t-compare, t-block, t-everyone, and t-devices block components
.t-highlights {
.mzp-c-section-heading {
max-width: $content-md;
}
p {
margin-bottom: $spacing-xl;
}
}
// --------------------------------------
#protection-report {
display: none;
.state-firefox-desktop-70 & {
display: block;
}
}
// --------------------------------------
.t-devices .mobile-download-buttons li {
display: inline-block;
margin-right: $spacing-md;
}
// --------------------------------------------------------------------------
// customization
.t-custom {
background-color: #F9F9FB;
}
.c-screen {
position: relative;
text-align: center;
margin-bottom: $layout-sm;
svg {
display: block;
width: $content-xl;
max-width: 100%;
height: auto;
margin: 0 auto;
}
@media #{$mq-md} {
margin-bottom: $layout-lg;
margin-left: -$layout-xl;
margin-right: -$layout-xl;
}
}
// --------------------------------------------------------------------------
.t-free {
.mzp-c-emphasis-box {
@include clearfix;
}
}
.c-free {
text-align: center;
img {
margin: 0 auto;
}
h2, p {
text-align: start;
}
@media #{$mq-md} {
p {
font-size: 20px;
}
}
@media #{$mq-lg} {
display: grid;
grid-template-columns: 300px 1fr;
grid-template-rows: min-content 1fr;
grid-column-gap: $h-grid-lg;
.c-free-body {
align-self: center;
}
p {
font-size: 24px;
margin-bottom: 0;
}
}
}
// --------------------------------------------------------------------------
.c-support {
@include text-title-xs;
background-color: $color-light-gray-10;
display: block; // IE8
font-weight: bold;
padding: $spacing-lg;
text-align: center;
}
// --------------------------------------------------------------------------
// mobile
.android main,
.ios main {
@include flexbox;
flex-direction: column;
}
#mobile-banner {
order: -1;
}
.c-mobile {
@include light-links;
background-color: $color-violet-70;
color: $color-white;
position: relative;
overflow-x: hidden;
h2 {
color: $color-white;
}
p {
margin-bottom: $layout-md;
}
@media #{$mq-sm} {
&::after {
@include bidi((
(left, 60%, right, auto),
(margin-left, $h-grid-xs * 0.5, margin-left, 0),
));
background-position: top center;
background-repeat: no-repeat;
border-radius: $border-radius-sm;
bottom: $layout-lg;
content: '';
display: block;
position: absolute;
top: $layout-lg;
width: 40%;
&,
.android & {
@include at2x('/media/img/firefox/new/desktop/android.png', contain);
}
.ios & {
@include at2x('/media/img/firefox/new/desktop/ios.png', contain);
}
}
.c-mobile-text {
@include bidi(((padding-right, $h-grid-xs * 0.5, padding-left, 0),));
@include border-box;
max-width: 60%;
}
}
@media #{$mq-md} {
&::after {
@include bidi((
(left, 50%, right, auto),
(margin-left, $h-grid-md * 0.5, margin-right, 0),
));
}
.c-mobile-text {
@include bidi(((padding-right, $h-grid-md * 0.5, padding-left, 0),));
max-width: 50%;
}
}
@media #{$mq-lg} {
&::after {
@include bidi(((margin-left, $h-grid-lg * 0.5, margin-right, 0),));
}
.c-mobile-text {
@include bidi(((padding-right, $h-grid-lg * 0.5, padding-left, 0),));
}
}
}
.c-desktop a {
@include text-title-xs;
background-image: url('/media/img/firefox/new/desktop/mobile-arrow.svg');
background-position: bottom center;
background-repeat: no-repeat;
color: $color-purple-50;
display: block;
font-weight: bold;
padding: $spacing-md $h-grid-xs #{$spacing-lg + 64px};
text-align: center;
text-decoration: none;
}
// --------------------------------------------------------------------------
// scroll animation
@supports (animation-fill-mode: forwards) {
.has-animate {
opacity: 0;
transform-origin: bottom center;
}
.is-animated {
animation-duration: 1s;
animation-fill-mode: forwards;
animation-iteration-count: 1;
animation-name: zoom;
}
@keyframes zoom {
from {
opacity: 0;
transform: scaleX(0.8) scaleY(0.8);
}
to {
opacity: 1;
transform: scaleX(1) scaleY(1);
}
}
}