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

@namespace html url("http://www.w3.org/1999/xhtml");

:root {
  --toolbar-start-end-padding: 8px;
  --toolbarbutton-outer-padding: 2px;
  --toolbarbutton-inner-padding: 8px;

  --toolbarbutton-hover-background: var(--button-hover-bgcolor);
  --toolbarbutton-active-background: var(--button-active-bgcolor);

  --toolbarseparator-color: color-mix(in srgb, currentColor 60%, transparent);

  --bookmark-block-padding: 4px;
}

:root[uidensity=compact] {
  --toolbarbutton-outer-padding: 3px;
  --toolbarbutton-inner-padding: 6px;
  --bookmark-block-padding: 1px;
}

:root[uidensity=touch] {
  --toolbarbutton-inner-padding: 9px;
  --bookmark-block-padding: 7px;
}

#TabsToolbar {
  /* Override the inner padding to ensure the dimensions match the tabs, but also making sure
     different types of buttons (combined-buttons-dropmarker or text) still look correct. */
  --toolbarbutton-inner-padding: calc((var(--tab-min-height) - 16px) / 2);
}

/* ::::: primary toolbar buttons ::::: */

:root:not([customizing]) .toolbarbutton-1[disabled=true] {
  opacity: var(--toolbarbutton-disabled-opacity);
}

.toolbarbutton-1 > .toolbarbutton-icon {
  margin-inline-end: 0 !important;
}

.toolbarbutton-1 > .toolbarbutton-icon,
.toolbarbutton-1 > .toolbarbutton-badge-stack > .toolbarbutton-icon {
  width: 16px;
}

.toolbarbutton-combined-buttons-dropmarker > .toolbarbutton-icon {
  width: 12px;
}

#navigator-toolbox:not(:hover) #tabbrowser-arrowscrollbox:not([highlight])::part(scrollbutton-down) {
  transition: 1s background-color ease-out;
}

#tabbrowser-arrowscrollbox[highlight]::part(scrollbutton-down) {
  background-color: SelectedItem;
}

toolbar .toolbarbutton-1 {
  appearance: none;
  margin: 0;
  padding: 0 var(--toolbarbutton-outer-padding);
  justify-content: center;
}

#TabsToolbar .toolbarbutton-1 {
  margin: 0 0 var(--tabs-navbar-shadow-size);
}

#tabbrowser-arrowscrollbox::part(scrollbutton-up),
#tabbrowser-arrowscrollbox::part(scrollbutton-down) {
  appearance: none;
  background-clip: padding-box;
  border: 4px solid transparent;
  border-radius: calc(var(--tab-border-radius) + 4px);
  margin: 0;
  padding: 0 calc(var(--toolbarbutton-inner-padding) - 6px);
}

/*** Adds padding to end of toolbar while making that space click the first button ***/
#PanelUI-menu-button {
  padding-inline-end: var(--toolbar-start-end-padding);
}

toolbar .toolbarbutton-1 > .toolbarbutton-icon,
toolbar .toolbarbutton-1 > .toolbarbutton-text,
toolbar .toolbarbutton-1 > .toolbarbutton-badge-stack {
  padding: var(--toolbarbutton-inner-padding);
  border-radius: var(--toolbarbutton-border-radius);
}

#TabsToolbar .toolbarbutton-1 > .toolbarbutton-icon,
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-text,
#TabsToolbar .toolbarbutton-1 > .toolbarbutton-badge-stack {
  border-radius: var(--tab-border-radius);
}

toolbar .toolbarbutton-1 > .toolbarbutton-icon {
  /* horizontal padding + actual icon width */
  width: calc(2 * var(--toolbarbutton-inner-padding) + 16px);
  height: calc(2 * var(--toolbarbutton-inner-padding) + 16px);
}

toolbar .toolbarbutton-combined-buttons-dropmarker > .toolbarbutton-icon {
  /* same height as regular buttons, but narrower, and for a 12x12 image */
  padding-inline: 2px;
  padding-block: calc(var(--toolbarbutton-inner-padding) + (16px - 12px) / 2);
  width: calc(2 * 2px + 12px);
}

