Bug 1898818 - Home and newtab fixes so newtab with a wallpaper looks good in both light and dark mode r=desktop-theme-reviewers,home-newtab-reviewers,omc-reviewers,sfoster,aminomancer,amy

Differential Revision: https://phabricator.services.mozilla.com/D211623
This commit is contained in:
scottdowne 2024-05-30 18:47:21 +00:00
parent e99a626859
commit db8000f5ff
21 changed files with 493 additions and 292 deletions

View File

@ -1706,8 +1706,9 @@ pref("browser.newtabpage.activity-stream.discoverystream.region-weather-config",
// Preference to enable wallpaper selection in the Customize Menu of new tab page
pref("browser.newtabpage.activity-stream.newtabWallpapers.enabled", false);
pref("browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled", false);
// Current new tab page background image.
// Current new tab page background images.
pref("browser.newtabpage.activity-stream.newtabWallpapers.wallpaper-light", "");
pref("browser.newtabpage.activity-stream.newtabWallpapers.wallpaper-dark", "");

View File

@ -3,12 +3,16 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* stylelint-disable max-nesting-depth */
:root {
color-scheme: light;
--newtab-background-color: #F9F9FB;
--newtab-background-color-secondary: #FFF;
--newtab-text-primary-color: rgb(21, 20, 26);
--newtab-primary-action-background: rgb(0, 97, 224);
--newtab-contextual-text-primary-color: light-dark(var(--newtab-text-primary-color), rgb(251, 251, 254));
--newtab-primary-action-background: light-dark(rgb(0, 97, 224), rgb(0, 221, 255));
--newtab-primary-action-background-pocket: rgb(0, 128, 120);
--newtab-text-secondary-color: color-mix(in srgb, var(--newtab-text-primary-color) 70%, transparent);
--newtab-contextual-text-secondary-color: color-mix(in srgb, var(--newtab-contextual-text-primary-color) 70%, transparent);
--newtab-weather-background-color: light-dark(rgba(255, 255, 255, 70%), rgba(35, 34, 43, 70%));
--newtab-element-hover-color: color-mix(in srgb, var(--newtab-background-color) 90%, #000);
--newtab-element-active-color: color-mix(in srgb, var(--newtab-background-color) 80%, #000);
--newtab-button-background: var(--button-background-color);
@ -17,10 +21,10 @@
--newtab-button-hover-background: var(--button-background-color-hover);
--newtab-button-active-background: var(--button-background-color-active);
--newtab-button-text: var(--button-text-color);
--newtab-button-static-background: #F0F0F4;
--newtab-button-static-background: light-dark(#F0F0F4, #2B2A33);
--newtab-button-static-focus-background: var(--newtab-button-static-background);
--newtab-button-static-hover-background: #E0E0E6;
--newtab-button-static-active-background: #CFCFD8;
--newtab-button-static-hover-background: light-dark(#E0E0E6, #52525E);
--newtab-button-static-active-background: light-dark(#CFCFD8, #5B5B66);
--newtab-element-secondary-color: color-mix(in srgb, currentColor 5%, transparent);
--newtab-element-secondary-hover-color: color-mix(in srgb, currentColor 12%, transparent);
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 25%, transparent);
@ -31,7 +35,7 @@
--newtab-primary-action-background-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background-pocket) 25%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #000);
--newtab-wordmark-color: #20123A;
--newtab-wordmark-color: light-dark(#20123A, rgb(251, 251, 254));
--newtab-status-success: #058B00;
--newtab-status-error: #D70022;
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
@ -41,10 +45,10 @@
--newtab-button-secondary-color: inherit;
}
:root[lwt-newtab-brighttext] {
color-scheme: dark;
--newtab-background-color: #2B2A33;
--newtab-background-color-secondary: rgb(66, 65, 77);
--newtab-text-primary-color: rgb(251, 251, 254);
--newtab-primary-action-background: rgb(0, 221, 255);
--newtab-contextual-text-primary-color: light-dark(rgb(21, 20, 26), var(--newtab-text-primary-color));
--newtab-primary-action-background-pocket: rgb(0, 221, 255);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-element-hover-color: color-mix(in srgb, var(--newtab-primary-action-background) 55%, #FFF);
@ -56,11 +60,7 @@
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 30%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #FFF);
--newtab-primary-element-text-color: rgb(43, 42, 51);
--newtab-wordmark-color: rgb(251, 251, 254);
--newtab-status-success: #7C6;
--newtab-button-static-background: #2B2A33;
--newtab-button-static-hover-background: #52525E;
--newtab-button-static-active-background: #5B5B66;
}
@media (prefers-contrast) {

View File

@ -280,13 +280,19 @@ export class BaseContent extends React.PureComponent {
`url(${darkWallpaper?.wallpaperUrl || ""})`
);
// Grab the contrast of the currently displayed wallpaper.
const { theme } =
this.state.colorMode === "light" ? lightWallpaper : darkWallpaper;
// Add helper class to body if user has a wallpaper selected
if (lightWallpaper) {
global.document?.body.classList.add("hasWallpaperLight");
if (theme === "light") {
global.document?.body.classList.add("lightWallpaper");
global.document?.body.classList.remove("darkWallpaper");
}
if (darkWallpaper) {
global.document?.body.classList.add("hasWallpaperDark");
if (theme === "dark") {
global.document?.body.classList.add("darkWallpaper");
global.document?.body.classList.remove("lightWallpaper");
}
}
}

View File

@ -135,6 +135,10 @@ main {
.wallpaper-attribution {
padding: 0 $section-horizontal-padding;
font-size: 14px;
color: var(--newtab-contextual-text-primary-color);
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
&.theme-light {
display: inline-block;
@ -153,7 +157,7 @@ main {
}
a {
color: var(--newtab-element-color);
color: inherit;
&:hover {
text-decoration: none;

View File

@ -21,6 +21,11 @@
background-color: transparent;
padding: 15px;
// Contrast fix for users who have wallpapers set
&:not(:hover, :active) {
@include wallpaper-contrast-fix;
}
&:hover {
background-color: var(--newtab-element-hover-color);
}

View File

@ -41,11 +41,14 @@ $ds-width: 936px;
.ds-header,
.ds-layout .section-title span {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: $section-title-font-size;
font-weight: 600;
line-height: 20px;
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
.icon {
fill: var(--newtab-text-secondary-color);
}
@ -59,6 +62,9 @@ $ds-width: 936px;
color: var(--newtab-primary-action-background);
font-weight: 500;
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
&:is(:focus, :hover) {
text-decoration: none;
}

View File

@ -15,6 +15,9 @@
background-size: 20px;
color: var(--icon-color);
vertical-align: text-bottom;
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
}
.feature-highlight-modal {

View File

@ -1,7 +1,7 @@
/* stylelint-disable max-nesting-depth */
.ds-navigation {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 11.5px;
font-weight: 500;
line-height: 22px;
@ -20,6 +20,9 @@
text-align: end;
}
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
ul {
display: inline;
margin: 0;

View File

@ -39,6 +39,9 @@ $glyph-forward: url('chrome://browser/skin/forward.svg');
height: $logo-size;
margin-inline-start: 16px;
width: $wordmark-size;
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
}
@media (max-width: $break-point-medium - 1) {

View File

@ -126,6 +126,11 @@ $letter-fallback-color: $white;
}
}
// Contrast fix for users who have wallpapers set
&:not(:hover, :active, .active) {
@include wallpaper-contrast-fix;
}
// Necessary for when navigating by a keyboard, having the context
// menu open should display the "" button. This style is a clone
// of the `:active` state for `.context-menu-button`
@ -152,6 +157,9 @@ $letter-fallback-color: $white;
top: -20px;
transition: opacity 200ms;
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
&:hover {
background-color: var(--newtab-button-hover-background);
@ -180,7 +188,7 @@ $letter-fallback-color: $white;
// For letter fallback
align-items: center;
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
display: flex;
font-size: 32px;
font-weight: 200;
@ -286,7 +294,7 @@ $letter-fallback-color: $white;
}
.title {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
padding-top: 8px;
font: caption;
text-align: center;
@ -305,7 +313,7 @@ $letter-fallback-color: $white;
}
.sponsored-label {
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
font-size: 0.9em;
}

View File

@ -25,36 +25,48 @@ export class _WallpapersSection extends React.PureComponent {
const { id } = event.target;
const prefs = this.props.Prefs.values;
const colorMode = this.prefersDarkQuery?.matches ? "dark" : "light";
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, id);
if (prefs["newtabWallpapers.v2.enabled"]) {
// If we don't care about color mode, set both to the same wallpaper.
this.props.setPref(`newtabWallpapers.wallpaper-dark`, id);
this.props.setPref(`newtabWallpapers.wallpaper-light`, id);
} else {
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, id);
// bug 1892095
if (
prefs["newtabWallpapers.wallpaper-dark"] === "" &&
colorMode === "light"
) {
this.props.setPref(
"newtabWallpapers.wallpaper-dark",
id.replace("light", "dark")
);
}
if (
prefs["newtabWallpapers.wallpaper-light"] === "" &&
colorMode === "dark"
) {
this.props.setPref(
`newtabWallpapers.wallpaper-light`,
id.replace("dark", "light")
);
}
}
this.handleUserEvent({
selected_wallpaper: id,
hadPreviousWallpaper: !!this.props.activeWallpaper,
});
// bug 1892095
if (
prefs["newtabWallpapers.wallpaper-dark"] === "" &&
colorMode === "light"
) {
this.props.setPref(
"newtabWallpapers.wallpaper-dark",
id.replace("light", "dark")
);
}
if (
prefs["newtabWallpapers.wallpaper-light"] === "" &&
colorMode === "dark"
) {
this.props.setPref(
`newtabWallpapers.wallpaper-light`,
id.replace("dark", "light")
);
}
}
handleReset() {
const prefs = this.props.Prefs.values;
const colorMode = this.prefersDarkQuery?.matches ? "dark" : "light";
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, "");
if (prefs["newtabWallpapers.v2.enabled"]) {
this.props.setPref("newtabWallpapers.wallpaper-light", "");
this.props.setPref("newtabWallpapers.wallpaper-dark", "");
} else {
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, "");
}
this.handleUserEvent({
selected_wallpaper: "none",
hadPreviousWallpaper: !!this.props.activeWallpaper,
@ -74,9 +86,14 @@ export class _WallpapersSection extends React.PureComponent {
render() {
const { wallpaperList } = this.props.Wallpapers;
const { activeWallpaper } = this.props;
const prefs = this.props.Prefs.values;
let fieldsetClassname = `wallpaper-list`;
if (prefs["newtabWallpapers.v2.enabled"]) {
fieldsetClassname += " ignore-color-mode";
}
return (
<div>
<fieldset className="wallpaper-list">
<fieldset className={fieldsetClassname}>
{wallpaperList.map(({ title, theme, fluent_id }) => {
return (
<>

View File

@ -7,8 +7,8 @@
padding: 0;
border: none;
.wallpaper-input,
.sr-only {
&:not(.ignore-color-mode) .wallpaper-input,
&:not(.ignore-color-mode) .sr-only {
&.theme-light {
display: inline-block;

View File

@ -322,11 +322,12 @@ export class _Weather extends React.PureComponent {
</button>
</div>
</div>
<span
data-l10n-id="newtab-weather-sponsored"
data-l10n-args='{"provider": "AccuWeather"}'
className="weatherSponsorText"
></span>
<span className="weatherSponsorText">
<span
data-l10n-id="newtab-weather-sponsored"
data-l10n-args='{"provider": "AccuWeather"}'
></span>
</span>
</div>
);
}

View File

@ -57,7 +57,14 @@
.weatherSponsorText {
visibility: hidden;
font-size: var(--newtab-weather-sponsor-font-size);
color: var(--text-color-deemphasized);
color: var(--newtab-contextual-text-primary-color);
// Contrast fix for users who have wallpapers set
@include wallpaper-contrast-fix;
span {
color: var(--text-color-deemphasized);
}
}
.weatherInfoLink, .weatherButtonContextMenuWrapper {
@ -86,44 +93,22 @@
}
// Contrast fix for users who have wallpapers set
.hasWallpaperDark & {
@media (prefers-color-scheme: dark) {
// TODO: Replace with token
background-color: rgba(35, 34, 43, 70%);
.lightWallpaper &,
.darkWallpaper & {
background-color: var(--newtab-weather-background-color);
&:hover {
background-color: var(--newtab-button-static-hover-background);
}
&:hover:active {
background-color: var(--newtab-button-static-active-background);
}
&:hover {
background-color: var(--newtab-button-static-hover-background);
}
@media (prefers-contrast) and (prefers-color-scheme: dark) {
&:hover:active {
background-color: var(--newtab-button-static-active-background);
}
@media (prefers-contrast) {
background-color: var(--background-color-box);
}
}
.hasWallpaperLight & {
@media (prefers-color-scheme: light) {
// TODO: Replace with token
background-color: rgba(255, 255, 255, 70%);
&:hover {
background-color: var(--newtab-button-static-hover-background);
}
&:hover:active {
background-color: var(--newtab-button-static-active-background);
}
}
@media (prefers-contrast) and (prefers-color-scheme: light) {
background-color: var(--background-color-box);
}
}
}
.weatherInfoLink {
@ -179,12 +164,6 @@
z-index: 0;
}
@media (prefers-color-scheme: dark) {
&::after {
background-color: var(--color-gray-70);
}
}
&:hover {
&::after {
background-color: transparent

View File

@ -48,3 +48,15 @@
border-radius: 4px;
outline: none;
}
// Some wallpapers are light/dark, and may not match the user set contrast,
// so some text, icons, etc that are displayed over the wallpaper need a contrast fix.
@mixin wallpaper-contrast-fix {
.lightWallpaper & {
color-scheme: light;
}
.darkWallpaper & {
color-scheme: dark;
}
}

View File

@ -24,14 +24,24 @@ $shadow-image-inset: inset 0 0 0 0.5px $black-15;
// Default theme
:root {
color-scheme: light;
// General styles
--newtab-background-color: #{$in-content-page-background};
--newtab-background-color-secondary: #{$newtab-background-secondary};
--newtab-text-primary-color: #{$in-content-page-color};
--newtab-primary-action-background: #{$primary-blue};
// We need to be careful about the contrast of text over newtab wallpapers, which might not match the theme.
// --newtab-text-primary-color is set in contextTheme.js and reacts to possible installed addon themes.
// If we use that variable here, with light-dark, we can retain that addon theme text color,
// and also have a fallback in case the wallpaper contrast doesn't match.
--newtab-contextual-text-primary-color: light-dark(var(--newtab-text-primary-color), #{$in-content-page-color-dark});
--newtab-primary-action-background: light-dark(#{$primary-blue}, #{$primary-blue-dark});
// A button colour closer to the Pocket brand for usage in the Pocket section.
--newtab-primary-action-background-pocket: #{$primary-green};
--newtab-text-secondary-color: color-mix(in srgb, var(--newtab-text-primary-color) 70%, transparent);
--newtab-contextual-text-secondary-color: color-mix(in srgb, var(--newtab-contextual-text-primary-color) 70%, transparent);
// A background color for weather widget to help with wallpaper contrast.
--newtab-weather-background-color: light-dark(rgba(255, 255, 255, 70%), rgba(35, 34, 43, 70%));
// --newtab-element-*-color is used when an element needs to be set off from
// the primary background color.
@ -48,10 +58,10 @@ $shadow-image-inset: inset 0 0 0 0.5px $black-15;
// --newtab-button-static*-color is used on pocket cards and require a
// static color unit due to transparency issues with `color-mix`
--newtab-button-static-background: #F0F0F4;
--newtab-button-static-background: light-dark(#F0F0F4, #2B2A33);
--newtab-button-static-focus-background: var(--newtab-button-static-background);
--newtab-button-static-hover-background: #E0E0E6;
--newtab-button-static-active-background: #CFCFD8;
--newtab-button-static-hover-background: light-dark(#E0E0E6, #52525E);
--newtab-button-static-active-background: light-dark(#CFCFD8, #5B5B66);
// --newtab-element-secondary*-color is used when an element needs to be set
// off from the secondary background color.
@ -67,7 +77,7 @@ $shadow-image-inset: inset 0 0 0 0.5px $black-15;
--newtab-primary-action-background-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background-pocket) 25%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #{$black});
--newtab-wordmark-color: #{$newtab-wordmark-default-color};
--newtab-wordmark-color: light-dark(#{$newtab-wordmark-default-color}, #{$newtab-wordmark-darktheme-color});
--newtab-status-success: #{$status-green};
--newtab-status-error: #{$red-60};
--newtab-inner-box-shadow-color: #{$black-10};
@ -79,12 +89,13 @@ $shadow-image-inset: inset 0 0 0 0.5px $black-15;
--newtab-button-secondary-color: inherit;
&[lwt-newtab-brighttext] {
// We export color-scheme because some addon themes might not work with light-dark and prefers-color-scheme.
// If we add color-scheme here, we can still use light-dark
color-scheme: dark;
// General styles
--newtab-background-color: #{$in-content-page-background-dark};
--newtab-background-color-secondary: #{$newtab-background-secondary-dark};
--newtab-text-primary-color: #{$in-content-page-color-dark};
--newtab-primary-action-background: #{$primary-blue-dark};
--newtab-contextual-text-primary-color: light-dark(#{$in-content-page-color}, var(--newtab-text-primary-color));
--newtab-primary-action-background-pocket: #{$primary-blue-dark};
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
@ -100,14 +111,7 @@ $shadow-image-inset: inset 0 0 0 0.5px $black-15;
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #{$white});
--newtab-primary-element-text-color: #{$primary-text-color-dark};
--newtab-wordmark-color: #{$newtab-wordmark-darktheme-color};
--newtab-status-success: #{$status-dark-green};
// --newtab-button-static*-color is used on pocket cards and require a
// static color unit due to transparency issues with `color-mix`
--newtab-button-static-background: #2B2A33;
--newtab-button-static-hover-background: #52525E;
--newtab-button-static-active-background: #5B5B66;
}
}

View File

@ -34,12 +34,16 @@ input {
}
:root {
color-scheme: light;
--newtab-background-color: #F9F9FB;
--newtab-background-color-secondary: #FFF;
--newtab-text-primary-color: #15141a;
--newtab-primary-action-background: #0061e0;
--newtab-contextual-text-primary-color: light-dark(var(--newtab-text-primary-color), #fbfbfe);
--newtab-primary-action-background: light-dark(#0061e0, #00ddff);
--newtab-primary-action-background-pocket: #008078;
--newtab-text-secondary-color: color-mix(in srgb, var(--newtab-text-primary-color) 70%, transparent);
--newtab-contextual-text-secondary-color: color-mix(in srgb, var(--newtab-contextual-text-primary-color) 70%, transparent);
--newtab-weather-background-color: light-dark(rgba(255, 255, 255, 70%), rgba(35, 34, 43, 70%));
--newtab-element-hover-color: color-mix(in srgb, var(--newtab-background-color) 90%, #000);
--newtab-element-active-color: color-mix(in srgb, var(--newtab-background-color) 80%, #000);
--newtab-button-background: var(--button-background-color);
@ -48,10 +52,10 @@ input {
--newtab-button-hover-background: var(--button-background-color-hover);
--newtab-button-active-background: var(--button-background-color-active);
--newtab-button-text: var(--button-text-color);
--newtab-button-static-background: #F0F0F4;
--newtab-button-static-background: light-dark(#F0F0F4, #2B2A33);
--newtab-button-static-focus-background: var(--newtab-button-static-background);
--newtab-button-static-hover-background: #E0E0E6;
--newtab-button-static-active-background: #CFCFD8;
--newtab-button-static-hover-background: light-dark(#E0E0E6, #52525E);
--newtab-button-static-active-background: light-dark(#CFCFD8, #5B5B66);
--newtab-element-secondary-color: color-mix(in srgb, currentColor 5%, transparent);
--newtab-element-secondary-hover-color: color-mix(in srgb, currentColor 12%, transparent);
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 25%, transparent);
@ -62,7 +66,7 @@ input {
--newtab-primary-action-background-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background-pocket) 25%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #000);
--newtab-wordmark-color: #20123A;
--newtab-wordmark-color: light-dark(#20123A, #fbfbfe);
--newtab-status-success: #058B00;
--newtab-status-error: #D70022;
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
@ -72,10 +76,10 @@ input {
--newtab-button-secondary-color: inherit;
}
:root[lwt-newtab-brighttext] {
color-scheme: dark;
--newtab-background-color: #2B2A33;
--newtab-background-color-secondary: #42414d;
--newtab-text-primary-color: #fbfbfe;
--newtab-primary-action-background: #00ddff;
--newtab-contextual-text-primary-color: light-dark(#15141a, var(--newtab-text-primary-color));
--newtab-primary-action-background-pocket: #00ddff;
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-element-hover-color: color-mix(in srgb, var(--newtab-primary-action-background) 55%, #FFF);
@ -87,11 +91,7 @@ input {
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 30%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #FFF);
--newtab-primary-element-text-color: #2b2a33;
--newtab-wordmark-color: #fbfbfe;
--newtab-status-success: #7C6;
--newtab-button-static-background: #2B2A33;
--newtab-button-static-hover-background: #52525E;
--newtab-button-static-active-background: #5B5B66;
}
@media (prefers-contrast) {
@ -527,6 +527,13 @@ main section {
.wallpaper-attribution {
padding: 0 25px;
font-size: 14px;
color: var(--newtab-contextual-text-primary-color);
}
.lightWallpaper .wallpaper-attribution {
color-scheme: light;
}
.darkWallpaper .wallpaper-attribution {
color-scheme: dark;
}
.wallpaper-attribution.theme-light {
display: inline-block;
@ -541,7 +548,7 @@ main section {
display: inline-block;
}
.wallpaper-attribution a {
color: var(--newtab-element-color);
color: inherit;
}
.wallpaper-attribution a:hover {
text-decoration: none;
@ -678,6 +685,12 @@ main section {
.top-site-outer:is(:hover) .context-menu-button {
opacity: 1;
}
.lightWallpaper .top-site-outer:not(:hover, :active, .active) {
color-scheme: light;
}
.darkWallpaper .top-site-outer:not(:hover, :active, .active) {
color-scheme: dark;
}
.top-site-outer.active .context-menu-button {
opacity: 1;
background-color: var(--newtab-button-active-background);
@ -698,6 +711,12 @@ main section {
top: -20px;
transition: opacity 200ms;
}
.lightWallpaper .top-site-outer .context-menu-button {
color-scheme: light;
}
.darkWallpaper .top-site-outer .context-menu-button {
color-scheme: dark;
}
.top-site-outer .context-menu-button:hover {
background-color: var(--newtab-button-hover-background);
}
@ -720,7 +739,7 @@ main section {
cursor: pointer;
position: relative;
align-items: center;
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
display: flex;
font-size: 32px;
font-weight: 200;
@ -809,7 +828,7 @@ main section {
-moz-context-properties: fill;
}
.top-site-outer .title {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
padding-top: 8px;
font: caption;
text-align: center;
@ -826,7 +845,7 @@ main section {
white-space: nowrap;
}
.top-site-outer .title .sponsored-label {
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
font-size: 0.9em;
}
.top-site-outer .title:not(.sponsored) .sponsored-label {
@ -1269,6 +1288,12 @@ main section {
margin-inline-start: 16px;
width: 134px;
}
.lightWallpaper .search-wrapper .logo-and-wordmark .wordmark {
color-scheme: light;
}
.darkWallpaper .search-wrapper .logo-and-wordmark .wordmark {
color-scheme: dark;
}
@media (max-width: 609px) {
.search-wrapper .logo-and-wordmark .logo {
background-size: 64px;
@ -1680,6 +1705,12 @@ main section {
background-color: transparent;
padding: 15px;
}
.lightWallpaper .personalize-button:not(:hover, :active) {
color-scheme: light;
}
.darkWallpaper .personalize-button:not(:hover, :active) {
color-scheme: dark;
}
.personalize-button:hover {
background-color: var(--newtab-element-hover-color);
}
@ -1918,20 +1949,16 @@ main section {
padding: 0;
border: none;
}
.wallpaper-list .wallpaper-input.theme-light,
.wallpaper-list .sr-only.theme-light {
.wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-light, .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-light {
display: inline-block;
}
[lwt-newtab-brighttext] .wallpaper-list .wallpaper-input.theme-light,
[lwt-newtab-brighttext] .wallpaper-list .sr-only.theme-light {
[lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-light, [lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-light {
display: none;
}
.wallpaper-list .wallpaper-input.theme-dark,
.wallpaper-list .sr-only.theme-dark {
.wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-dark, .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-dark {
display: none;
}
[lwt-newtab-brighttext] .wallpaper-list .wallpaper-input.theme-dark,
[lwt-newtab-brighttext] .wallpaper-list .sr-only.theme-dark {
[lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-dark, [lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-dark {
display: inline-block;
}
.wallpaper-list .wallpaper-input {
@ -2064,6 +2091,15 @@ main section {
.weatherSponsorText {
visibility: hidden;
font-size: var(--newtab-weather-sponsor-font-size);
color: var(--newtab-contextual-text-primary-color);
}
.lightWallpaper .weatherSponsorText {
color-scheme: light;
}
.darkWallpaper .weatherSponsorText {
color-scheme: dark;
}
.weatherSponsorText span {
color: var(--text-color-deemphasized);
}
@ -2086,35 +2122,17 @@ main section {
.weatherInfoLink:focus-visible, .weatherButtonContextMenuWrapper:focus-visible {
outline: var(--focus-outline);
}
@media (prefers-color-scheme: dark) {
.hasWallpaperDark .weatherInfoLink, .hasWallpaperDark .weatherButtonContextMenuWrapper {
background-color: rgba(35, 34, 43, 0.7);
}
.hasWallpaperDark .weatherInfoLink:hover, .hasWallpaperDark .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
.hasWallpaperDark .weatherInfoLink:hover:active, .hasWallpaperDark .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
.lightWallpaper .weatherInfoLink, .darkWallpaper .weatherInfoLink, .lightWallpaper .weatherButtonContextMenuWrapper, .darkWallpaper .weatherButtonContextMenuWrapper {
background-color: var(--newtab-weather-background-color);
}
@media (prefers-contrast) and (prefers-color-scheme: dark) {
.hasWallpaperDark .weatherInfoLink, .hasWallpaperDark .weatherButtonContextMenuWrapper {
background-color: var(--background-color-box);
}
.lightWallpaper .weatherInfoLink:hover, .darkWallpaper .weatherInfoLink:hover, .lightWallpaper .weatherButtonContextMenuWrapper:hover, .darkWallpaper .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
@media (prefers-color-scheme: light) {
.hasWallpaperLight .weatherInfoLink, .hasWallpaperLight .weatherButtonContextMenuWrapper {
background-color: rgba(255, 255, 255, 0.7);
}
.hasWallpaperLight .weatherInfoLink:hover, .hasWallpaperLight .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
.hasWallpaperLight .weatherInfoLink:hover:active, .hasWallpaperLight .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
.lightWallpaper .weatherInfoLink:hover:active, .darkWallpaper .weatherInfoLink:hover:active, .lightWallpaper .weatherButtonContextMenuWrapper:hover:active, .darkWallpaper .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
@media (prefers-contrast) and (prefers-color-scheme: light) {
.hasWallpaperLight .weatherInfoLink, .hasWallpaperLight .weatherButtonContextMenuWrapper {
@media (prefers-contrast) {
.lightWallpaper .weatherInfoLink, .darkWallpaper .weatherInfoLink, .lightWallpaper .weatherButtonContextMenuWrapper, .darkWallpaper .weatherButtonContextMenuWrapper {
background-color: var(--background-color-box);
}
}
@ -2165,11 +2183,6 @@ main section {
position: absolute;
z-index: 0;
}
@media (prefers-color-scheme: dark) {
.weatherButtonContextMenuWrapper::after {
background-color: var(--color-gray-70);
}
}
.weatherButtonContextMenuWrapper:hover::after {
background-color: transparent;
}
@ -3133,11 +3146,19 @@ main section {
.ds-header,
.ds-layout .section-title span {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 17px;
font-weight: 600;
line-height: 20px;
}
.lightWallpaper .ds-header,
.lightWallpaper .ds-layout .section-title span {
color-scheme: light;
}
.darkWallpaper .ds-header,
.darkWallpaper .ds-layout .section-title span {
color-scheme: dark;
}
.ds-header .icon,
.ds-layout .section-title span .icon {
fill: var(--newtab-text-secondary-color);
@ -3150,6 +3171,12 @@ main section {
color: var(--newtab-primary-action-background);
font-weight: 500;
}
.lightWallpaper .collapsible-section.ds-layout .section-top-bar .learn-more-link a {
color-scheme: light;
}
.darkWallpaper .collapsible-section.ds-layout .section-top-bar .learn-more-link a {
color-scheme: dark;
}
.collapsible-section.ds-layout .section-top-bar .learn-more-link a:is(:focus, :hover) {
text-decoration: none;
}
@ -3719,7 +3746,7 @@ main section {
/* stylelint-disable max-nesting-depth */
.ds-navigation {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 11.5px;
font-weight: 500;
line-height: 22px;
@ -3737,6 +3764,12 @@ main section {
.ds-navigation.ds-navigation-right-aligned {
text-align: end;
}
.lightWallpaper .ds-navigation {
color-scheme: light;
}
.darkWallpaper .ds-navigation {
color-scheme: dark;
}
.ds-navigation ul {
display: inline;
margin: 0;
@ -4924,6 +4957,12 @@ main section {
color: var(--icon-color);
vertical-align: text-bottom;
}
.lightWallpaper .sponsored-content-highlight .icon-help {
color-scheme: light;
}
.darkWallpaper .sponsored-content-highlight .icon-help {
color-scheme: dark;
}
.sponsored-content-highlight .feature-highlight-modal.inset-inline-start::after {
margin-inline-end: 11px;
}

View File

@ -38,12 +38,16 @@ input {
}
:root {
color-scheme: light;
--newtab-background-color: #F9F9FB;
--newtab-background-color-secondary: #FFF;
--newtab-text-primary-color: #15141a;
--newtab-primary-action-background: #0061e0;
--newtab-contextual-text-primary-color: light-dark(var(--newtab-text-primary-color), #fbfbfe);
--newtab-primary-action-background: light-dark(#0061e0, #00ddff);
--newtab-primary-action-background-pocket: #008078;
--newtab-text-secondary-color: color-mix(in srgb, var(--newtab-text-primary-color) 70%, transparent);
--newtab-contextual-text-secondary-color: color-mix(in srgb, var(--newtab-contextual-text-primary-color) 70%, transparent);
--newtab-weather-background-color: light-dark(rgba(255, 255, 255, 70%), rgba(35, 34, 43, 70%));
--newtab-element-hover-color: color-mix(in srgb, var(--newtab-background-color) 90%, #000);
--newtab-element-active-color: color-mix(in srgb, var(--newtab-background-color) 80%, #000);
--newtab-button-background: var(--button-background-color);
@ -52,10 +56,10 @@ input {
--newtab-button-hover-background: var(--button-background-color-hover);
--newtab-button-active-background: var(--button-background-color-active);
--newtab-button-text: var(--button-text-color);
--newtab-button-static-background: #F0F0F4;
--newtab-button-static-background: light-dark(#F0F0F4, #2B2A33);
--newtab-button-static-focus-background: var(--newtab-button-static-background);
--newtab-button-static-hover-background: #E0E0E6;
--newtab-button-static-active-background: #CFCFD8;
--newtab-button-static-hover-background: light-dark(#E0E0E6, #52525E);
--newtab-button-static-active-background: light-dark(#CFCFD8, #5B5B66);
--newtab-element-secondary-color: color-mix(in srgb, currentColor 5%, transparent);
--newtab-element-secondary-hover-color: color-mix(in srgb, currentColor 12%, transparent);
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 25%, transparent);
@ -66,7 +70,7 @@ input {
--newtab-primary-action-background-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background-pocket) 25%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #000);
--newtab-wordmark-color: #20123A;
--newtab-wordmark-color: light-dark(#20123A, #fbfbfe);
--newtab-status-success: #058B00;
--newtab-status-error: #D70022;
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
@ -76,10 +80,10 @@ input {
--newtab-button-secondary-color: inherit;
}
:root[lwt-newtab-brighttext] {
color-scheme: dark;
--newtab-background-color: #2B2A33;
--newtab-background-color-secondary: #42414d;
--newtab-text-primary-color: #fbfbfe;
--newtab-primary-action-background: #00ddff;
--newtab-contextual-text-primary-color: light-dark(#15141a, var(--newtab-text-primary-color));
--newtab-primary-action-background-pocket: #00ddff;
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-element-hover-color: color-mix(in srgb, var(--newtab-primary-action-background) 55%, #FFF);
@ -91,11 +95,7 @@ input {
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 30%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #FFF);
--newtab-primary-element-text-color: #2b2a33;
--newtab-wordmark-color: #fbfbfe;
--newtab-status-success: #7C6;
--newtab-button-static-background: #2B2A33;
--newtab-button-static-hover-background: #52525E;
--newtab-button-static-active-background: #5B5B66;
}
@media (prefers-contrast) {
@ -531,6 +531,13 @@ main section {
.wallpaper-attribution {
padding: 0 25px;
font-size: 14px;
color: var(--newtab-contextual-text-primary-color);
}
.lightWallpaper .wallpaper-attribution {
color-scheme: light;
}
.darkWallpaper .wallpaper-attribution {
color-scheme: dark;
}
.wallpaper-attribution.theme-light {
display: inline-block;
@ -545,7 +552,7 @@ main section {
display: inline-block;
}
.wallpaper-attribution a {
color: var(--newtab-element-color);
color: inherit;
}
.wallpaper-attribution a:hover {
text-decoration: none;
@ -682,6 +689,12 @@ main section {
.top-site-outer:is(:hover) .context-menu-button {
opacity: 1;
}
.lightWallpaper .top-site-outer:not(:hover, :active, .active) {
color-scheme: light;
}
.darkWallpaper .top-site-outer:not(:hover, :active, .active) {
color-scheme: dark;
}
.top-site-outer.active .context-menu-button {
opacity: 1;
background-color: var(--newtab-button-active-background);
@ -702,6 +715,12 @@ main section {
top: -20px;
transition: opacity 200ms;
}
.lightWallpaper .top-site-outer .context-menu-button {
color-scheme: light;
}
.darkWallpaper .top-site-outer .context-menu-button {
color-scheme: dark;
}
.top-site-outer .context-menu-button:hover {
background-color: var(--newtab-button-hover-background);
}
@ -724,7 +743,7 @@ main section {
cursor: pointer;
position: relative;
align-items: center;
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
display: flex;
font-size: 32px;
font-weight: 200;
@ -813,7 +832,7 @@ main section {
-moz-context-properties: fill;
}
.top-site-outer .title {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
padding-top: 8px;
font: caption;
text-align: center;
@ -830,7 +849,7 @@ main section {
white-space: nowrap;
}
.top-site-outer .title .sponsored-label {
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
font-size: 0.9em;
}
.top-site-outer .title:not(.sponsored) .sponsored-label {
@ -1273,6 +1292,12 @@ main section {
margin-inline-start: 16px;
width: 134px;
}
.lightWallpaper .search-wrapper .logo-and-wordmark .wordmark {
color-scheme: light;
}
.darkWallpaper .search-wrapper .logo-and-wordmark .wordmark {
color-scheme: dark;
}
@media (max-width: 609px) {
.search-wrapper .logo-and-wordmark .logo {
background-size: 64px;
@ -1684,6 +1709,12 @@ main section {
background-color: transparent;
padding: 15px;
}
.lightWallpaper .personalize-button:not(:hover, :active) {
color-scheme: light;
}
.darkWallpaper .personalize-button:not(:hover, :active) {
color-scheme: dark;
}
.personalize-button:hover {
background-color: var(--newtab-element-hover-color);
}
@ -1922,20 +1953,16 @@ main section {
padding: 0;
border: none;
}
.wallpaper-list .wallpaper-input.theme-light,
.wallpaper-list .sr-only.theme-light {
.wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-light, .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-light {
display: inline-block;
}
[lwt-newtab-brighttext] .wallpaper-list .wallpaper-input.theme-light,
[lwt-newtab-brighttext] .wallpaper-list .sr-only.theme-light {
[lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-light, [lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-light {
display: none;
}
.wallpaper-list .wallpaper-input.theme-dark,
.wallpaper-list .sr-only.theme-dark {
.wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-dark, .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-dark {
display: none;
}
[lwt-newtab-brighttext] .wallpaper-list .wallpaper-input.theme-dark,
[lwt-newtab-brighttext] .wallpaper-list .sr-only.theme-dark {
[lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-dark, [lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-dark {
display: inline-block;
}
.wallpaper-list .wallpaper-input {
@ -2068,6 +2095,15 @@ main section {
.weatherSponsorText {
visibility: hidden;
font-size: var(--newtab-weather-sponsor-font-size);
color: var(--newtab-contextual-text-primary-color);
}
.lightWallpaper .weatherSponsorText {
color-scheme: light;
}
.darkWallpaper .weatherSponsorText {
color-scheme: dark;
}
.weatherSponsorText span {
color: var(--text-color-deemphasized);
}
@ -2090,35 +2126,17 @@ main section {
.weatherInfoLink:focus-visible, .weatherButtonContextMenuWrapper:focus-visible {
outline: var(--focus-outline);
}
@media (prefers-color-scheme: dark) {
.hasWallpaperDark .weatherInfoLink, .hasWallpaperDark .weatherButtonContextMenuWrapper {
background-color: rgba(35, 34, 43, 0.7);
}
.hasWallpaperDark .weatherInfoLink:hover, .hasWallpaperDark .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
.hasWallpaperDark .weatherInfoLink:hover:active, .hasWallpaperDark .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
.lightWallpaper .weatherInfoLink, .darkWallpaper .weatherInfoLink, .lightWallpaper .weatherButtonContextMenuWrapper, .darkWallpaper .weatherButtonContextMenuWrapper {
background-color: var(--newtab-weather-background-color);
}
@media (prefers-contrast) and (prefers-color-scheme: dark) {
.hasWallpaperDark .weatherInfoLink, .hasWallpaperDark .weatherButtonContextMenuWrapper {
background-color: var(--background-color-box);
}
.lightWallpaper .weatherInfoLink:hover, .darkWallpaper .weatherInfoLink:hover, .lightWallpaper .weatherButtonContextMenuWrapper:hover, .darkWallpaper .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
@media (prefers-color-scheme: light) {
.hasWallpaperLight .weatherInfoLink, .hasWallpaperLight .weatherButtonContextMenuWrapper {
background-color: rgba(255, 255, 255, 0.7);
}
.hasWallpaperLight .weatherInfoLink:hover, .hasWallpaperLight .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
.hasWallpaperLight .weatherInfoLink:hover:active, .hasWallpaperLight .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
.lightWallpaper .weatherInfoLink:hover:active, .darkWallpaper .weatherInfoLink:hover:active, .lightWallpaper .weatherButtonContextMenuWrapper:hover:active, .darkWallpaper .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
@media (prefers-contrast) and (prefers-color-scheme: light) {
.hasWallpaperLight .weatherInfoLink, .hasWallpaperLight .weatherButtonContextMenuWrapper {
@media (prefers-contrast) {
.lightWallpaper .weatherInfoLink, .darkWallpaper .weatherInfoLink, .lightWallpaper .weatherButtonContextMenuWrapper, .darkWallpaper .weatherButtonContextMenuWrapper {
background-color: var(--background-color-box);
}
}
@ -2169,11 +2187,6 @@ main section {
position: absolute;
z-index: 0;
}
@media (prefers-color-scheme: dark) {
.weatherButtonContextMenuWrapper::after {
background-color: var(--color-gray-70);
}
}
.weatherButtonContextMenuWrapper:hover::after {
background-color: transparent;
}
@ -3137,11 +3150,19 @@ main section {
.ds-header,
.ds-layout .section-title span {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 17px;
font-weight: 600;
line-height: 20px;
}
.lightWallpaper .ds-header,
.lightWallpaper .ds-layout .section-title span {
color-scheme: light;
}
.darkWallpaper .ds-header,
.darkWallpaper .ds-layout .section-title span {
color-scheme: dark;
}
.ds-header .icon,
.ds-layout .section-title span .icon {
fill: var(--newtab-text-secondary-color);
@ -3154,6 +3175,12 @@ main section {
color: var(--newtab-primary-action-background);
font-weight: 500;
}
.lightWallpaper .collapsible-section.ds-layout .section-top-bar .learn-more-link a {
color-scheme: light;
}
.darkWallpaper .collapsible-section.ds-layout .section-top-bar .learn-more-link a {
color-scheme: dark;
}
.collapsible-section.ds-layout .section-top-bar .learn-more-link a:is(:focus, :hover) {
text-decoration: none;
}
@ -3723,7 +3750,7 @@ main section {
/* stylelint-disable max-nesting-depth */
.ds-navigation {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 11.5px;
font-weight: 500;
line-height: 22px;
@ -3741,6 +3768,12 @@ main section {
.ds-navigation.ds-navigation-right-aligned {
text-align: end;
}
.lightWallpaper .ds-navigation {
color-scheme: light;
}
.darkWallpaper .ds-navigation {
color-scheme: dark;
}
.ds-navigation ul {
display: inline;
margin: 0;
@ -4928,6 +4961,12 @@ main section {
color: var(--icon-color);
vertical-align: text-bottom;
}
.lightWallpaper .sponsored-content-highlight .icon-help {
color-scheme: light;
}
.darkWallpaper .sponsored-content-highlight .icon-help {
color-scheme: dark;
}
.sponsored-content-highlight .feature-highlight-modal.inset-inline-start::after {
margin-inline-end: 11px;
}

View File

@ -34,12 +34,16 @@ input {
}
:root {
color-scheme: light;
--newtab-background-color: #F9F9FB;
--newtab-background-color-secondary: #FFF;
--newtab-text-primary-color: #15141a;
--newtab-primary-action-background: #0061e0;
--newtab-contextual-text-primary-color: light-dark(var(--newtab-text-primary-color), #fbfbfe);
--newtab-primary-action-background: light-dark(#0061e0, #00ddff);
--newtab-primary-action-background-pocket: #008078;
--newtab-text-secondary-color: color-mix(in srgb, var(--newtab-text-primary-color) 70%, transparent);
--newtab-contextual-text-secondary-color: color-mix(in srgb, var(--newtab-contextual-text-primary-color) 70%, transparent);
--newtab-weather-background-color: light-dark(rgba(255, 255, 255, 70%), rgba(35, 34, 43, 70%));
--newtab-element-hover-color: color-mix(in srgb, var(--newtab-background-color) 90%, #000);
--newtab-element-active-color: color-mix(in srgb, var(--newtab-background-color) 80%, #000);
--newtab-button-background: var(--button-background-color);
@ -48,10 +52,10 @@ input {
--newtab-button-hover-background: var(--button-background-color-hover);
--newtab-button-active-background: var(--button-background-color-active);
--newtab-button-text: var(--button-text-color);
--newtab-button-static-background: #F0F0F4;
--newtab-button-static-background: light-dark(#F0F0F4, #2B2A33);
--newtab-button-static-focus-background: var(--newtab-button-static-background);
--newtab-button-static-hover-background: #E0E0E6;
--newtab-button-static-active-background: #CFCFD8;
--newtab-button-static-hover-background: light-dark(#E0E0E6, #52525E);
--newtab-button-static-active-background: light-dark(#CFCFD8, #5B5B66);
--newtab-element-secondary-color: color-mix(in srgb, currentColor 5%, transparent);
--newtab-element-secondary-hover-color: color-mix(in srgb, currentColor 12%, transparent);
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 25%, transparent);
@ -62,7 +66,7 @@ input {
--newtab-primary-action-background-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background-pocket) 25%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #000);
--newtab-wordmark-color: #20123A;
--newtab-wordmark-color: light-dark(#20123A, #fbfbfe);
--newtab-status-success: #058B00;
--newtab-status-error: #D70022;
--newtab-inner-box-shadow-color: rgba(0, 0, 0, 0.1);
@ -72,10 +76,10 @@ input {
--newtab-button-secondary-color: inherit;
}
:root[lwt-newtab-brighttext] {
color-scheme: dark;
--newtab-background-color: #2B2A33;
--newtab-background-color-secondary: #42414d;
--newtab-text-primary-color: #fbfbfe;
--newtab-primary-action-background: #00ddff;
--newtab-contextual-text-primary-color: light-dark(#15141a, var(--newtab-text-primary-color));
--newtab-primary-action-background-pocket: #00ddff;
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-element-hover-color: color-mix(in srgb, var(--newtab-primary-action-background) 55%, #FFF);
@ -87,11 +91,7 @@ input {
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 30%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #FFF);
--newtab-primary-element-text-color: #2b2a33;
--newtab-wordmark-color: #fbfbfe;
--newtab-status-success: #7C6;
--newtab-button-static-background: #2B2A33;
--newtab-button-static-hover-background: #52525E;
--newtab-button-static-active-background: #5B5B66;
}
@media (prefers-contrast) {
@ -527,6 +527,13 @@ main section {
.wallpaper-attribution {
padding: 0 25px;
font-size: 14px;
color: var(--newtab-contextual-text-primary-color);
}
.lightWallpaper .wallpaper-attribution {
color-scheme: light;
}
.darkWallpaper .wallpaper-attribution {
color-scheme: dark;
}
.wallpaper-attribution.theme-light {
display: inline-block;
@ -541,7 +548,7 @@ main section {
display: inline-block;
}
.wallpaper-attribution a {
color: var(--newtab-element-color);
color: inherit;
}
.wallpaper-attribution a:hover {
text-decoration: none;
@ -678,6 +685,12 @@ main section {
.top-site-outer:is(:hover) .context-menu-button {
opacity: 1;
}
.lightWallpaper .top-site-outer:not(:hover, :active, .active) {
color-scheme: light;
}
.darkWallpaper .top-site-outer:not(:hover, :active, .active) {
color-scheme: dark;
}
.top-site-outer.active .context-menu-button {
opacity: 1;
background-color: var(--newtab-button-active-background);
@ -698,6 +711,12 @@ main section {
top: -20px;
transition: opacity 200ms;
}
.lightWallpaper .top-site-outer .context-menu-button {
color-scheme: light;
}
.darkWallpaper .top-site-outer .context-menu-button {
color-scheme: dark;
}
.top-site-outer .context-menu-button:hover {
background-color: var(--newtab-button-hover-background);
}
@ -720,7 +739,7 @@ main section {
cursor: pointer;
position: relative;
align-items: center;
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
display: flex;
font-size: 32px;
font-weight: 200;
@ -809,7 +828,7 @@ main section {
-moz-context-properties: fill;
}
.top-site-outer .title {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
padding-top: 8px;
font: caption;
text-align: center;
@ -826,7 +845,7 @@ main section {
white-space: nowrap;
}
.top-site-outer .title .sponsored-label {
color: var(--newtab-text-secondary-color);
color: var(--newtab-contextual-text-secondary-color);
font-size: 0.9em;
}
.top-site-outer .title:not(.sponsored) .sponsored-label {
@ -1269,6 +1288,12 @@ main section {
margin-inline-start: 16px;
width: 134px;
}
.lightWallpaper .search-wrapper .logo-and-wordmark .wordmark {
color-scheme: light;
}
.darkWallpaper .search-wrapper .logo-and-wordmark .wordmark {
color-scheme: dark;
}
@media (max-width: 609px) {
.search-wrapper .logo-and-wordmark .logo {
background-size: 64px;
@ -1680,6 +1705,12 @@ main section {
background-color: transparent;
padding: 15px;
}
.lightWallpaper .personalize-button:not(:hover, :active) {
color-scheme: light;
}
.darkWallpaper .personalize-button:not(:hover, :active) {
color-scheme: dark;
}
.personalize-button:hover {
background-color: var(--newtab-element-hover-color);
}
@ -1918,20 +1949,16 @@ main section {
padding: 0;
border: none;
}
.wallpaper-list .wallpaper-input.theme-light,
.wallpaper-list .sr-only.theme-light {
.wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-light, .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-light {
display: inline-block;
}
[lwt-newtab-brighttext] .wallpaper-list .wallpaper-input.theme-light,
[lwt-newtab-brighttext] .wallpaper-list .sr-only.theme-light {
[lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-light, [lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-light {
display: none;
}
.wallpaper-list .wallpaper-input.theme-dark,
.wallpaper-list .sr-only.theme-dark {
.wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-dark, .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-dark {
display: none;
}
[lwt-newtab-brighttext] .wallpaper-list .wallpaper-input.theme-dark,
[lwt-newtab-brighttext] .wallpaper-list .sr-only.theme-dark {
[lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .wallpaper-input.theme-dark, [lwt-newtab-brighttext] .wallpaper-list:not(.ignore-color-mode) .sr-only.theme-dark {
display: inline-block;
}
.wallpaper-list .wallpaper-input {
@ -2064,6 +2091,15 @@ main section {
.weatherSponsorText {
visibility: hidden;
font-size: var(--newtab-weather-sponsor-font-size);
color: var(--newtab-contextual-text-primary-color);
}
.lightWallpaper .weatherSponsorText {
color-scheme: light;
}
.darkWallpaper .weatherSponsorText {
color-scheme: dark;
}
.weatherSponsorText span {
color: var(--text-color-deemphasized);
}
@ -2086,35 +2122,17 @@ main section {
.weatherInfoLink:focus-visible, .weatherButtonContextMenuWrapper:focus-visible {
outline: var(--focus-outline);
}
@media (prefers-color-scheme: dark) {
.hasWallpaperDark .weatherInfoLink, .hasWallpaperDark .weatherButtonContextMenuWrapper {
background-color: rgba(35, 34, 43, 0.7);
}
.hasWallpaperDark .weatherInfoLink:hover, .hasWallpaperDark .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
.hasWallpaperDark .weatherInfoLink:hover:active, .hasWallpaperDark .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
.lightWallpaper .weatherInfoLink, .darkWallpaper .weatherInfoLink, .lightWallpaper .weatherButtonContextMenuWrapper, .darkWallpaper .weatherButtonContextMenuWrapper {
background-color: var(--newtab-weather-background-color);
}
@media (prefers-contrast) and (prefers-color-scheme: dark) {
.hasWallpaperDark .weatherInfoLink, .hasWallpaperDark .weatherButtonContextMenuWrapper {
background-color: var(--background-color-box);
}
.lightWallpaper .weatherInfoLink:hover, .darkWallpaper .weatherInfoLink:hover, .lightWallpaper .weatherButtonContextMenuWrapper:hover, .darkWallpaper .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
@media (prefers-color-scheme: light) {
.hasWallpaperLight .weatherInfoLink, .hasWallpaperLight .weatherButtonContextMenuWrapper {
background-color: rgba(255, 255, 255, 0.7);
}
.hasWallpaperLight .weatherInfoLink:hover, .hasWallpaperLight .weatherButtonContextMenuWrapper:hover {
background-color: var(--newtab-button-static-hover-background);
}
.hasWallpaperLight .weatherInfoLink:hover:active, .hasWallpaperLight .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
.lightWallpaper .weatherInfoLink:hover:active, .darkWallpaper .weatherInfoLink:hover:active, .lightWallpaper .weatherButtonContextMenuWrapper:hover:active, .darkWallpaper .weatherButtonContextMenuWrapper:hover:active {
background-color: var(--newtab-button-static-active-background);
}
@media (prefers-contrast) and (prefers-color-scheme: light) {
.hasWallpaperLight .weatherInfoLink, .hasWallpaperLight .weatherButtonContextMenuWrapper {
@media (prefers-contrast) {
.lightWallpaper .weatherInfoLink, .darkWallpaper .weatherInfoLink, .lightWallpaper .weatherButtonContextMenuWrapper, .darkWallpaper .weatherButtonContextMenuWrapper {
background-color: var(--background-color-box);
}
}
@ -2165,11 +2183,6 @@ main section {
position: absolute;
z-index: 0;
}
@media (prefers-color-scheme: dark) {
.weatherButtonContextMenuWrapper::after {
background-color: var(--color-gray-70);
}
}
.weatherButtonContextMenuWrapper:hover::after {
background-color: transparent;
}
@ -3133,11 +3146,19 @@ main section {
.ds-header,
.ds-layout .section-title span {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 17px;
font-weight: 600;
line-height: 20px;
}
.lightWallpaper .ds-header,
.lightWallpaper .ds-layout .section-title span {
color-scheme: light;
}
.darkWallpaper .ds-header,
.darkWallpaper .ds-layout .section-title span {
color-scheme: dark;
}
.ds-header .icon,
.ds-layout .section-title span .icon {
fill: var(--newtab-text-secondary-color);
@ -3150,6 +3171,12 @@ main section {
color: var(--newtab-primary-action-background);
font-weight: 500;
}
.lightWallpaper .collapsible-section.ds-layout .section-top-bar .learn-more-link a {
color-scheme: light;
}
.darkWallpaper .collapsible-section.ds-layout .section-top-bar .learn-more-link a {
color-scheme: dark;
}
.collapsible-section.ds-layout .section-top-bar .learn-more-link a:is(:focus, :hover) {
text-decoration: none;
}
@ -3719,7 +3746,7 @@ main section {
/* stylelint-disable max-nesting-depth */
.ds-navigation {
color: var(--newtab-text-primary-color);
color: var(--newtab-contextual-text-primary-color);
font-size: 11.5px;
font-weight: 500;
line-height: 22px;
@ -3737,6 +3764,12 @@ main section {
.ds-navigation.ds-navigation-right-aligned {
text-align: end;
}
.lightWallpaper .ds-navigation {
color-scheme: light;
}
.darkWallpaper .ds-navigation {
color-scheme: dark;
}
.ds-navigation ul {
display: inline;
margin: 0;
@ -4924,6 +4957,12 @@ main section {
color: var(--icon-color);
vertical-align: text-bottom;
}
.lightWallpaper .sponsored-content-highlight .icon-help {
color-scheme: light;
}
.darkWallpaper .sponsored-content-highlight .icon-help {
color-scheme: dark;
}
.sponsored-content-highlight .feature-highlight-modal.inset-inline-start::after {
margin-inline-end: 11px;
}

View File

@ -8993,22 +8993,34 @@ class _WallpapersSection extends (external_React_default()).PureComponent {
} = event.target;
const prefs = this.props.Prefs.values;
const colorMode = this.prefersDarkQuery?.matches ? "dark" : "light";
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, id);
if (prefs["newtabWallpapers.v2.enabled"]) {
// If we don't care about color mode, set both to the same wallpaper.
this.props.setPref(`newtabWallpapers.wallpaper-dark`, id);
this.props.setPref(`newtabWallpapers.wallpaper-light`, id);
} else {
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, id);
// bug 1892095
if (prefs["newtabWallpapers.wallpaper-dark"] === "" && colorMode === "light") {
this.props.setPref("newtabWallpapers.wallpaper-dark", id.replace("light", "dark"));
}
if (prefs["newtabWallpapers.wallpaper-light"] === "" && colorMode === "dark") {
this.props.setPref(`newtabWallpapers.wallpaper-light`, id.replace("dark", "light"));
}
}
this.handleUserEvent({
selected_wallpaper: id,
hadPreviousWallpaper: !!this.props.activeWallpaper
});
// bug 1892095
if (prefs["newtabWallpapers.wallpaper-dark"] === "" && colorMode === "light") {
this.props.setPref("newtabWallpapers.wallpaper-dark", id.replace("light", "dark"));
}
if (prefs["newtabWallpapers.wallpaper-light"] === "" && colorMode === "dark") {
this.props.setPref(`newtabWallpapers.wallpaper-light`, id.replace("dark", "light"));
}
}
handleReset() {
const prefs = this.props.Prefs.values;
const colorMode = this.prefersDarkQuery?.matches ? "dark" : "light";
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, "");
if (prefs["newtabWallpapers.v2.enabled"]) {
this.props.setPref("newtabWallpapers.wallpaper-light", "");
this.props.setPref("newtabWallpapers.wallpaper-dark", "");
} else {
this.props.setPref(`newtabWallpapers.wallpaper-${colorMode}`, "");
}
this.handleUserEvent({
selected_wallpaper: "none",
hadPreviousWallpaper: !!this.props.activeWallpaper
@ -9029,8 +9041,13 @@ class _WallpapersSection extends (external_React_default()).PureComponent {
const {
activeWallpaper
} = this.props;
const prefs = this.props.Prefs.values;
let fieldsetClassname = `wallpaper-list`;
if (prefs["newtabWallpapers.v2.enabled"]) {
fieldsetClassname += " ignore-color-mode";
}
return /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("fieldset", {
className: "wallpaper-list"
className: fieldsetClassname
}, wallpaperList.map(({
title,
theme,
@ -9836,10 +9853,11 @@ class _Weather extends (external_React_default()).PureComponent {
link: "https://support.mozilla.org/kb/customize-items-on-firefox-new-tab-page",
shouldSendImpressionStats: shouldSendImpressionStats
}) : null))), /*#__PURE__*/external_React_default().createElement("span", {
"data-l10n-id": "newtab-weather-sponsored",
"data-l10n-args": "{\"provider\": \"AccuWeather\"}",
className: "weatherSponsorText"
}));
}, /*#__PURE__*/external_React_default().createElement("span", {
"data-l10n-id": "newtab-weather-sponsored",
"data-l10n-args": "{\"provider\": \"AccuWeather\"}"
})));
}
return /*#__PURE__*/external_React_default().createElement("div", {
ref: this.setErrorRef,
@ -10100,12 +10118,19 @@ class BaseContent extends (external_React_default()).PureComponent {
__webpack_require__.g.document?.body.style.setProperty(`--newtab-wallpaper-light`, `url(${lightWallpaper?.wallpaperUrl || ""})`);
__webpack_require__.g.document?.body.style.setProperty(`--newtab-wallpaper-dark`, `url(${darkWallpaper?.wallpaperUrl || ""})`);
// Grab the contrast of the currently displayed wallpaper.
const {
theme
} = this.state.colorMode === "light" ? lightWallpaper : darkWallpaper;
// Add helper class to body if user has a wallpaper selected
if (lightWallpaper) {
__webpack_require__.g.document?.body.classList.add("hasWallpaperLight");
if (theme === "light") {
__webpack_require__.g.document?.body.classList.add("lightWallpaper");
__webpack_require__.g.document?.body.classList.remove("darkWallpaper");
}
if (darkWallpaper) {
__webpack_require__.g.document?.body.classList.add("hasWallpaperDark");
if (theme === "dark") {
__webpack_require__.g.document?.body.classList.add("darkWallpaper");
__webpack_require__.g.document?.body.classList.remove("lightWallpaper");
}
}
}

View File

@ -292,7 +292,14 @@ export const PREFS_CONFIG = new Map([
"newtabWallpapers.enabled",
{
title: "Boolean flag to turn wallpaper functionality on and off",
value: true,
value: false,
},
],
[
"newtabWallpapers.v2.enabled",
{
title: "Boolean flag to turn wallpaper v2 functionality on and off",
value: false,
},
],
[