/* 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/. */

%filter substitution

%define keyfocus #downloadsPanel[keyfocus]
%define notKeyfocus #downloadsPanel:not([keyfocus])
%define item richlistitem[type="download"]
%define itemFinished @item@[state="1"]
%define itemNotFinished @item@:not([state="1"])
%define itemFocused #downloadsListBox:focus > @item@[selected]

/*** Panel and outer controls ***/

#downloadsPanel > .panel-arrowcontainer > .panel-arrowcontent {
  overflow: hidden;
  padding: 0;
}

#downloadsListBox {
  background: transparent;
  color: inherit;
  -moz-appearance: none;
  margin: 0;
}

#emptyDownloads {
  padding: 16px 16px;
  margin: 0;
}

.downloadsPanelFooter {
  background-color: var(--arrowpanel-dimmed);
  border-top: 1px solid var(--panel-separator-color);
}

.downloadsPanelFooter toolbarseparator,
@item@ > toolbarseparator {
  margin: 0;
  border: 0;
  min-width: 0;
  border-left: 1px solid var(--panel-separator-color);
  -moz-appearance: none;
}

.downloadsPanelFooterButton {
  -moz-appearance: none;
  background-color: transparent;
  color: inherit;
  margin: 0;
  padding: 0;
  min-width: 0;
  min-height: 40px;
  border: none;
}

.downloadsPanelFooterButton:hover {
  outline: 1px solid var(--arrowpanel-dimmed);
  background-color: var(--arrowpanel-dimmed);
}

.downloadsPanelFooterButton:hover:active,
.downloadsPanelFooterButton[open="true"] {
  outline: 1px solid var(--arrowpanel-dimmed-further);
  background-color: var(--arrowpanel-dimmed-further);
  box-shadow: 0 1px 0 hsla(210,4%,10%,.05) inset;
}

.downloadsPanelFooterButton[default] {
  background-color: #0996f8;
  color: white;
}

.downloadsPanelFooterButton[default]:hover {
  background-color: #0675d3;
}

.downloadsPanelFooterButton[default]:hover:active {
  background-color: #0568ba;
}

.downloadsPanelFooterButton > .button-box {
  padding: 0;
}

#downloadsHistory {
  padding-inline-start: 14px;
  padding-inline-end: 14px;
}

@item@ > toolbarseparator {
  margin: 10px 0;
}

@item@:hover > toolbarseparator {
  margin: 0;
}

#downloadsSummary {
  -moz-user-focus: normal;
}

#downloadsSummary > .downloadTypeIcon {
  list-style-image: url("chrome://browser/skin/downloads/download-summary.svg");
}

#downloadsSummaryDescription {
  color: -moz-nativehyperlinktext;
}

/*** List items and similar elements in the summary ***/

#downloadsSummary,
richlistitem[type="download"] {
  height: var(--downloads-item-height);
}

richlistitem[type="download"] {
  border-bottom: 1px solid var(--panel-separator-color);
  background: transparent;
  color: inherit;
}

richlistitem[type="download"]:last-child {
  border-bottom: none;
}

.downloadTypeIcon {
  margin: 8px 13px;
  width: 32px;
  height: 32px;
}

.downloadBlockedBadge {
  margin: 0 5px;
  background: url("chrome://browser/skin/downloads/download-blocked.svg") top right / 16px no-repeat;
}

.downloadBlockedBadge:-moz-locale-dir(rtl) {
  background-position-x: left;
}

@item@[verdict="PotentiallyUnwanted"] .downloadBlockedBadge {
  background-image: url("chrome://browser/skin/warning.svg");
}

@item@[verdict="Uncommon"] .downloadBlockedBadge {
  background-image: url("chrome://browser/skin/info.svg");
}

/* We hold .downloadTarget, .downloadProgress and .downloadDetails inside of
   a vbox with class .downloadContainer. We set the font-size of the entire
   container to --downloads-item-font-size-factor because:

   1) This is the size that we want .downloadDetails to be
   2) The container's width is set by localizers by &downloadDetails.width;,
      which is a ch unit. Since this is the value that should control the
      panel width, we apply it to the outer container to constrain
      .downloadTarget and .downloadProgress.

   Finally, since we want .downloadTarget's font-size to be at 100% of the
   font-size of .downloadContainer's parent, we use calc to go from the
   smaller font-size back to the original font-size.
 */
.downloadContainer {
  font-size: calc(100% * var(--downloads-item-font-size-factor));
  margin-inline-end: 13px;
}

#downloadsSummaryDescription,
.downloadTarget {
  margin: 0;
  font-size: calc(100% / var(--downloads-item-font-size-factor));
}

#downloadsSummaryDetails,
.downloadDetails {
  opacity: var(--downloads-item-details-opacity);
  /* Use calc() to keep the height consistent with .downloadTarget, so that the
     progress bar can be vertically centered. */
  margin: 4px 0 calc(1em / var(--downloads-item-font-size-factor) - 1em);
}

/* The following rules control which message is shown under the name of the
   download, using a set of elements that share the class ".downloadDetails".
   At any given time, only one of these elements is displayed. We use a set of
   rules to hide the elements that shouldn't be displayed in each case. */