toolbar .toolbarbutton-1 > .toolbarbutton-text {
  padding-top: calc(var(--toolbarbutton-inner-padding) - 1px);
  padding-bottom: 0;
  /* To make the hover feedback line up with sibling buttons, it needs the same
   * height as the button icons and the same vertical padding, but as a minimum,
   * because otherwise an increase in text sizes would break things.
   */
  min-height: calc(16px + 2 * var(--toolbarbutton-inner-padding));
}

@media (-moz-platform: macos) {
  toolbar .toolbarbutton-1 > .toolbarbutton-text {
    padding-top: calc(var(--toolbarbutton-inner-padding) + 1px);
  }
}

toolbar .toolbaritem-combined-buttons {
  margin-inline: 2px;
}

toolbar .toolbaritem-combined-buttons > .toolbarbutton-1 {
  padding-inline: 0;
}

toolbar .toolbaritem-combined-buttons:not(:hover) > separator {
  content: "";
  display: flex;
  width: 1px;
  height: 16px;
  margin-inline-end: -1px;
  background-image: linear-gradient(currentColor 0, currentColor 100%);
  background-position: center;
  background-repeat: no-repeat;
  background-size: 1px 16px;
  opacity: .2;
}

toolbar[brighttext] .toolbaritem-combined-buttons > separator {
  opacity: .3;
}

#tabbrowser-arrowscrollbox:not([scrolledtostart=true])::part(scrollbutton-up):hover,
#tabbrowser-arrowscrollbox:not([scrolledtoend=true])::part(scrollbutton-down):hover,
toolbarbutton.bookmark-item:not(.subviewbutton, [disabled=true], [open]):hover,
toolbar .toolbarbutton-1:not([disabled=true], [checked], [open], :active):hover > .toolbarbutton-icon,
toolbar .toolbarbutton-1:not([disabled=true], [checked], [open], :active):hover > .toolbarbutton-text,
toolbar .toolbarbutton-1:not([disabled=true], [checked], [open], :active):hover > .toolbarbutton-badge-stack {
  background-color: var(--toolbarbutton-hover-background);
  color: inherit;
}

#tabbrowser-arrowscrollbox:not([scrolledtostart=true])::part(scrollbutton-up):hover:active,
#tabbrowser-arrowscrollbox:not([scrolledtoend=true])::part(scrollbutton-down):hover:active,
toolbarbutton.bookmark-item:hover:active:not(.subviewbutton, [disabled="true"]),
toolbarbutton.bookmark-item[open="true"],
toolbar .toolbarbutton-1:not([disabled=true]):is([open],[checked],:hover:active) > .toolbarbutton-icon,
toolbar .toolbarbutton-1:not([disabled=true]):is([open],[checked],:hover:active) > .toolbarbutton-text,
toolbar .toolbarbutton-1:not([disabled=true]):is([open],[checked],:hover:active) > .toolbarbutton-badge-stack {
  background-color: var(--toolbarbutton-active-background);
  color: inherit;
}

/* Keyboard focus styling */
.titlebar-button:focus-visible,
findbar toolbarbutton.tabbable:focus-visible,
toolbarbutton.bookmark-item:not(.subviewbutton):focus-visible,
toolbar .toolbarbutton-1:focus-visible > .toolbarbutton-icon,
toolbar .toolbarbutton-1:focus-visible > .toolbarbutton-text,
toolbar .toolbarbutton-1:focus-visible > .toolbarbutton-badge-stack {
  outline: var(--focus-outline);
  outline-offset: var(--focus-outline-inset);
}

toolbar .toolbarbutton-1:focus-visible {
  outline: none;
}

/* bookmarks menu button */

/* ::::: bookmark buttons ::::: */

#personal-toolbar-empty-description,
toolbarbutton.bookmark-item:not(.subviewbutton) {
  margin: 2px;
  padding: var(--bookmark-block-padding) 4px;
}

#PersonalToolbar .toolbarbutton-1 {
  /* These should match the sizing of the bookmark-items in the inline axis
   * (padding and margin, respectively) */
  --toolbarbutton-inner-padding: 4px;
  --toolbarbutton-outer-padding: 2px;
  margin-block: 2px;
}

