/* 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 https://mozilla.org/MPL/2.0/. */

@media -moz-pref("sidebar.verticalTabs") {
  :host {
    --button-size-icon: var(--tab-min-height);
    --button-min-height: var(--button-size-icon);
  }
}

[hidden] {
  display: none !important;
}

:host {
  width: 100%;
}

.wrapper {
  display: grid;
  grid-template-rows: auto min-content min-content;
  box-sizing: border-box;
  height: 100%;
  max-width: 100%;
  padding-inline: 0;

  @media -moz-pref("sidebar.verticalTabs") {
    display: flex;
    flex-direction: column;

    :host([expanded]) & {
      /* TODO: Should this be some other pixel value between 5/6? Need to be careful of Linux where font size is larger */
      --tab-pinned-horizontal-count: 5;
      /* TODO: These --space-* tokens should use semantic names shared with tabs.css */
      width: calc(var(--tab-pinned-horizontal-count) * var(--tab-pinned-min-width-expanded) + 2 * var(--tab-pinned-container-margin-inline-expanded) + 1px);
    }

    :host([customWidth]) & {
      width: 100%;
    }
  }
}

#sidebar-tools-and-extensions-splitter {
  display: block;
  border-top: var(--tabstrip-inner-border);
  margin-inline: var(--tab-inner-inline-margin);
  margin-block-end: var(--space-small);
  min-height: 2px;
  @media -moz-pref("browser.nova.enabled") {
    min-height: 4px;
  }

  @media -moz-pref("browser.nova.enabled") {
    min-height: 4px;
  }

  &:hover {
    background-color: var(--focus-outline-color);
    border-radius: var(--border-radius-medium);
  }

  @media not -moz-pref("sidebar.visibility", "expand-on-hover") {
    /* We need these rules to apply at all times when the sidebar.visibility
    pref is not set to "expand-on-hover" as opposed to when the "sidebar-expand-on-hover" attribute
    has not been added to root. There are certain scenarios when that attribute is temporarily
    removed from root such as when toggling the sidebar to expand with the toolbar button. */
    :host([expanded]) & {
      border-color: transparent;
    }
  }
}

.actions-list {
  display: flex;
  flex-direction: column;
  align-items: start;
  max-width: 100%;
  overflow: hidden;

  > moz-button {
    --button-icon-fill: var(--toolbarbutton-icon-fill);
    --button-attention-dot-color: light-dark(#53b93a, #73d25d);
  }

  > moz-button:not(.tools-overflow) {
    /* --sidebar-launcher-button-padding-inline is set in the parent doc
     * (browser/themes/shared/sidebar.css) so it can react to the document's
     * uidensity attribute; falls back to --space-medium for any context
     * that doesn't set it. The auto-compact width check uses a fixed
     * reference width matching the non-compact value, so the launcher must
     * visibly shrink in compact mode to keep the trigger stable. */
    --button-outer-padding-inline: var(--sidebar-launcher-button-padding-inline, var(--space-medium));
    --button-outer-padding-block: var(--space-xxsmall);

    &:first-of-type {
      --button-outer-padding-block-start: var(--space-small);
    }

    &:last-of-type {
      --button-outer-padding-block-end: var(--space-small);
    }
  }

  moz-button:not([type~="ghost"]):not(:hover) {
    &::part(button) {
      background-color: var(--toolbarbutton-background-color-active);
    }
  }

  &.overflow-button {
    flex-shrink: 0;
  }
}

:host([sidebar-positionend]) .more-tools-button::part(button) {
  transform: scaleX(-1);
}

.tools-and-extensions[orientation="horizontal"] {
  :host([expanded]) & {
    display: flex;
    flex-wrap: wrap-reverse;
    flex-direction: row;
    justify-content: flex-start;
    align-content: flex-start;
    gap: var(--space-xxsmall);
    padding-inline: var(--space-medium);
    padding-block-end: var(--space-small);

    @media -moz-pref("browser.nova.enabled") {
      gap: 12.5px;
    }

    @media -moz-pref("sidebar.visibility", "expand-on-hover") {
      /* We need these rules to apply at all times when the sidebar.visibility
      pref is set to "expand-on-hover" as opposed to when the "sidebar-expand-on-hover" attribute
      has not been added to root. There are certain scenarios when that attribute is temporarily
      removed from root such as when toggling the sidebar to expand with the toolbar button. */
      margin-block-start: var(--space-small);
    }

    .tools-overflow {
      width: unset;
    }

    &[overflowing="true"] {
      padding-inline-end: 0;
      flex-wrap: nowrap;
    }
  }
}

.buttons-wrapper {
  display: flex;
  flex-direction: column;
  flex-shrink: 0;
  justify-content: space-between;
  min-height: calc(var(--button-min-height) + (var(--space-small) * 2));
  overflow: hidden;

  :host([expanded]) & {
    flex-direction: row;
    align-items: flex-end;
  }

  @media -moz-pref("sidebar.visibility", "expand-on-hover") {
    /* We need these rules to apply at all times when the sidebar.visibility
    pref is set to "expand-on-hover" as opposed to when the "sidebar-expand-on-hover" attribute
    has not been added to root. There are certain scenarios when that attribute is temporarily
    removed from root such as when toggling the sidebar to expand with the toolbar button. */
    :host(:not([expanded])) & {
      grid-template-rows: 1fr;
      padding-block-end: var(--space-small);
    }
  }
}

.bottom-actions > moz-button:last-of-type {
  --button-outer-padding-block-end: var(--space-medium);
}

@media (prefers-reduced-motion: no-preference) {
  moz-button::part(moz-button-label) {
    opacity: 0;
    transition: opacity 300ms ease-in-out;
  }
}

.bottom-actions {
  align-self: end;
}
