sunhat/themes/firefox/chrome/toolbar/tabbar.css

701 lines
22 KiB
CSS
Raw Normal View History

/* Edge-Frfox - tabbar.css
* https://github.com/bmFtZQ/edge-frfox */
/*
MARK: Variables
*/
:root {
/* Extra space at the top of the window. */
--uc-tab-top-margin: 8px !important;
/* Remove extra space at the top of the window when in fullscreen or when
* title bars are enabled. */
&[inFullscreen],
&:not([tabsintitlebar]) {
--uc-tab-top-margin: 0px !important;
}
/* Remove extra space at the top when the window is maximised or the menu bar
* is active, only on platforms other than macOS. */
@media not (-moz-platform: macos) {
&[sizemode="maximized"],
& #toolbar-menubar:not([inactive]) + #TabsToolbar,
&:has(#toolbar-menubar:not([inactive])) {
--uc-tab-top-margin: 0px !important;
}
}
& #TabsToolbar {
--tab-min-height: 32px !important;
--inline-tab-padding: 11px !important;
--uc-inline-pinned-tab-padding: 12px !important;
--tab-border-radius: 4px !important;
--toolbarbutton-inner-padding: 6px !important;
--uc-toolbarbutton-inner-inline-padding: 8px !important;
--toolbarbutton-border-radius: 4px !important;
--tabs-navbar-shadow-size: 0px !important;
--tab-shadow-max-size: 0 !important;
--uc-tab-separator-height: 20px;
--uc-toolbarbutton-block-margin: 2px;
/* Gap between tab and adjacent buttons (+2px button margin). */
--uc-toolbarbutton-tab-gap: 2px;
@media (-moz-bool-pref: "uc.tweak.rounded-corners") {
--tab-border-radius: 8px !important;
--uc-toolbarbutton-tab-gap: 6px;
}
}
}
/* Tab grow/shrink transition. */
.tabbrowser-tab:not([pinned]) {
transition-property: min-width, max-width !important;
transition-duration: 150ms !important;
transition-timing-function: cubic-bezier(0, .75, .25, 1) !important;
}
/* Tab moving transition. */
#tabbrowser-tabs[movingtab] > #tabbrowser-arrowscrollbox > .tabbrowser-tab[fadein]:not([selected]):not([multiselected]),
.tabbrowser-tab[tab-grouping],
.tabbrowser-tab[tabdrop-samewindow] {
transition: transform 200ms cubic-bezier(0, .75, .25, 1) !important;
}
/* Remove tab toolbar background transition on inactive windows. */
#navigator-toolbox {
transition: none !important;
}
/*
MARK: Toolbar & buttons
*/
/* #region */
#TabsToolbar {
/* Padding between the edge of the toolbar and its content. */
padding-inline-start: 8px !important;
/* Remove any existing margins from toolbar buttons. */
& .toolbarbutton-1 {
margin: 0 !important;
}
/* Tab toolbar button sizing. */
& .toolbarbutton-1 > .toolbarbutton-icon,
& .toolbarbutton-1 > .toolbarbutton-badge-stack {
border-radius: var(--toolbarbutton-border-radius) !important;
padding: var(--toolbarbutton-inner-padding) var(--uc-toolbarbutton-inner-inline-padding) !important;
/* Add margin-block to buttons so they are positioned correctly. */
margin: var(--uc-toolbarbutton-block-margin) 0 !important;
}
& .toolbarbutton-1 > .toolbarbutton-icon {
width: calc(2 * var(--uc-toolbarbutton-inner-inline-padding) + 16px) !important;
height: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important;
}
/* Keep certain buttons (such as new tab) square shaped. */
& #tabs-newtab-button > .toolbarbutton-icon,
& #alltabs-button > .toolbarbutton-badge-stack,
& #tabbrowser-tabs[hasadjacentnewtabbutton][overflow] ~ #new-tab-button > .toolbarbutton-icon {
padding: var(--toolbarbutton-inner-padding) !important;
width: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important;
}
/* Toolbar buttons should use the same colour as unselected tabs. */
& .toolbarbutton-animatable-box,
& .toolbarbutton-1 {
fill: currentColor !important;
}
& #TabsToolbar-customization-target {
/* Vertically align toolbar buttons to the bottom of the tab bar. */
align-items: end !important;
/* Reduce space between start of the window and first toolbar button. */
& > .toolbarbutton-1:nth-child(1 of .toolbarbutton-1:not(#tabbrowser-tabs ~ *)) {
margin-inline-start: -2px !important;
}
/* Add space after the last toolbar button before the tabs. */
& > .toolbarbutton-1:nth-last-child(1 of .toolbarbutton-1:not(#tabbrowser-tabs ~ *)),
:root[privatebrowsingmode] & > .toolbarbutton-1:nth-last-child(1 of .toolbarbutton-1:not(#tabbrowser-tabs ~ *):not(#firefox-view-button)) {
margin-inline-end: calc(var(--uc-toolbarbutton-tab-gap) + 2px) !important;
/* Reduces space between this button and the tab scroll button when
* overflowed for consistency. */
&:has(~ #tabbrowser-tabs[overflow]) {
margin-inline-end: 2px !important;
}
}
}
}
#tabbrowser-tabs {
/* Remove the border from the left of the tab bar. */
border-inline: none !important;
padding-inline-start: var(--tab-overflow-pinned-tabs-width) !important;
/* Add space above the tabs. */
margin-top: var(--uc-tab-top-margin) !important;
/* Pull tabs closer to toolbar buttons when overflowed. */
&[overflow]:not([haspinnedtabs]) {
margin-inline-start: -2px !important;
}
/* Remove gap between pinned and unpinned tabs. */
&[haspinnedtabs]:not([positionpinnedtabs]) .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
margin-inline-start: 0 !important;
}
}
/* Add space between last tab and new tab button. */
#tabbrowser-tabs #tabs-newtab-button {
margin-inline-start: var(--uc-toolbarbutton-tab-gap) !important;
}
/* Tab scrolling buttons. */
#scrollbutton-up:not(.menupopup-scrollbutton),
#scrollbutton-down:not(.menupopup-scrollbutton) {
border-width: 2px !important;
border-radius: calc(var(--toolbarbutton-border-radius) + 2px) !important;
padding-inline: calc(var(--toolbarbutton-inner-padding) - 4px) !important;
padding-block: var(--toolbarbutton-inner-padding) !important;
}
/* Add margin to the side of the button facing the tabs so the buttons line up
* on the opposite side with others in the toolbar. */
#scrollbutton-up:not(.menupopup-scrollbutton) {
margin-inline: 0 2px !important;
}
#scrollbutton-down:not(.menupopup-scrollbutton) {
margin-inline: 2px 0 !important;
}
/* Hide pre-tabs spacer as it isn't needed. */
.titlebar-spacer[type="pre-tabs"] {
display: none !important;
}
/* Make sure that the post-tabs spacer appears. */
.titlebar-spacer[type="post-tabs"] {
display: flex !important;
}
/* macOS titlebar buttons positioning. */
@media (-moz-platform: macos) {
/* Compensate for padding added to the Tabs Toolbar. */
.titlebar-buttonbox-container {
margin-inline-start: -8px !important;
/* Make sure that titlebar buttons have equal spacing on all sides. */
& .titlebar-buttonbox {
margin-inline: calc((var(--tab-min-height) + var(--uc-tab-top-margin) - 14px) / 2) !important;
}
}
}
/* Linux titlebar button positioning. */
@media (-moz-platform: linux) {
.titlebar-buttonbox-container {
/* Add space between buttons and other toolbar buttons. */
margin-inline: 8px 0 !important;
@media (-moz-gtk-csd-reversed-placement) {
/* Compensate for padding added to the Tabs Toolbar. */
margin-inline: -8px 8px !important;
}
}
}
/* #endregion */
/*
MARK: Tab inner content
*/
/* #region */
.tabbrowser-tab {
font-size: 12px !important;
padding-inline: 0 !important;
/* Allow shadows to appear outside the tabs. */
overflow-clip-margin: 8px !important;
/* Set width of tabs. */
&:not([pinned], [style*="max-width"])[fadein] {
max-width: 240px !important;
}
/* Enforce tab foreground colour. */
&:is([visuallyselected], [multiselected]) {
color: var(--tab-selected-textcolor) !important;
&:-moz-window-inactive {
color: var(--tab-selected-textcolor-inactive, var(--tab-selected-textcolor)) !important;
}
}
}
/* Tab inner content padding. */
.tab-content {
padding-inline: var(--inline-tab-padding) 0 !important;
/* Pinned tab padding. */
&[pinned] {
padding: 0 var(--uc-inline-pinned-tab-padding) !important;
}
/* Indicator for when the title of a pinned tab changes. */
&[pinned][titlechanged]:not([selected]),
.tabbrowser-tab:is([image], [pinned]) &[attention]:not([selected]) {
background-position: center bottom 2px !important;
}
}
/* Space between tab icons and the tab titles. */
.tab-throbber:not([pinned]),
.tab-icon-pending:not([pinned]),
.tab-icon-image:not([pinned]),
.tab-sharing-icon-overlay:not([pinned]) {
margin-inline-end: calc(var(--inline-tab-padding) - 1px) !important;
}
/* Make sure that the tabs are the correct height. */
#tabbrowser-tabs .tab-label-container {
height: var(--tab-min-height) !important;
/* Hide tab audio indicator label. */
& .tab-secondary-label {
display: none !important;
}
}
/* Tab close button styling. */
.tab-close-button {
margin-inline-end: 8px !important;
width: 17px !important;
height: 17px !important;
padding: 4px !important;
border-radius: var(--toolbarbutton-border-radius) !important;
}
/* Ensure that unselected tabs use full opacity and correct colours.
* Also ensures that the tab's icon is always visible.
*/
.tab-label-container:not([selected="true"], [multiselected]),
.tab-icon-stack[indicator-replaces-favicon] > :not(.tab-icon-overlay) {
opacity: 1 !important;
}
/* Change width of the gradient mask located on the right of the tab labels. */
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab .tab-label-container {
--tab-label-mask-size: 1em !important;
}
/* Tab container indicator. */
.tabbrowser-tab[usercontextid] {
& .tab-context-line {
height: 2px !important;
border-radius: 2px !important;
margin: 2px 7px 0 !important;
}
&[selected] .tab-context-line {
margin-inline: 9px !important;
}
}
/*
MARK: Sound playing indicator
*/
/* Move the audio indicator to the right of the tab's icon. */
#tabbrowser-tabs:not([closebuttons="activetab"]) .tab-icon-overlay:not([pinned]) {
margin-inline: 22px 6px !important;
}
/* When there is no tab icon, move indicator to the left. */
#tabbrowser-tabs .tabbrowser-tab:not([image]) .tab-icon-overlay:not([pinned]) {
margin-inline: 0px 6px !important;
}
/* Overlay the audio indicator onto the tab icon when there isn't enough space. */
.tab-icon-overlay:not([crashed]):is([pinned], [sharing]),
#tabbrowser-tabs[closebuttons="activetab"] .tab-icon-overlay:not([crashed]) {
top: -5.5px !important;
inset-inline-end: -6px !important;
}
/* Set colour for the overlay tab audio indicator. */
#tabbrowser-tabs[closebuttons="activetab"] {
& .tab-icon-overlay:is([soundplaying], [muted], [activemedia-blocked]):not([crashed]) {
stroke: var(--tab-icon-overlay-stroke, light-dark(white, black)) !important;
color: var(--tab-icon-overlay-fill, light-dark(black, white)) !important;
fill-opacity: 1 !important;
&:hover {
background-color: var(--tab-icon-overlay-stroke, light-dark(white, black)) !important;
}
}
}
/* Add border radius to the tab audio indicator. */
.tab-icon-overlay:is([soundplaying], [muted], [activemedia-blocked]):not([crashed]) {
border-radius: var(--toolbarbutton-border-radius) !important;
padding: 0 !important;
}
/* Ensure the audio indicator is visible when needed. */
.tab-icon-stack:is([soundplaying], [muted], [activemedia-blocked]) > .tab-icon-overlay {
opacity: 1 !important;
}
/* #endregion */
/*
MARK: Background and corners
*/
/* #region */
.tab-background {
border-radius: var(--tab-border-radius);
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
margin-block: 0 !important;
border: 0 !important;
position: relative !important;
--uc-tab-corner-bg: transparent;
--uc-tab-corner-outline: transparent;
/* Both rounded bottom corners. */
&::before,
&::after {
content: "" !important;
position: absolute !important;
width: var(--tab-border-radius) !important;
aspect-ratio: 1 / 1;
bottom: 0 !important;
pointer-events: none !important;
clip-path: inset(0);
}
/* Bottom left corner. */
&::before {
border-bottom-right-radius: var(--tab-border-radius) !important;
left: 0 !important;
translate: calc(-1 * var(--tab-border-radius)) 0 !important;
box-shadow:
/* First shadow is a 1px outline for better theming support. */
-1px -1px var(--uc-tab-corner-outline) inset,
/* Second shadow is to add the background colour to the corner. */
0 0 0 var(--tab-border-radius) var(--uc-tab-corner-bg) !important;
}
/* Bottom right corner. */
&::after {
border-bottom-left-radius: var(--tab-border-radius) !important;
right: 0 !important;
translate: var(--tab-border-radius) 0 !important;
box-shadow:
/* First shadow is a 1px outline for better theming support. */
1px -1px var(--uc-tab-corner-outline) inset,
/* Second shadow is to add the background colour to the corner. */
0 0 0 var(--tab-border-radius) var(--uc-tab-corner-bg) !important;
}
/* Make sure that the bottom corners have the same background colour. */
&:is([selected], [multiselected]) {
--uc-tab-corner-bg: var(--tab-selected-bgcolor, var(--lwt-selected-tab-background-color, var(--toolbar-bgcolor)));
--uc-tab-corner-outline: var(--lwt-tab-line-color, transparent);
/* Disable tab outlines when selected. */
outline: none !important;
}
/* Tab hover background colour. */
.tabbrowser-tab:hover &:not([selected], [multiselected]) {
background-color: color-mix(in srgb, currentColor 8%, transparent) !important;
--uc-tab-corner-bg: color-mix(in srgb, currentColor 8%, transparent) !important;
/* When in light mode, the hover colour should be white. */
#TabsToolbar:not([brighttext]) & {
background-color: rgb(255 255 255 / .3) !important;
--uc-tab-corner-bg: rgb(255 255 255 / .3) !important;
@media (-moz-bool-pref: "uc.tweak.floating-tabs") {
background-color: var(--toolbar-bgcolor) !important;
--uc-tab-corner-bg: var(--toolbar-bgcolor) !important;
}
}
}
/* When tabs are selected but not active, they should have a partially
* transparent background. */
#tabbrowser-tabs &[multiselected]:not([selected]) {
box-shadow: none !important;
opacity: 0.7 !important;
}
}
/* Disable bottom left rounded corner to prevent overlapping transparent tabs.
*
* If a tab is selected, then the next tab's bottom-left corner should be
* inverted to prevent overlap with the transparent backgrounds.
*
* If the next tab is hidden, then find the next visible tab which would be
* positioned next to the active tab.
*/
.tabbrowser-tab:is([selected], [multiselected]):not([hidden]) {
& + .tabbrowser-tab .tab-background:not([selected]),
& + .tabbrowser-tab[hidden] ~ .tabbrowser-tab:not([hidden]):is([hidden] + *) .tab-background:not([selected]) {
border-bottom-left-radius: var(--tab-border-radius) !important;
&::before {
--uc-tab-corner-bg: transparent !important;
}
}
}
/* #endregion */
/*
MARK: Tab separators
*/
/* #region */
.tabbrowser-tab .tab-stack {
/* Both side separators. */
&::before,
&::after {
content: "";
position: absolute;
height: var(--uc-tab-separator-height);
inset-block: 0;
margin-block: auto;
border-left: 1px solid transparent;
}
/* Fractional scaling adjustments (150%, 175%, etc.) */
@media (1dppx < resolution < 2dppx) {
&::before,
&::after {
border-left-width: 1.5px !important;
}
}
/* Left side separators. */
&::before {
left: 0;
}
/* Right side separators. */
&::after {
right: 0;
}
}
/* Set separator color and add separator for last visible tab. */
.tabbrowser-tab:not([selected], [multiselected], :hover) {
/* All tabs. */
& .tab-stack::before,
/* Last visible tab. */
&:nth-last-child(1 of .tabbrowser-tab:not([hidden])) .tab-stack::after,
/* Last visible pinned tab when overflowed. */
#tabbrowser-tabs[overflow] &:nth-last-child(1 of .tabbrowser-tab[pinned]:not([hidden])) .tab-stack::after {
border-color: color-mix(in srgb, currentColor 34%, transparent);
}
}
/* Hide tab separator when previous tab is hovered or selected.
*
* If a tab is selected, then the next tab's left separator should be hidden.
*
* If the next tab is hidden, then find the next visible tab.
*/
.tabbrowser-tab:is([selected], [multiselected], :hover):not([hidden]) {
& + .tabbrowser-tab .tab-stack::before,
& + .tabbrowser-tab[hidden] ~ .tabbrowser-tab:not([hidden]):is([hidden] + *) .tab-stack::before {
border-color: transparent !important;
}
}
/* Hide the first tab's separator for specific buttons before the tabs.
*
* If in private browsing mode, the Firefox View button is hidden, so the
* separator should also be hidden as long as there are no other buttons before
* it. If the Firefox account button is just before the tabs, then the separator
* should stay hidden.
*
* If the button directly before the tabs is the Firefox account button, the
* separator should be hidden.
*
* If there are no buttons before the tabs, hide the separator.
*/
:root[privatebrowsingmode] #firefox-view-button + #tabbrowser-tabs:not(.toolbarbutton-1:not(#fxa-toolbar-menu-button) + #firefox-view-button + #tabbrowser-tabs),
#fxa-toolbar-menu-button + #tabbrowser-tabs,
#tabbrowser-tabs:first-child {
& .tabbrowser-tab:nth-child(1 of .tabbrowser-tab:not([hidden])) .tab-stack::before {
border-color: transparent !important;
}
}
/* #endregion */
/*
MARK: Tab shadows
*/
/* #region */
/* Tab and toolbar shadows. */
@media not (-moz-bool-pref: "uc.tweak.rounded-corners") {
/* Edge now removes the shadow when rounded corners are enabled. */
:root,
:root .tabbrowser-tab {
/* Light mode shadows. */
--uc-titlebar-shadow:
0 -1px var(--tabs-navbar-shadow-color, transparent) inset,
0 -3px 2px -3px rgb(0 0 0 / .2) inset;
--uc-tab-shadow:
0 0 0 1px var(--lwt-tab-line-color, transparent),
0 4px 5px rgb(0 0 0 / .21),
0 0px 2px rgb(0 0 0 / .18);
& [brighttext],
& [brighttext] .tabbrowser-tab {
/* Dark mode shadows. */
--uc-titlebar-shadow:
0 -1px var(--tabs-navbar-shadow-color, transparent) inset,
0 -3px 2px -3px rgb(0 0 0 / .7) inset;
--uc-tab-shadow:
0 0 0 1px var(--lwt-tab-line-color, transparent),
0 5px 7px rgb(0 0 0 / .44),
0 0px 2px rgb(0 0 0 / .7);
}
}
}
/* Apply tab shadows. */
#tabbrowser-tabs .tab-background:is([selected], [multiselected]),
#TabsToolbar #firefox-view-button[open] > .toolbarbutton-icon {
box-shadow: var(--uc-tab-shadow) !important;
}
/* Apply toolbar shadows. */
#TabsToolbar {
box-shadow: var(--uc-titlebar-shadow) !important;
}
/* Prevent interference with context menu arrowscrollbox. */
#tabbrowser-arrowscrollbox {
--uc-padding-top: 4px;
--uc-margin-top: -4px;
--uc-padding-inline-end: var(--tab-border-radius)
}
/* Make room for the tab shadows so they aren't clipped at the top. */
.scrollbox-clip > scrollbox {
padding-top: var(--uc-padding-top, 0) !important;
margin-top: var(--uc-margin-top, 0) !important;
/* Used to fix tab overflow issue with rounded corners. */
padding-inline-end: var(--uc-padding-inline-end, 0) !important;
}
/* Add some room horizontally for the tab shadows and rounded corners. */
#tabbrowser-tabs {
&:not([overflow]) {
margin-inline-start: -8px !important;
margin-inline-end: calc(-1 * var(--tab-border-radius)) !important;
:where(#tabbrowser-arrowscrollbox .tabbrowser-tab:nth-child(1 of .tabbrowser-tab:not([hidden]))) {
margin-inline-start: 8px !important;
}
}
}
/* Clip the bottom of the tabs so the shadows don't bleed into other areas. */
#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > .tabbrowser-tab[pinned] {
clip-path: inset(-8px -8px 0) !important;
}
/* #endregion */
/*
MARK: Private browsing icon
*/
/* #region */
:root[privatebrowsingmode="temporary"] {
/* Move the other content in the Tabs Toolbar in-front of the indicator. */
& #TabsToolbar .toolbar-items,
& #TabsToolbar .titlebar-buttonbox-container {
position: relative;
z-index: 1;
}
/* Hide the post tab spacer as it is not needed. */
.titlebar-spacer[type="post-tabs"] {
display: none !important;
}
}
/* String for the custom label. */
:root,
:root[lang^="en"] {
--uc-string-private: "Private";
}
/* Appearance & sizing for the private browsing indicator. */
#private-browsing-indicator-with-label {
position: relative !important;
isolation: isolate;
font-size: 12px;
/* Allow space for the gradient to underlay other toolbar items. */
margin-inline: -16px -16px !important;
padding-inline: 32px 24px !important;
color: var(--button-primary-color, var(--toolbar-bgcolor)) !important;
text-shadow: none !important;
background: var(--uc-gradient);
--uc-bg-color: var(--button-primary-bgcolor, var(--toolbarbutton-icon-fill-attention));
/* Primay gradient, fades to transparent on the left. */
--uc-gradient: linear-gradient(to right, transparent, var(--uc-bg-color) 35%);
/* Alternate gradient, fades to transparent on both sides. */
--uc-gradient-alt: linear-gradient(to right, transparent, var(--uc-bg-color) 25%, var(--uc-bg-color) 75%, transparent);
/* If the titlebar buttons are on the right, then use the alternate gradient
* if the menu bar is not permanently enabled. */
@media (-moz-platform: windows),
(-moz-gtk-csd-available) and (not (-moz-gtk-csd-reversed-placement)) {
:root[tabsintitlebar] #toolbar-menubar:not([autohide="false"]) ~ #TabsToolbar & {
background: var(--uc-gradient-alt);
}
}
/* Private browsing icon size. */
& .private-browsing-indicator-icon {
height: 24px !important;
width: 24px !important;
}
/* Change "Private Browsing" text to "Private" (English locale only). */
:root:is([lang^="en"]) & {
/* Hide original label. */
& > label {
display: none !important;
}
/* Add custom "Private" label. */
&::after {
content: var(--uc-string-private);
margin-block: 1px 2px;
margin-inline: 6px 5px;
}
}
}
/* #endregion */