Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
e50b275
Add hidden dark/light switch
arai-a Jan 9, 2026
4e831d7
Apply dark mode to common elements
arai-a Dec 27, 2025
7362a0b
Apply dark mode to photon components
arai-a Jan 9, 2026
205583f
Apply dark mode to Home components
arai-a Jan 9, 2026
6ee904d
Apply dark mode to TreeView component
arai-a Jan 9, 2026
d977cbd
Apply dark mode to FilterNavigationBar component
arai-a Jan 9, 2026
8f6daa8
Apply dark mode to profileViewerTopBar
arai-a Jan 9, 2026
1668cf9
Apply dark mode to Timeline components
arai-a Jan 9, 2026
8791990
Apply dark mode to TabBar component
arai-a Jan 9, 2026
796762c
Apply dark mode to settings components
arai-a Jan 9, 2026
7e28c8f
Apply dark mode to sidebar components
arai-a Jan 9, 2026
c0cae98
Apply dark mode to timeline markers
arai-a Jan 9, 2026
9757cee
Apply dark mode to flame graph and stack chart
arai-a Jan 9, 2026
d1bdae7
Apply dark mode to Tooltip components
arai-a Jan 9, 2026
a1775bc
Apply dark mode to marker chart
arai-a Dec 27, 2025
24fb9a0
Apply dark mode to network chart
arai-a Jan 9, 2026
4fc34c1
Apply dark mode to TrackContextMenu component
arai-a Jan 9, 2026
0533f31
Apply dark mode to TabSelectorMenu component
arai-a Dec 27, 2025
dfc19d7
Apply dark mode to MetaInfo component
arai-a Jan 9, 2026
fe783a3
Apply dark mode to CodeView components
arai-a Jan 9, 2026
eabe31d
Apply dark mode to colored border
arai-a Jan 9, 2026
f0cb975
Apply dark mode to CompareHome component
arai-a Dec 27, 2025
fb930b1
Apply dark mode to UploadedRecordingsHome component
arai-a Jan 9, 2026
05f88a8
Apply dark mode to context menu components
arai-a Jan 9, 2026
2bf111b
Apply dark mode to PanelSearch components
arai-a Jan 9, 2026
bddf3bc
Apply dark mode to DragAndDrop component
arai-a Jan 9, 2026
bd33a02
Apply dark mode to ErrorBoundary component
arai-a Jan 9, 2026
9e0d695
Apply dark mode to KeyboardShortcut component
arai-a Jan 9, 2026
3af973d
Apply dark mode to ProfileDeleteButton component
arai-a Jan 9, 2026
5df6f47
Apply dark mode to ProfileRootMessage component
arai-a Dec 27, 2025
c3ac36d
Apply dark mode to SymbolicationStatusOverlay component
arai-a Jan 9, 2026
5bbc5f2
Apply dark mode to ZipFileViewer component
arai-a Jan 9, 2026
2d263b9
Apply dark mode to JsTracer components
arai-a Jan 9, 2026
f2a6fd7
Apply dark mode to code error overlays
arai-a Jan 9, 2026
1d731b5
Update snapshots
arai-a Dec 27, 2025
5cdd2c0
Add Dark mode checkbox
arai-a Jan 9, 2026
4061219
Fix HCM coloring on dark mode
arai-a Jan 9, 2026
72a2efd
Move more code to the dark-mode.ts and add tests
arai-a Jan 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions locales/en-US/app.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,8 @@ Home--additional-content-content = You can <strong>drag and drop</strong> a prof
Home--compare-recordings-info = You can also compare recordings. <a>Open the comparing interface.</a>
Home--your-recent-uploaded-recordings-title = Your recent uploaded recordings

Home--dark-mode-title = Dark mode

# We replace the elements such as <perf> and <simpleperf> with links to the
# documentation to use these tools.
Home--load-files-from-other-tools2 =
Expand Down
12 changes: 12 additions & 0 deletions res/css/categories.css
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@
--category-color-darkgrey: var(--grey-50);
}

:root.dark-mode {
--category-color-purple: var(--purple-60);
--category-color-green: var(--green-80);
--category-color-orange: var(--orange-60);
--category-color-yellow: var(--yellow-70);
--category-color-magenta: var(--magenta-70);
--category-color-gray: var(--grey-50);
--category-color-grey: var(--grey-50);
--category-color-darkgray: var(--grey-60);
--category-color-darkgrey: var(--grey-60);
}