/* The full status message is only displayed in the Downloads View. */
.downloadDetailsFull {
  display: none;
}

/* When hovering the mouse pointer over the item, instead of the normal message
   we display a more detailed one. */
@item@:hover > .downloadMainArea > .downloadContainer > .downloadDetailsNormal,
@item@:not(:hover) > .downloadMainArea > .downloadContainer > .downloadDetailsHover {
  display: none;
}

/* When hovering the action button in particular, instead of the usual hover
   message we display the command associated with the button. */
@item@.downloadHoveringButton > .downloadMainArea > .downloadContainer > .downloadDetailsHover,
@item@:not(.downloadHoveringButton) > .downloadMainArea > .downloadContainer > .downloadButtonLabels {
  display: none;
}

/* When hovering the main area of a finished download whose target exists,
   instead of the usual hover message we display the "Open File" command. */
@itemFinished@[exists] > .downloadMainArea:hover > .downloadContainer > .downloadDetailsHover,
@itemNotFinished@ > .downloadMainArea > .downloadContainer > .downloadOpenFile,
@item@:not([exists]) > .downloadMainArea > .downloadContainer > .downloadOpenFile,
.downloadMainArea:not(:hover) > .downloadContainer > .downloadOpenFile {
  display: none;
}

/* When hovering items blocked by Application Reputation, instead of the other
   hover messages we display the "Show more information" label. */
@item@[verdict] > .downloadMainArea > .downloadContainer > .downloadDetailsHover,
@item@[verdict] > .downloadMainArea > .downloadContainer > .downloadButtonLabels,
@item@:not([verdict]) > .downloadMainArea > .downloadContainer > .downloadShowMoreInfo,
@item@:not(:hover) > .downloadMainArea > .downloadContainer > .downloadShowMoreInfo {
  display: none;
}

@item@[verdict] > toolbarseparator {
  visibility: hidden;
}

.downloadButton {
  -moz-appearance: none;
  min-width: 58px;
  margin: 0;
  border: none;
  background: transparent;
  padding: 0;
  color: inherit;
}

.downloadButton > .button-box > .button-icon {
  width: 16px;
  height: 16px;
  margin: 1px;
  -moz-context-properties: fill;
  fill: currentColor;
}

.downloadButton > .button-box > .button-text {
  margin: 0 !important;
  padding: 0;
}

@itemFinished@[exists] .downloadMainArea:hover,
@item@:not([verdict]) > .downloadButtonArea:hover,
@item@[verdict]:hover {
  background-color: var(--arrowpanel-dimmed);
}

@itemFinished@[exists] > .downloadMainArea:hover:active,
@item@:not([verdict]) > .downloadButtonArea:hover:active,
@item@[verdict]:hover:active {
  background-color: var(--arrowpanel-dimmed-further);
}

@item@[verdict="Malware"]:hover,
@item@[verdict="Malware"]:hover:active {
  background-color: #aa1b08;
  color: white;
}

/*** Button icons ***/

.downloadIconCancel > .button-box > .button-icon {
  list-style-image: url("chrome://browser/skin/panel-icon-cancel.svg");
}

.downloadIconShow > .button-box > .button-icon {
%ifdef XP_MACOSX
  list-style-image: url("chrome://browser/skin/panel-icon-magnifier.svg");
%else
  list-style-image: url("chrome://browser/skin/panel-icon-folder.svg");
%endif
}

.downloadIconRetry > .button-box > .button-icon {
  list-style-image: url("chrome://browser/skin/panel-icon-retry.svg");
}

.downloadShowBlockedInfo > .button-box > .button-icon {
  list-style-image: url("chrome://browser/skin/panel-icon-arrow-right.svg");
}

.downloadShowBlockedInfo > .button-box > .button-icon:-moz-locale-dir(rtl) {
  list-style-image: url("chrome://browser/skin/panel-icon-arrow-left.svg");
}

/*** Blocked subview ***/

#downloadsPanel-blockedSubview > .panel-view-body-unscrollable {
  background-image: url("chrome://browser/skin/warning.svg");
  background-size: 32px 32px;
  background-position: 16px 16px;
  background-repeat: no-repeat;
}

#downloadsPanel-blockedSubview:-moz-locale-dir(rtl) {
  background-position: calc(100% - 16px) 16px;
}

#downloadsPanel-blockedSubview[verdict=Malware] > .panel-view-body-unscrollable {
  background-image: url("chrome://browser/skin/downloads/download-blocked.svg");
}

#downloadsPanel-blockedSubview-title {
  margin-top: 16px;
  margin-bottom: 16px;
  font-size: calc(100% / var(--downloads-item-font-size-factor));
}

#downloadsPanel-blockedSubview-details1,
#downloadsPanel-blockedSubview-details2 {
  font-size: calc(100% * var(--downloads-item-font-size-factor));
  margin-bottom: 16px;
  opacity: var(--downloads-item-details-opacity);
}

#downloadsPanel-blockedSubview-title,
#downloadsPanel-blockedSubview-details1,
#downloadsPanel-blockedSubview-details2 {
  -moz-margin-start: 64px;
  -moz-margin-end: 16px;
}

/*** Progressmeter ***/
%include progressmeter.inc.css