:root[uidensity=compact] toolbarbutton.bookmark-item:not(.subviewbutton) {
  margin-inline: 1px;
}

:root[uidensity=compact] #PersonalToolbar .toolbarbutton-1 {
  --toolbarbutton-outer-padding: 1px;
}

/* Allow icons to grow with the toolbar to match bookmark item heights
 *
 * NOTE(emilio): This matches pre-existing behavior but it's inconsistent with
 * how e.g. combined items work, and maybe we should just remove this.
 */
#PersonalToolbar .toolbarbutton-1 {
  align-items: stretch;
}
#PersonalToolbar .toolbarbutton-1 > .toolbarbutton-icon {
  height: auto;
}
#PersonalToolbar .toolbarbutton-1 > .toolbarbutton-badge-stack {
  align-items: center;
}

toolbarbutton.bookmark-item:not(.subviewbutton) {
  border-radius: var(--toolbarbutton-border-radius);
}

toolbarbutton.bookmark-item:not(.subviewbutton) {
  max-width: 13em;
  appearance: none;
}

/**
 * Ensure that the description is always at least as big as a bookmarks item,
 * where its icon is 16px (which may be more than inline text height);
 */
#personal-toolbar-empty-description {
  min-height: calc(16px + 2 * var(--bookmark-block-padding));
}

#bookmarks-toolbar-placeholder {
  max-width: unset;
}

.bookmark-item > .toolbarbutton-icon {
  width: 16px;
  height: 16px;
}

/* Force the display of the label for bookmarks */
.bookmark-item > .toolbarbutton-text {
  display: flex !important;
}

#personal-bookmarks,
#PlacesToolbar,
#PlacesToolbarItems {
  min-width: 0;
}

#PlacesToolbarItems > .bookmark-item > .toolbarbutton-icon {
  margin-inline-end: 0;
}

#managed-bookmarks > .toolbarbutton-icon,
#bookmarks-toolbar-placeholder > .toolbarbutton-icon,
#PlacesToolbarItems > .bookmark-item > .toolbarbutton-icon[label]:not([label=""]),
#PersonalToolbar #import-button > .toolbarbutton-icon,
#OtherBookmarks.bookmark-item[container] > .toolbarbutton-icon {
  margin-inline-end: 4px;
}

/* Separators */

/* Override the toolkit styles, and make sure separators are draggable by
 * making them wider, and using a pseudo-element for the visual separator. */
#PlacesToolbarItems > toolbarseparator {
  margin: 0;
  padding-inline: 4px;
  appearance: none;
}

/* When adjacent to the bookmarks items, give the bookmarks items a leading separator. */
#PlacesToolbarItems > toolbarseparator::before {
  content: "";
  display: block;
  border-inline-start: 1px solid;
  border-image-source: linear-gradient(
    transparent 3.75px,
    var(--toolbarseparator-color) 3.75px,
    var(--toolbarseparator-color) calc(100% - 3.75px),
    transparent calc(100% - 3.75px) );
  border-image-slice: 1;
}

@media (min-resolution: 2dppx) {
  #PlacesToolbarItems > toolbarseparator::before {
    border-inline-start-width: 0.5px;
  }
}

/* The bookmarks toolbar is smaller than the other toolbars, so we
 * need to override the badge position to not be cut off. */
#PersonalToolbar .toolbarbutton-badge {
  margin-top: -1px !important;
}

:root[uidensity=touch] #PersonalToolbar .toolbarbutton-badge {
  margin-top: -4px !important;
}

/* Remove a pixel of margin on the end so that the badge doesn't
 * overflow the toolbar and push the button into the overflow menu. */
:root[uidensity=compact] .toolbarbutton-badge {
  margin-inline-end: -7px !important;
}

/* Alternative style for .toolbarbutton-badge used by CFR notifications */
.toolbarbutton-badge.feature-callout {
  width: 14px;
  height: 14px;
  min-width: auto;
  box-shadow: none;
  border: none;
  padding: 0;
  display: block;
  margin: -7px 0 0 !important;
  margin-inline-end: -6px !important;
  background: url(chrome://global/skin/icons/badge-blue.svg);
}
