summaryrefslogtreecommitdiffstats
path: root/browser/themes/shared/downloads/progressmeter.css
blob: 5f44720aa345eb8c3d80476826bbebbfbc7767dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* 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 http://mozilla.org/MPL/2.0/. */

/*** Common-styled progressmeter ***/

:root {
  --download-progress-fill-color: AccentColor;
  --download-progress-paused-color: GrayText;
  --download-progress-flare-color: rgba(255,255,255,0.75);
}

/* download progress bar is used in contexts which are not LightweightThemeConsumers and
   do not get the lwt- theme variables. So we duplicate the fallbacks here. */
:root:-moz-lwtheme {
  --download-progress-fill-color: var(--lwt-toolbarbutton-icon-fill-attention, rgb(0,97,224));
}

@media (prefers-color-scheme: dark) {
  :root:-moz-lwtheme {
    --download-progress-fill-color: var(--lwt-toolbarbutton-icon-fill-attention, rgb(0,221,255));
  }
  #contentAreaDownloadsView {
    --download-progress-fill-color: var(--in-content-item-selected);
  }
}

:root[lwt-popup-brighttext] panel,
toolbar[brighttext]:-moz-lwtheme {
  --download-progress-fill-color: var(--lwt-toolbarbutton-icon-fill-attention, rgb(0,221,255));
}

/*
 * Styling "html:progress" is limited by the fact that a number of properties
 * are intentionally locked at the UA stylesheet level. We have to use a border
 * instead of an outline because the latter would be drawn over the progress
 * bar and we cannot change its z-index. This means we have to use a negative
 * margin, except when the value is zero, and adjust the width calculation for
 * the indeterminate state.
 */

.downloadProgress {
  appearance: none;
  display: flex;
  margin-block: 5px 1px;
  /* This value is kinda odd, it's used to align with the edge of the badge,
   * if shown, which is inside the edge of the image (the image gets 16px
   * margin). */
  margin-inline-end: 18px;
  border: none;
  height: 4px;
  border-radius: 2px;
  background-color: color-mix(in srgb, currentColor 15%, transparent);
}

/* Ensure we have contrast in selected download items */
#downloadsListBox.allDownloadsListBox richlistitem[selected] .downloadProgress::-moz-progress-bar {
  --download-progress-fill-color: currentColor;
  --download-progress-flare-color: AccentColor;
}

.downloadProgress::-moz-progress-bar {
  appearance: none;
  background-color: var(--download-progress-fill-color);
  border-radius: 2px;
}

.downloadProgress[paused]::-moz-progress-bar {
  background-color: var(--download-progress-paused-color);
}

.downloadProgress:indeterminate::-moz-progress-bar {
  width: calc(100% + 2px);
  /* Make a white reflecting animation.
     Create a gradient with 2 identical patterns, and enlarge the size to 200%.
     This allows us to animate background-position with percentage. */
  background-color: var(--download-progress-fill-color);
  background-image: linear-gradient(90deg, transparent 0%,
                                           var(--download-progress-flare-color) 25%,
                                           transparent 50%,
                                           var(--download-progress-flare-color) 75%,
                                           transparent 100%);
  background-blend-mode: normal;
  background-size: 200% 100%;
  animation: downloadProgressSlideX 1.5s linear infinite;
}

@keyframes downloadProgressSlideX {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: -100% 0;
  }
}