/**
* These classes should be used to create a small color swatch to describe a
* category. They should be used with the class `colored-square` that's defined
Expand Down
10 changes: 5 additions & 5 deletions res/css/focus.css
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ input[type='range']:focus-visible,
select:focus-visible,
button:focus-visible {
box-shadow:
0 0 0 1px var(--blue-50) inset,
0 0 0 1px var(--blue-50),
0 0 0 4px var(--blue-50-a30);
0 0 0 1px var(--focus-border-color) inset,
0 0 0 1px var(--focus-border-color),
0 0 0 4px var(--focus-shadow-color);
outline: 0;
}

a:focus-visible {
box-shadow:
0 0 0 2px var(--blue-50),
0 0 0 6px var(--blue-50-a30);
0 0 0 2px var(--focus-border-color),
0 0 0 6px var(--focus-shadow-color);
outline: 0;
}
96 changes: 94 additions & 2 deletions res/css/global.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,98 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

:root {
--base-foreground-color: #000;
--base-background-color: #fff;
--base-border-color: var(--grey-30);
--base-shadow-color: rgb(0 0 0 / 0.2);
--link-foreground-color: var(--blue-60);
--link-visited-foreground-color: var(--purple-70);
--link-active-foreground-color: var(--red-50);
--clickable-foreground-color: var(--grey-90);
--clickable-background-color: var(--grey-90-a10);
--clickable-border-color: var(--grey-90-a30);
--clickable-hover-background-color: var(--grey-90-a20);
--clickable-active-background-color: var(--grey-90-a30);
--clickable-ghost-hover-background-color: var(--grey-90-a10);
--clickable-ghost-active-background-color: var(--grey-90-a20);
--clickable-checked-background-color: var(--blue-60);
--clickable-checked-hover-background-color: var(--blue-70);
--clickable-checked-active-background-color: var(--blue-80);
--focus-border-color: var(--blue-50);
--focus-shadow-color: var(--blue-50-a30);
--kbd-foreground-color: var(--base-foreground-color);
--kbd-background-color: #f6f6f6;
--kbd-border-color: #ccc;
--kbd-shadow-color: #bbb;
--home-border-color: #ccc;
--home-shadow-color: #0b1f50;
--row-odd-background-color: #f5f5f5;
--panel-foreground-color: var(--ink-70);
--panel-background-color: var(--grey-10);
--panel-border-color: var(--grey-30);
--track-selected-background-color: #edf6ff;
--tooltip-number-foreground-color: var(--grey-60);
--colored-border-color: rgb(0 0 0 / 0.1);

background-color: var(--base-background-color);
color: var(--base-foreground-color);
}

:root.dark-mode {
--base-foreground-color: var(--grey-20);
--base-background-color: var(--ink-90);
--base-border-color: var(--grey-50);
--base-shadow-color: rgb(0 0 0 / 0.4);
--link-foreground-color: var(--blue-40);
--link-visited-foreground-color: var(--purple-40);
--link-active-foreground-color: var(--red-50);
--clickable-foreground-color: var(--grey-20);
--clickable-background-color: var(--grey-10-a10);
--clickable-border-color: var(--grey-10-a40);
--clickable-hover-background-color: var(--grey-10-a20);
--clickable-active-background-color: var(--grey-10-a40);
--clickable-ghost-hover-background-color: var(--grey-10-a10);
--clickable-ghost-active-background-color: var(--grey-10-a20);
--clickable-checked-background-color: var(--blue-50);
--clickable-checked-hover-background-color: var(--blue-60);
--clickable-checked-active-background-color: var(--blue-70);
--focus-border-color: var(--blue-40);
--focus-shadow-color: var(--blue-50-a30);
--kbd-background-color: var(--ink-70);
--kbd-border-color: var(--ink-60);
--kbd-shadow-color: var(--ink-50);
--home-border-color: var(--ink-70);
--home-shadow-color: var(--ink-90);
--row-odd-background-color: color-mix(
in hsl,
var(--ink-80) 50%,
var(--ink-90) 50%
);
--panel-foreground-color: var(--grey-20);
--panel-background-color: var(--ink-80);
--panel-border-color: var(--ink-60);
--selected-track-background-color: color-mix(
in hsl,
var(--ink-90) 80%,
var(--teal-50) 20%
);
--tooltip-number-foreground-color: var(--grey-40);
--colored-border-color: rgb(237 237 240 / 0.1);
}

a {
color: var(--link-foreground-color);
}

a:visited {
color: var(--link-visited-foreground-color);
}

a:active {
color: var(--link-active-foreground-color);
}

/**
* This class should be used to create a small colored square. It's used
* especially for categories and network mime types.
Expand All @@ -11,15 +103,15 @@
width: 9px;
height: 9px;
box-sizing: border-box;
border: 0.5px solid rgb(0 0 0 / 0.1);
border: 0.5px solid var(--colored-border-color);
margin-right: 3px;

/* Opt-out of forced colors so the color is applied */
forced-color-adjust: none;
}

.colored-border {
border: 2px solid rgb(0 0 0 / 0.1);
border: 2px solid var(--colored-border-color);
margin-right: 3px;

/* Opt-out of forced colors so the color is applied */
Expand Down
66 changes: 52 additions & 14 deletions res/css/photon/button.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@

/* See https://design.firefox.com/photon/components/buttons.html for the spec */
.photon-button {
--internal-primary-foreground-color: #fff;
--internal-primary-background-color: var(--blue-60);
--internal-primary-hover-background-color: var(--blue-70);
--internal-primary-active-background-color: var(--blue-80);
--internal-destructive-foreground-color: #fff;
--internal-destructive-background-color: var(--red-60);
--internal-destructive-hover-background-color: var(--red-70);
--internal-destructive-active-background-color: var(--red-80);

/* These flex and sizing properties aren't necessary when a real <button> is used,
* but they are when a <a> element is used as a button. */
display: inline-flex;
Expand All @@ -19,8 +28,8 @@
background: none;

/* photon styles */
background-color: var(--grey-90-a10);
color: var(--grey-90);
background-color: var(--clickable-background-color);
color: var(--clickable-foreground-color);
cursor: initial; /* reset the defaut link style when used as a button */
font: inherit;
text-decoration: none; /* reset the defaut link style when used as a button */
Expand All @@ -40,11 +49,40 @@
/* Note: we're using :not(:disabled) instead of :enabled so that this can apply
* to non-input elements too. */
.photon-button:hover:not(:disabled) {
background-color: var(--grey-90-a20);
background-color: var(--clickable-hover-background-color);
}

:root.dark-mode {
.photon-button {
--internal-primary-foreground-color: var(--grey-20);
--internal-primary-background-color: var(--blue-60);
--internal-primary-hover-background-color: color-mix(
in hsl,
var(--blue-60) 90%,
white 10%
);
--internal-primary-active-background-color: color-mix(
in hsl,
var(--blue-60) 50%,
var(--blue-70) 50%
);
--internal-destructive-foreground-color: #fff;
--internal-destructive-background-color: var(--red-60);
--internal-destructive-hover-background-color: color-mix(
in hsl,
var(--red-60) 90%,
white 10%
);
--internal-destructive-active-background-color: color-mix(
in hsl,
var(--red-60) 50%,
var(--red-70) 50%
);
}
}

.photon-button:hover:active:not(:disabled) {
background-color: var(--grey-90-a30);
background-color: var(--clickable-active-background-color);
}

.photon-button-primary,
Expand All @@ -57,30 +95,30 @@
}

.photon-button-primary {
background-color: var(--blue-60);
color: #fff;
background-color: var(--internal-primary-background-color);
color: var(--internal-primary-foreground-color);
}

.photon-button-primary:hover:not(:disabled) {
background-color: var(--blue-70);
background-color: var(--internal-primary-hover-background-color);
}

.photon-button-primary:hover:active:not(:disabled) {
background-color: var(--blue-80);
background-color: var(--internal-primary-active-background-color);
}

/* Use this class for destructive actions only. */
.photon-button-destructive {
background-color: var(--red-60);
color: #fff;
background-color: var(--internal-destructive-background-color);
color: var(--internal-destructive-foreground-color);
}

.photon-button-destructive:hover:not(:disabled) {
background-color: var(--red-70);
background-color: var(--internal-destructive-hover-background-color);
}

.photon-button-destructive:hover:active:not(:disabled) {
background-color: var(--red-80);
background-color: var(--internal-destructive-active-background-color);
}

.photon-button-ghost {
Expand All @@ -91,11 +129,11 @@

.photon-button-ghost:hover:not(:disabled),
.photon-button-ghost--checked {
background-color: var(--grey-90-a10);
background-color: var(--clickable-ghost-hover-background-color);
}

.photon-button-ghost:hover:active:not(:disabled) {
background-color: var(--grey-90-a20);
background-color: var(--clickable-ghost-active-background-color);
}

.photon-button-micro {
Expand Down
14 changes: 7 additions & 7 deletions res/css/photon/checkbox.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
.photon-checkbox {
position: relative;
padding: 0;
border: 1px solid var(--grey-90-a30);
border: 1px solid var(--clickable-border-color);
border-radius: 2px;
appearance: none;
background-color: var(--grey-90-a10);
background-color: var(--clickable-background-color);
}

/* Remove the border, as it compets with box-shadow styles applied with focus.css */
Expand All @@ -31,16 +31,16 @@
}

.photon-checkbox:hover:not([disabled]) {
background-color: var(--grey-90-a20);
background-color: var(--clickable-hover-background-color);
}

.photon-checkbox:checked:not([disabled]) {
border: none;
background-color: var(--blue-60);
background-color: var(--clickable-checked-background-color);
}

.photon-checkbox:hover:active:not([disabled]) {
background-color: var(--grey-90-a30);
background-color: var(--clickable-active-background-color);
}

.photon-checkbox-default:checked:not([disabled]) {
Expand All @@ -52,9 +52,9 @@
}

.photon-checkbox:checked:hover:not([disabled]) {
background-color: var(--blue-70);
background-color: var(--clickable-checked-hover-background-color);
}

.photon-checkbox:checked:hover:active:not([disabled]) {
background-color: var(--blue-80);
background-color: var(--clickable-checked-hover-background-color);
}
32 changes: 24 additions & 8 deletions res/css/photon/input.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,47 @@

/* See https://design.firefox.com/photon/components/input-fields.html for the spec */
.photon-input {
--internal-border-color: var(--grey-90-a20);
--internal-hover-border-color: var(--grey-90-a30);
--internal-invalid-border-color: var(--red-60);
--internal-invalid-shadow-color: var(--red-60-a30);

height: 32px;
padding: 0 8px;
border: 1px solid var(--grey-90-a20);
border: 1px solid var(--internal-border-color);
border-radius: 2px;
background-color: var(--base-background-color);
box-shadow: none; /* remove the default Firefox style */
color: var(--base-foreground-color);
}

.photon-input:hover {
border-color: var(--grey-90-a30);
border-color: var(--internal-hover-border-color);
}

/* The second selector is only here to have a specificity higher than the one in
* `.photon-input:invalid:not(:placeholder-shown)`. */
.photon-input:focus-visible,
.photon-input:focus-visible:invalid {
border: 1px solid var(--blue-50);
border: 1px solid var(--focus-border-color);
box-shadow:
0 0 0 1px var(--blue-50),
0 0 0 4px var(--blue-50-a30);
0 0 0 1px var(--focus-border-color),
0 0 0 4px var(--focus-shadow-color);
outline: 0;
}

.photon-input:invalid:not(:placeholder-shown) {
border: 1px solid var(--red-60);
border: 1px solid var(--internal-invalid-border-color);
box-shadow:
0 0 0 1px var(--red-60),
0 0 0 4px var(--red-60-a30);
0 0 0 1px var(--internal-invalid-border-color),
0 0 0 4px var(--internal-invalid-shadow-color);
}

:root.dark-mode {
.photon-input {
--internal-border-color: var(--grey-10-a20);
--internal-hover-border-color: var(--grey-10-a40);
--internal-invalid-border-color: var(--red-50);
--internal-invalid-shadow-color: var(--red-60-a30);
}
}
2 changes: 1 addition & 1 deletion res/css/photon/label.css
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
display: inline-flex;
align-items: center;
padding: 3px 0;
color: var(--grey-90);
color: var(--clickable-foreground-color);
}

/* Use this class with the photon-label for the canonical photon styling. */
Expand Down
Loading