diff options
Diffstat (limited to 'browser/base/content/browser.css')
-rw-r--r-- | browser/base/content/browser.css | 1578 |
1 files changed, 1578 insertions, 0 deletions
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css new file mode 100644 index 0000000000..8ac29cad6c --- /dev/null +++ b/browser/base/content/browser.css @@ -0,0 +1,1578 @@ +/* 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, +body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + overflow: clip; +} + +:root { + text-rendering: optimizeLegibility; + min-height: 95px; + min-width: 95px; + + /* variables */ + --panelui-subview-transition-duration: 150ms; + --lwt-additional-images: none; + --lwt-background-alignment: right top; + --lwt-background-tiling: no-repeat; + + --toolbar-bgcolor: var(--toolbar-non-lwt-bgcolor); + --toolbar-bgimage: var(--toolbar-non-lwt-bgimage); + --toolbar-color: var(--toolbar-non-lwt-textcolor); +} + +:root:-moz-locale-dir(rtl) { + direction: rtl; +} + +:root:-moz-lwtheme { + --toolbar-bgcolor: rgba(255,255,255,.4); + --toolbar-bgimage: none; + --toolbar-color: var(--lwt-text-color, inherit); + + background-color: var(--lwt-accent-color); + color: var(--lwt-text-color); +} + +:root:-moz-lwtheme[lwtheme-image] { + background-image: var(--lwt-header-image) !important; + background-repeat: no-repeat; + background-position: right top !important; +} + +:root:-moz-lwtheme:-moz-window-inactive { + background-color: var(--lwt-accent-color-inactive, var(--lwt-accent-color)); +} + +:root:not([chromehidden~="toolbar"]) { + min-width: 450px; +} + +:root[customizing] { + min-width: -moz-fit-content; +} + +/* Prevent shrinking the page content to 0 height and width */ +.browserStack { + min-height: 25px; + min-width: 25px; +} + +body { + display: -moz-box; + -moz-box-orient: vertical; + -moz-box-flex: 1; +} + +/* Set additional backgrounds alignment relative to toolbox */ + +#navigator-toolbox:-moz-lwtheme { + background-image: var(--lwt-additional-images); + background-position: var(--lwt-background-alignment); + background-repeat: var(--lwt-background-tiling); +} + +.search-one-offs[compact=true] .search-setting-button, +.search-one-offs:not([compact=true]) .search-setting-button-compact { + display: none; +} + +%ifdef MENUBAR_CAN_AUTOHIDE +#toolbar-menubar[autohide="true"] { + overflow: hidden; +} + +#toolbar-menubar[autohide="true"][inactive="true"]:not([customizing="true"]) { + min-height: 0 !important; + height: 0 !important; + appearance: none !important; +} +%endif + +%ifdef XP_MACOSX +#toolbar-menubar { + visibility: collapse; +} +%endif + +panelmultiview { + -moz-box-align: start; +} + +panelmultiview[transitioning] { + pointer-events: none; +} + +panelview { + -moz-box-orient: vertical; +} + +panelview:not([visible]) { + visibility: collapse; +} + +/* Hide the header when a subview is reused as a main view. */ +panelview[mainview] > .panel-header { + display: none; +} + +.panel-viewcontainer { + overflow: hidden; +} + +.panel-viewcontainer[panelopen] { + transition-property: height; + transition-timing-function: var(--animation-easing-function); + transition-duration: var(--panelui-subview-transition-duration); + will-change: height; +} + +.panel-viewcontainer.offscreen { + display: block; +} + +.panel-viewstack { + overflow: visible; + transition: height var(--panelui-subview-transition-duration); +} + +@supports -moz-bool-pref("layout.css.emulate-moz-box-with-flex") { + #tabbrowser-tabs { + /* Without this, the tabs container width extends beyond the window width */ + width: 0; + } + .tab-stack { + /* Without this, pinned tabs get a bit too tall when the tabstrip overflows. */ + vertical-align: top; + } +} + +@supports not -moz-bool-pref("browser.tabs.tabmanager.enabled") { + #tabbrowser-tabs:not([overflow="true"], [hashiddentabs]) ~ #alltabs-button { + display: none; + } + #tabbrowser-tabs:not([overflow="true"])[using-closing-tabs-spacer] ~ #alltabs-button { + /* temporary space to keep a tab's close button under the cursor */ + display: -moz-box; + visibility: hidden; + } +} + +#tabbrowser-tabs[hasadjacentnewtabbutton]:not([overflow="true"]) ~ #new-tab-button, +#tabbrowser-tabs[overflow="true"] > #tabbrowser-arrowscrollbox > #tabs-newtab-button, +#tabbrowser-tabs:not([hasadjacentnewtabbutton]) > #tabbrowser-arrowscrollbox > #tabs-newtab-button, +#TabsToolbar[customizing="true"] #tabs-newtab-button { + display: none; +} + +.tabbrowser-tab:not([pinned]) { + -moz-box-flex: 100; + max-width: 225px; + min-width: var(--tab-min-width); + width: 0; + transition: min-width 100ms ease-out, + max-width 100ms ease-out; +} + +:root[uidensity=touch] .tabbrowser-tab:not([pinned]) { + /* Touch mode needs additional space for the close button. */ + min-width: calc(var(--tab-min-width) + 10px); +} + +.tabbrowser-tab:not([pinned], [fadein]) { + max-width: 0.1px; + min-width: 0.1px; + visibility: hidden; +} + +.tab-icon-image[fadein], +.tab-close-button[fadein], +.tabbrowser-tab[fadein]::after, +.tab-background[fadein] { + /* This transition is only wanted for opening tabs. */ + transition: visibility 0ms 25ms; +} + +.tab-icon-pending:not([fadein]), +.tab-icon-image:not([fadein]), +.tab-close-button:not([fadein]), +.tabbrowser-tab:not([fadein])::after, +.tab-background:not([fadein]) { + visibility: hidden; +} + +.tab-label:not([fadein]), +.tab-throbber:not([fadein]) { + display: none; +} + +%ifdef NIGHTLY_BUILD +@supports -moz-bool-pref("browser.tabs.hideThrobber") { + .tab-throbber { + display: none !important; + } +} +%endif + +#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > .tabbrowser-tab[pinned] { + position: fixed !important; + display: block; +} + +#tabbrowser-tabs[movingtab] > #tabbrowser-arrowscrollbox > .tabbrowser-tab[selected], +#tabbrowser-tabs[movingtab] > #tabbrowser-arrowscrollbox > .tabbrowser-tab[multiselected] { + position: relative; + z-index: 2; + pointer-events: none; /* avoid blocking dragover events on scroll buttons */ +} + +.tabbrowser-tab[tab-grouping], +.tabbrowser-tab[tabdrop-samewindow] { + transition: transform 200ms var(--animation-easing-function); +} + +.tabbrowser-tab[tab-grouping][multiselected]:not([selected]) { + z-index: 2; +} + +/* Make it easier to drag tabs by expanding the drag area downwards. */ +#tabbrowser-tabs[movingtab] { + padding-bottom: 15px; + margin-bottom: -15px; +} + +#navigator-toolbox[movingtab] > #nav-bar { + pointer-events: none; +} + +/* Allow dropping a tab on buttons with associated drop actions. */ +#navigator-toolbox[movingtab] > #nav-bar > #nav-bar-customization-target > #personal-bookmarks, +#navigator-toolbox[movingtab] > #nav-bar > #nav-bar-customization-target > #home-button, +#navigator-toolbox[movingtab] > #nav-bar > #nav-bar-customization-target > #downloads-button, +#navigator-toolbox[movingtab] > #nav-bar > #nav-bar-customization-target > #bookmarks-menu-button { + pointer-events: auto; +} + +/* The address bar needs to be able to render outside of the toolbar, but as + * long as it's within the toolbar's bounds we can clip the toolbar so that the + * rendering pipeline doesn't reserve an enormous texture for it. */ +#nav-bar:not([urlbar-exceeds-toolbar-bounds]), +/* When customizing, overflowable toolbars move automatically moved items back + * from the overflow menu, but we still don't want to render them outside of + * the customization target. */ +toolbar[overflowable][customizing] > .customization-target { + overflow: clip; +} + +toolbar:not([overflowing]) > .overflow-button, +toolbar[customizing] > .overflow-button { + display: none; +} + +toolbar[customizing] #ion-button, +toolbar[customizing] #whats-new-menu-button { + display: none; +} + +:root:not([chromehidden~="toolbar"]) #nav-bar[nonemptyoverflow] > .overflow-button, +#nav-bar[customizing] > .overflow-button { + display: -moz-box; +} + +/* The ids are ugly, but this should be reasonably performant, and + * using a tagname as the last item would be less so. + */ +#widget-overflow-list:empty + #widget-overflow-fixed-separator, +#widget-overflow:not([hasfixeditems]) #widget-overflow-fixed-separator { + display: none; +} + + +%ifdef MENUBAR_CAN_AUTOHIDE +:root:not([chromehidden~="menubar"]) #toolbar-menubar:not([autohide=true]) + #TabsToolbar > .titlebar-buttonbox-container, +:root:not([chromehidden~="menubar"]) #toolbar-menubar:not([autohide=true]) + #TabsToolbar .titlebar-spacer, +%endif +%ifndef MOZ_WIDGET_COCOA +%ifndef MOZ_WIDGET_GTK +:root:not([sizemode=normal]) .titlebar-spacer[type="pre-tabs"], +%endif +%endif +:root:not([chromemargin]) .titlebar-buttonbox-container, +:root[inFullscreen] .titlebar-buttonbox-container, +:root[inFullscreen] .titlebar-spacer, +:root:not([tabsintitlebar]) .titlebar-spacer { + display: none; +} +%ifdef MOZ_WIDGET_GTK +@media (-moz-gtk-csd-reversed-placement: 0) { + :root:not([sizemode=normal]) .titlebar-spacer[type="pre-tabs"], + :root[gtktiledwindow=true] .titlebar-spacer[type="pre-tabs"] { + display: none; + } +} +@media (-moz-gtk-csd-reversed-placement) { + :root:not([sizemode=normal]) .titlebar-spacer[type="post-tabs"], + :root[gtktiledwindow=true] .titlebar-spacer[type="post-tabs"] { + display: none; + } +} +%endif + +:root:not([sizemode=maximized]) .titlebar-restore, +:root[sizemode=maximized] .titlebar-max { + display: none; +} + +%ifdef MENUBAR_CAN_AUTOHIDE +#toolbar-menubar[autohide=true]:not([inactive]) + #TabsToolbar > .titlebar-buttonbox-container { + visibility: hidden; +} +%endif + +#titlebar { + -moz-window-dragging: drag; +} + +:root[tabsintitlebar] .titlebar-buttonbox { + position: relative; +} + +:root:not([tabsintitlebar]) .titlebar-buttonbox { + display: none; +} + +.titlebar-buttonbox { + appearance: auto; + -moz-default-appearance: -moz-window-button-box; + position: relative; +} + +#personal-toolbar-empty-description { + -moz-window-dragging: no-drag; +} + +#personal-bookmarks { + -moz-window-dragging: inherit; +} + +toolbarpaletteitem { + -moz-window-dragging: no-drag; + -moz-box-pack: start; +} + +.titlebar-buttonbox-container { + -moz-box-ordinal-group: 1000; +} + +%ifdef XP_MACOSX +#titlebar-fullscreen-button { + appearance: auto; + -moz-default-appearance: -moz-mac-fullscreen-button; +} + +/** + * On macOS, the window caption buttons are on the left side of the window titlebar, + * even when using the RTL UI direction. Similarly, the fullscreen button is on the + * right side of the window titlebar, even when using the RTL UI direction. These + * next rules enforce that ordering. + */ +#titlebar-secondary-buttonbox:-moz-locale-dir(ltr) { + -moz-box-ordinal-group: 1000; +} + +#titlebar-secondary-buttonbox:-moz-locale-dir(rtl), +.titlebar-buttonbox-container:-moz-locale-dir(ltr) { + -moz-box-ordinal-group: 0; +} +%endif + +:root[inDOMFullscreen] #navigator-toolbox, +:root[inDOMFullscreen] #fullscr-toggler, +:root[inDOMFullscreen] #sidebar-box, +:root[inDOMFullscreen] #sidebar-splitter, +:root[inFullscreen]:not([OSXLionFullscreen]) toolbar:not([fullscreentoolbar=true]), +:root[inFullscreen] .global-notificationbox { + visibility: collapse; +} + +#navigator-toolbox[fullscreenShouldAnimate] { + transition: 0.8s margin-top ease-out; +} + +/* Rules to help integrate WebExtension buttons */ + +.webextension-browser-action > .toolbarbutton-badge-stack > .toolbarbutton-icon { + height: 16px; + width: 16px; +} + +@media not all and (min-resolution: 1.1dppx) { + .webextension-browser-action { + list-style-image: var(--webextension-toolbar-image, inherit); + } + + toolbar[brighttext] .webextension-browser-action { + list-style-image: var(--webextension-toolbar-image-light, inherit); + } + + toolbar:not([brighttext]) .webextension-browser-action:-moz-lwtheme { + list-style-image: var(--webextension-toolbar-image-dark, inherit); + } + + .webextension-browser-action[cui-areatype="menu-panel"] { + list-style-image: var(--webextension-menupanel-image, inherit); + } + + :root[lwt-popup-brighttext] .webextension-browser-action[cui-areatype="menu-panel"] { + list-style-image: var(--webextension-menupanel-image-light, inherit); + } + + :root:not([lwt-popup-brighttext]) .webextension-browser-action[cui-areatype="menu-panel"]:-moz-lwtheme { + list-style-image: var(--webextension-menupanel-image-dark, inherit); + } + + .webextension-menuitem { + list-style-image: var(--webextension-menuitem-image, inherit) !important; + } +} + +@media (min-resolution: 1.1dppx) { + .webextension-browser-action { + list-style-image: var(--webextension-toolbar-image-2x, inherit); + } + + toolbar[brighttext] .webextension-browser-action { + list-style-image: var(--webextension-toolbar-image-2x-light, inherit); + } + + toolbar:not([brighttext]) .webextension-browser-action:-moz-lwtheme { + list-style-image: var(--webextension-toolbar-image-2x-dark, inherit); + } + + .webextension-browser-action[cui-areatype="menu-panel"] { + list-style-image: var(--webextension-menupanel-image-2x, inherit); + } + + :root[lwt-popup-brighttext] .webextension-browser-action[cui-areatype="menu-panel"] { + list-style-image: var(--webextension-menupanel-image-2x-light, inherit); + } + + :root:not([lwt-popup-brighttext]) .webextension-browser-action[cui-areatype="menu-panel"]:-moz-lwtheme { + list-style-image: var(--webextension-menupanel-image-2x-dark, inherit); + } + + .webextension-menuitem { + list-style-image: var(--webextension-menuitem-image-2x, inherit) !important; + } +} + +toolbarbutton.webextension-menuitem > .toolbarbutton-icon { + width: 16px; + height: 16px; +} + +toolbarpaletteitem[removable="false"] { + opacity: 0.5; +} + +%ifndef XP_MACOSX +toolbarpaletteitem[place="palette"], +toolbarpaletteitem[place="menu-panel"], +toolbarpaletteitem[place="toolbar"] { + -moz-user-focus: normal; +} +%endif + +#bookmarks-toolbar-placeholder, +#bookmarks-toolbar-button, +toolbarpaletteitem > #personal-bookmarks > #PlacesToolbar, +#personal-bookmarks:is([overflowedItem=true], [cui-areatype="menu-panel"]) > #PlacesToolbar { + display: none; +} + +toolbarpaletteitem[place="toolbar"] > #personal-bookmarks > #bookmarks-toolbar-placeholder, +toolbarpaletteitem[place="palette"] > #personal-bookmarks > #bookmarks-toolbar-button, +#personal-bookmarks:is([overflowedItem=true], [cui-areatype="menu-panel"]) > #bookmarks-toolbar-button { + display: -moz-box; +} + +#personal-bookmarks { + position: relative; +} + +#PlacesToolbarDropIndicatorHolder { + display: block; + position: absolute; +} + +#nav-bar-customization-target > #personal-bookmarks, +toolbar:not(#TabsToolbar) > #wrapper-personal-bookmarks, +toolbar:not(#TabsToolbar) > #personal-bookmarks { + -moz-box-flex: 1; +} + +#zoom-controls[cui-areatype="toolbar"]:not([overflowedItem=true]) > #zoom-reset-button > .toolbarbutton-text { + display: -moz-box; +} + +#reload-button:not([displaystop]) + #stop-button, +#reload-button[displaystop] { + display: none; +} + +/* The reload-button is only disabled temporarily when it becomes visible + to prevent users from accidentally clicking it. We don't however need + to show this disabled state, as the flicker that it generates is short + enough to be visible but not long enough to explain anything to users. */ +#reload-button[disabled]:not(:-moz-window-inactive) > .toolbarbutton-icon { + opacity: 1 !important; +} + +/* Ensure stop-button and reload-button are displayed correctly when in the overflow menu */ +.widget-overflow-list > #stop-reload-button > .toolbarbutton-1 { + -moz-box-flex: 1; +} + +%ifdef XP_MACOSX +:root[inFullscreen="true"] { + padding-top: 0; /* override drawintitlebar="true" */ +} +%endif + +/* Hide menu elements intended for keyboard access support */ +#main-menubar[openedwithkey=false] .show-only-for-keyboard { + display: none; +} + +/* ::::: location bar & search bar ::::: */ + +#urlbar, +#searchbar { + /* Setting a width and min-width to let the location & search bars maintain + a constant width in case they haven't be resized manually. (bug 965772) */ + width: 1px; + min-width: 1px; +} + +/* Align URLs to the right in RTL mode. */ +#urlbar-input:-moz-locale-dir(rtl) { + text-align: right !important; +} + +/* Make sure that the location bar's alignment changes according + to the input box direction if the user switches the text direction using + cmd_switchTextDirection (which applies a dir attribute to the <input>). */ +#urlbar-input[dir=ltr]:-moz-locale-dir(rtl) { + text-align: left !important; +} + +#urlbar-input[dir=rtl]:-moz-locale-dir(ltr) { + text-align: right !important; +} + +/* + * Display visual cue that browser is under remote control. + * This is to help users visually distinguish a user agent session that + * is under remote control from those used for normal browsing sessions. + * + * Attribute is controlled by browser.js:/gRemoteControl. + */ +:root[remotecontrol] #urlbar-background { + background: repeating-linear-gradient( + -45deg, + transparent, + transparent 25px, + rgba(255,255,255,.3) 25px, + rgba(255,255,255,.3) 50px); + background-color: rgba(255,170,68,.8); + color: black; +} + +/* Show the url scheme in a static box when overflowing to the left */ +.urlbar-input-box { + position: relative; + direction: ltr; +} + +#urlbar-scheme { + position: absolute; + height: 100%; + visibility: hidden; + direction: ltr; + pointer-events: none; +} + +#urlbar-input { + mask-repeat: no-repeat; + unicode-bidi: plaintext; + text-align: match-parent; +} + +#urlbar:not([focused])[domaindir="ltr"]> #urlbar-input-container > .urlbar-input-box > #urlbar-input { + direction: ltr; + unicode-bidi: embed; +} + +/* The following rules apply overflow masks to the unfocused urlbar + This mask may be overriden when a Contextual Feature Recommendation is shown, + see browser/themes/shared/urlbar-searchbar.inc.css for details */ + +#urlbar:not([focused])[textoverflow="both"] > #urlbar-input-container > .urlbar-input-box > #urlbar-input { + mask-image: linear-gradient(to right, transparent, black 3ch, black calc(100% - 3ch), transparent); +} +#urlbar:not([focused])[textoverflow="right"] > #urlbar-input-container > .urlbar-input-box > #urlbar-input { + mask-image: linear-gradient(to left, transparent, black 3ch); +} +#urlbar:not([focused])[textoverflow="left"] > #urlbar-input-container > .urlbar-input-box > #urlbar-input { + mask-image: linear-gradient(to right, transparent, black 3ch); +} + +/* The protocol is visible if there is an RTL domain and we overflow to the left. + Uses the required-valid trick to check if it contains a value */ +#urlbar:not([focused])[textoverflow="left"][domaindir="rtl"] > #urlbar-input-container > .urlbar-input-box > #urlbar-scheme:valid { + visibility: visible; +} +#urlbar:not([focused])[textoverflow="left"][domaindir="rtl"] > #urlbar-input-container > .urlbar-input-box > #urlbar-input { + mask-image: linear-gradient(to right, transparent var(--urlbar-scheme-size), black calc(var(--urlbar-scheme-size) + 3ch)); +} + +/* Apply crisp rendering for favicons at exactly 2dppx resolution */ +@media (resolution: 2dppx) { + .searchbar-engine-image { + image-rendering: -moz-crisp-edges; + } +} + +#urlbar[actiontype="switchtab"][actionoverride] > #urlbar-input-container > #urlbar-label-box, +#urlbar:not([actiontype="switchtab"], [actiontype="extension"], [searchmode]) > #urlbar-input-container > #urlbar-label-box, +#urlbar:not([actiontype="switchtab"]) > #urlbar-input-container > #urlbar-label-box > #urlbar-label-switchtab, +#urlbar:not([actiontype="extension"]) > #urlbar-input-container > #urlbar-label-box > #urlbar-label-extension, +#urlbar[searchmode][breakout-extend] > #urlbar-input-container > #urlbar-label-box, +#urlbar:not([searchmode]) > #urlbar-input-container > #urlbar-label-box > #urlbar-label-search-mode, +#urlbar[breakout-extend] > #urlbar-input-container > #urlbar-label-box > #urlbar-label-search-mode { + display: none; +} + +#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginsFooter"] { + -moz-box-pack: center; + color: FieldText; + min-height: 2.6666em; + border-top: 1px solid rgba(38,38,38,.15); + background-color: hsla(0,0%,80%,.35); /* match arrowpanel-dimmed */; +} + +#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginsFooter"]:hover, +#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginsFooter"][selected] { + background-color: hsla(0,0%,80%,.5); /* match arrowpanel-dimmed-further */ +} + +/* Define the minimum width based on the style of result rows. + The order of the min-width rules below must be in increasing order. */ +#PopupAutoComplete[resultstyles~="loginsFooter"], +#PopupAutoComplete[resultstyles~="insecureWarning"] { + min-width: 17em; +} + +#PopupAutoComplete[resultstyles~="importableLogins"], +#PopupAutoComplete[resultstyles~="generatedPassword"] { + min-width: 22em; +} + +#PopupAutoComplete > richlistbox > richlistitem[originaltype="insecureWarning"] { + height: auto; +} + +#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginWithOrigin"] > .ac-site-icon, +#PopupAutoComplete > richlistbox > richlistitem[originaltype="insecureWarning"] > .ac-site-icon { + margin-inline-start: 0; + display: initial; +} + +#PopupAutoComplete > richlistbox > richlistitem[originaltype="insecureWarning"] > .ac-title > .ac-text-overflow-container > .ac-title-text { + text-overflow: initial; + white-space: initial; +} + +#PopupAutoComplete > richlistbox > richlistitem[originaltype="insecureWarning"] > .ac-title > label { + margin-inline-start: 0; +} + +#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action, +#identity-box.chromeUI ~ #page-action-buttons > .urlbar-page-action:not(#star-button-box), +#urlbar[usertyping] > #urlbar-input-container > #page-action-buttons > #urlbar-zoom-button, +#urlbar:not([usertyping]) > #urlbar-input-container > #urlbar-go-button, +#urlbar:not([focused]) > #urlbar-input-container > #urlbar-go-button { + display: none; +} + +#nav-bar:not([keyNav=true]) #identity-box, +#nav-bar:not([keyNav=true]) #tracking-protection-icon-container { + -moz-user-focus: normal; +} + +/* We leave 350px plus whatever space the download button will need when it + * appears. Normally this should be 16px for the icon, plus 2 * 2px padding + * plus the toolbarbutton-inner-padding. We're adding 4px to ensure things + * like rounding on hidpi don't accidentally result in the button going + * into overflow. + */ + #urlbar-container { + min-width: calc(350px + 24px + 2 * var(--toolbarbutton-inner-padding)); +} + +#nav-bar[downloadsbuttonshown] #urlbar-container { + min-width: 350px; +} + +/* Customize mode is difficult to use at moderate window width if the Urlbar + remains 350px wide. */ +:root[customizing] #urlbar-container { + min-width: 280px; +} + +#identity-box { + max-width: calc(30px + 10em); +} + +@media (max-width: 770px) { + #urlbar-container { + min-width: calc(280px + 24px + 2 * var(--toolbarbutton-inner-padding)); + } + #nav-bar[downloadsbuttonshown] #urlbar-container { + min-width: 280px; + } + :root[customizing] #urlbar-container { + min-width: 245px; + } + #identity-box { + max-width: 80px; + } + /* Contenxtual identity labels are user-customizable and can be very long, + so we only show the colored icon when the window gets small. */ + #userContext-label { + display: none; + } +} +/* 680px is just below half of popular 1366px wide screens, so when putting two + browser windows next to each other on such a screen, they'll be above this + threshold. */ +@media (max-width: 680px) { + /* Page action buttons are duplicated in the page action menu so we can + safely hide them in small windows. */ + #pageActionSeparator, + #pageActionButton ~ .urlbar-page-action { + display: none; + } +} +@media (max-width: 550px) { + #urlbar-container { + min-width: calc(225px + 24px + 2 * var(--toolbarbutton-inner-padding)); + } + #nav-bar[downloadsbuttonshown] #urlbar-container { + min-width: 225px; + } + #identity-box { + max-width: 70px; + } + #urlbar-zoom-button { + display: none; + } +} + +/* Flexible spacer sizing (gets overridden in the navbar) */ +toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring], +toolbarspring { + -moz-box-flex: 1; + min-width: 28px; + max-width: 112px; +} + +#nav-bar toolbarpaletteitem[id^=wrapper-customizableui-special-spring], +#nav-bar toolbarspring { + -moz-box-flex: 80; + /* We shrink the flexible spacers, but not to nothing so they can be + * manipulated in customize mode; the next rule shrinks them further + * outside customize mode. */ + min-width: 10px; +} + +#nav-bar:not([customizing]) toolbarspring { + min-width: 1px; +} + +#widget-overflow-list > toolbarspring { + display: none; +} + +/* ::::: Unified Back-/Forward Button ::::: */ +.unified-nav-current { + font-weight: bold; +} + +.bookmark-item > label { + /* ensure we use the direction of the bookmarks label instead of the + * browser locale */ + unicode-bidi: plaintext; +} + +/* Apply crisp rendering for favicons at exactly 2dppx resolution */ +@media (resolution: 2dppx) { + .menuitem-with-favicon > .menu-iconic-left > .menu-iconic-icon { + image-rendering: -moz-crisp-edges; + } + + .bookmark-item > .toolbarbutton-icon, + .bookmark-item > .menu-iconic-left > .menu-iconic-icon { + image-rendering: -moz-crisp-edges; + } +} + +menupopup[emptyplacesresult="true"] > .hide-if-empty-places-result { + display: none; +} + +/* Hide extension toolbars that neglected to set the proper class */ +:root[chromehidden~="location"][chromehidden~="toolbar"] toolbar:not(.chromeclass-menubar) { + display: none; +} + +#navigator-toolbox , +#mainPopupSet { + min-width: 1px; +} + +/* History Swipe Animation */ + +#historySwipeAnimationContainer { + overflow: hidden; + pointer-events: none; +} + +#historySwipeAnimationPreviousArrow { + background: url("chrome://browser/content/history-swipe-arrow.svg") + center left / 64px 128px no-repeat transparent; +} +#historySwipeAnimationNextArrow { + background: url("chrome://browser/content/history-swipe-arrow.svg") + center left / 64px 128px no-repeat transparent; + transform: rotate(180deg); +} + +/* Pocket */ +:root[pocketdisabled=true] #context-pocket, +:root[pocketdisabled=true] #context-savelinktopocket, +:root[pocketdisabled=true] #appMenu-library-pocket-button { + display: none; +} + +/* Full Screen UI */ + +#fullscr-toggler { + top: 0; + left: 0; + right: 0; + height: 1px; + position: fixed; + z-index: 2147483647; +} + +#fullscreen-and-pointerlock-wrapper { + position: fixed; + width: 100vw; + height: 100vh; + top: 0; + pointer-events: none; +} + +.pointerlockfswarning { + position: fixed; + z-index: 2147483647 !important; + visibility: visible; + transition: transform 300ms ease-in; + /* To center the warning box horizontally, + we use left: 50% with translateX(-50%). */ + top: 0; left: 50%; + transform: translate(-50%, -100%); + box-sizing: border-box; + width: max-content; + max-width: 95%; + pointer-events: none; +} +.pointerlockfswarning:not([hidden]) { + display: flex; + will-change: transform; +} +.pointerlockfswarning[onscreen] { + transform: translate(-50%, 50px); +} +.pointerlockfswarning[ontop] { + /* Use -10px to hide the border and border-radius on the top */ + transform: translate(-50%, -10px); +} +:root[OSXLionFullscreen] .pointerlockfswarning[ontop] { + transform: translate(-50%, 80px); +} + +.pointerlockfswarning-domain-text, +.pointerlockfswarning-generic-text { + word-wrap: break-word; + /* We must specify a min-width, otherwise word-wrap:break-word doesn't work. Bug 630864. */ + min-width: 1px +} +.pointerlockfswarning-domain-text:not([hidden]) + .pointerlockfswarning-generic-text { + display: none; +} + +#fullscreen-exit-button { + pointer-events: auto; +} + +/* notification anchors should only be visible when their associated + notifications are */ +#nav-bar:not([keyNav=true]) .notification-anchor-icon { + -moz-user-focus: normal; +} + +#blocked-permissions-container > .blocked-permission-icon:not([showing]), +.notification-anchor-icon:not([showing]) { + display: none; +} + +#invalid-form-popup > description { + max-width: 280px; +} + +.popup-anchor { + /* should occupy space but not be visible */ + opacity: 0; + pointer-events: none; + position: absolute; +} + +browser[tabmodalPromptShowing], browser[tabDialogShowing] { + -moz-user-focus: none !important; +} + +/* Status panel */ + +#statuspanel { + display: block; + position: fixed; + margin-top: -3em; + max-width: calc(100% - 5px); + pointer-events: none; +} + +#statuspanel[mirror] { + inset-inline-start: auto; + inset-inline-end: 0; +} + +#statuspanel[sizelimit] { + max-width: 50%; +} + +#statuspanel[type=status] { + min-width: 23em; +} + +@media all and (max-width: 800px) { + #statuspanel[type=status] { + min-width: 33%; + } +} + +#statuspanel[type=overLink] { + transition: opacity 120ms ease-out, visibility 120ms; +} + +#statuspanel:is([type=overLink], [inactive][previoustype=overLink]) > #statuspanel-inner { + direction: ltr; +} + +#statuspanel[inactive] { + transition: none; + opacity: 0; + visibility: hidden; +} + +#statuspanel[inactive][previoustype=overLink] { + transition: opacity 200ms ease-out, visibility 200ms; +} + +#statuspanel-inner { + height: 3em; + width: 100%; + -moz-box-align: end; +} + +/*** Visibility of downloads indicator controls ***/ + +/* Bug 924050: If we've loaded the indicator, for now we hide it in the menu panel, + and just show the icon. This is a hack to side-step very weird layout bugs that + seem to be caused by the indicator stack interacting with the menu panel. */ +#downloads-button[indicator]:not([cui-areatype="menu-panel"]) > .toolbarbutton-badge-stack > image.toolbarbutton-icon, +#downloads-button[indicator][cui-areatype="menu-panel"] > .toolbarbutton-badge-stack > #downloads-indicator-anchor { + display: none; +} + +toolbarpaletteitem[place="palette"] > #downloads-button[indicator] > .toolbarbutton-badge-stack > image.toolbarbutton-icon { + display: -moz-box; +} + +toolbarpaletteitem[place="palette"] > #downloads-button[indicator] > .toolbarbutton-badge-stack > #downloads-indicator-anchor { + display: none; +} + +/* Combobox dropdown renderer */ +#ContentSelectDropdown > menupopup { + /* The menupopup itself should always be rendered LTR to ensure the scrollbar aligns with + * the dropdown arrow on the dropdown widget. If a menuitem is RTL, its style will be set accordingly */ + direction: ltr; +} + +#ContentSelectDropdown > menupopup::part(arrowscrollbox-scrollbox) { + scrollbar-width: var(--content-select-scrollbar-width, auto); +} + +/* Indent options in optgroups */ +.contentSelectDropdown-ingroup .menu-iconic-text { + padding-inline-start: 2em; +} + +/* Give this menupopup an arrow panel styling */ +#BMB_bookmarksPopup { + appearance: none; + background: transparent; + border: none; + /* The popup inherits -moz-image-region from the button, must reset it */ + -moz-image-region: auto; +} + +@supports -moz-bool-pref("xul.panel-animations.enabled") { +@media (prefers-reduced-motion: no-preference) { +%ifdef MOZ_WIDGET_COCOA + /* On Mac, use the properties "-moz-window-transform" and "-moz-window-opacity" + instead of "transform" and "opacity" for these animations. + The -moz-window* properties apply to the whole window including the window's + shadow, and they don't affect the window's "shape", so the system doesn't + have to recompute the shadow shape during the animation. This makes them a + lot faster. In fact, Gecko no longer triggers shadow shape recomputations + for repaints. + These properties are not implemented on other platforms. */ + #BMB_bookmarksPopup:not([animate="false"]) { + transition-property: -moz-window-transform, -moz-window-opacity; + transition-duration: 0.18s, 0.18s; + transition-timing-function: + var(--animation-easing-function), ease-out; + } + + /* Only do the fade-in animation on pre-Big Sur to avoid missing shadows on + * Big Sur, see bug 1672091. */ + @media (-moz-mac-big-sur-theme: 0) { + #BMB_bookmarksPopup:not([animate="false"]) { + -moz-window-opacity: 0; + -moz-window-transform: translateY(-70px); + } + + #BMB_bookmarksPopup[side="bottom"]:not([animate="false"]) { + -moz-window-transform: translateY(70px); + } + } + + /* [animate] is here only so that this rule has greater specificity than the + * rule right above */ + #BMB_bookmarksPopup[animate][animate="open"] { + -moz-window-opacity: 1.0; + transition-duration: 0.18s, 0.18s; + -moz-window-transform: none; + transition-timing-function: + var(--animation-easing-function), ease-in-out; + } + + #BMB_bookmarksPopup[animate][animate="cancel"] { + -moz-window-opacity: 0; + -moz-window-transform: none; + } +%else + #BMB_bookmarksPopup:not([animate="false"]) { + opacity: 0; + transform: translateY(-70px); + transition-property: transform, opacity; + transition-duration: 0.18s, 0.18s; + transition-timing-function: + var(--animation-easing-function), ease-out; + } + + #BMB_bookmarksPopup[side="bottom"]:not([animate="false"]) { + transform: translateY(70px); + } + + /* [animate] is here only so that this rule has greater specificity than the + * rule right above */ + #BMB_bookmarksPopup[animate][animate="open"] { + opacity: 1.0; + transition-duration: 0.18s, 0.18s; + transform: none; + transition-timing-function: + var(--animation-easing-function), ease-in-out; + } + + #BMB_bookmarksPopup[animate][animate="cancel"] { + transform: none; + } +%endif +} +} + +/* Apply crisp rendering for favicons at exactly 2dppx resolution */ +@media (resolution: 2dppx) { + .PanelUI-remotetabs-clientcontainer > toolbarbutton > .toolbarbutton-icon, + #PanelUI-recentlyClosedWindows > toolbarbutton > .toolbarbutton-icon, + #PanelUI-recentlyClosedTabs > toolbarbutton > .toolbarbutton-icon, + #PanelUI-historyItems > toolbarbutton > .toolbarbutton-icon { + image-rendering: -moz-crisp-edges; + } +} + +#customization-container { + -moz-box-orient: horizontal; + flex-direction: column; +} + +#customization-container:not([hidden]) { + /* In a separate rule to avoid 'display:flex' causing the node to be + * displayed while the container is still hidden. */ + display: flex; +} + +#customization-content-container { + display: flex; + flex-grow: 1; /* Grow so there isn't empty space below the footer */ + min-height: 0; /* Allow this to shrink so the footer doesn't get pushed out. */ +} + +#customization-panelHolder { + padding-top: 10px; + padding-bottom: 10px; +} + +#customization-panelHolder > #widget-overflow-fixed-list { + flex: 1 1 auto; /* Grow within the available space, and allow ourselves to shrink */ + display: flex; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; +} + +#customization-panelWrapper, +#customization-panelWrapper > .panel-arrowcontent, +#customization-panelHolder { + flex-direction: column; + display: flex; + min-height: calc(174px + 9em); +} + +#customization-panelWrapper { + flex: 1 1 auto; + height: 0; /* Don't let my contents affect ancestors' content-based sizing */ + align-items: end; /* align to the end on the cross-axis (affects arrow) */ +} + +#customization-panelWrapper, +#customization-panelWrapper > .panel-arrowcontent { + -moz-box-flex: 1; +} + +#customization-panel-container { + overflow-y: auto; + display: flex; + flex-direction: column; + flex: none; +} + +toolbarpaletteitem[dragover] { + border-inline-color: transparent; +} + +#customization-palette-container { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +#customization-palette:not([hidden]) { + display: block; + flex: 1 1 auto; + overflow: auto; + min-height: 3em; +} + +#customization-footer-spacer, +#customization-spacer { + flex: 1 1 auto; +} + +#customization-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; +} + +#customization-toolbar-visibility-button > .box-inherit > .button-menu-dropmarker { + display: -moz-box; +} + +toolbarpaletteitem[place="palette"] { + -moz-box-orient: vertical; + width: 7em; + max-width: 7em; + /* icon (16) + margin (9 + 12) + 3 lines of text: */ + height: calc(39px + 3em); + margin-bottom: 5px; + margin-inline-end: 24px; + overflow: visible; + display: inline-block; + vertical-align: top; +} + +toolbarpaletteitem[place="palette"][hidden] { + display: none; +} + +toolbarpaletteitem > toolbarbutton, +toolbarpaletteitem > toolbaritem { + /* Prevent children from getting events */ + pointer-events: none; + -moz-box-pack: center; +} + +:root[customizing=true] .addon-banner-item, +:root[customizing=true] .panel-banner-item { + display: none; +} + +/* UI Tour */ + +@keyframes uitour-wobble { + from { + transform: rotate(0deg) translateX(3px) rotate(0deg); + } + 50% { + transform: rotate(360deg) translateX(3px) rotate(-360deg); + } + to { + transform: rotate(720deg) translateX(0px) rotate(-720deg); + } +} + +@keyframes uitour-zoom { + from { + transform: scale(0.8); + } + 50% { + transform: scale(1.0); + } + to { + transform: scale(0.8); + } +} + +@keyframes uitour-color { + from { + border-color: #5B9CD9; + } + 50% { + border-color: #FF0000; + } + to { + border-color: #5B9CD9; + } +} + +#UITourHighlightContainer, +#UITourHighlight { + pointer-events: none; +} + +#UITourHighlight[active] { + animation-delay: 2s; + animation-fill-mode: forwards; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +#UITourHighlight[active="wobble"] { + animation-name: uitour-wobble; + animation-delay: 0s; + animation-duration: 1.5s; + animation-iteration-count: 1; +} +#UITourHighlight[active="zoom"] { + animation-name: uitour-zoom; + animation-duration: 1s; +} +#UITourHighlight[active="color"] { + animation-name: uitour-color; + animation-duration: 2s; +} + +/* Combined context-menu items */ +#context-navigation > .menuitem-iconic > .menu-iconic-text, +#context-navigation > .menuitem-iconic > .menu-accel-container { + display: none; +} + +.popup-notification-invalid-input { + box-shadow: 0 0 1.5px 1px red; +} + +.popup-notification-invalid-input[focused] { + box-shadow: 0 0 2px 2px rgba(255,0,0,0.4); +} + +.popup-notification-description[popupid=webauthn-prompt-register-direct] { + white-space: pre-line; +} + +.dragfeedback-tab { + appearance: none; + opacity: 0.65; + -moz-window-shadow: none; +} + +/* Page action panel */ +#pageAction-panel-sendToDevice-subview-body:not([state="notready"]) > .pageAction-sendToDevice-notReady, +#pageAction-urlbar-sendToDevice-subview-body:not([state="notready"]) > .pageAction-sendToDevice-notReady { + display: none; +} + +/* Page action buttons */ +.pageAction-panel-button > .toolbarbutton-icon { + list-style-image: var(--pageAction-image-16px, inherit); +} +.urlbar-page-action { + list-style-image: var(--pageAction-image-16px, inherit); +} +@media (min-resolution: 1.1dppx) { + .pageAction-panel-button > .toolbarbutton-icon { + list-style-image: var(--pageAction-image-32px, inherit); + } + .urlbar-page-action { + list-style-image: var(--pageAction-image-32px, inherit); + } +} + +/* Page action context menu */ +#pageActionContextMenu > .pageActionContextMenuItem { + visibility: collapse; +} +#pageActionContextMenu[state=builtInPinned] > .pageActionContextMenuItem.builtInPinned, +#pageActionContextMenu[state=builtInUnpinned] > .pageActionContextMenuItem.builtInUnpinned, +#pageActionContextMenu[state=extensionPinned] > .pageActionContextMenuItem.extensionPinned, +#pageActionContextMenu[state=extensionUnpinned] > .pageActionContextMenuItem.extensionUnpinned { + visibility: visible; +} + +/* Print pending */ +.printSettingsBrowser { + width: 250px !important; +} + +.previewStack { + background-color: #f9f9fa; + color: #0c0c0d; +} + +.previewRendering { + background-image: url("chrome://browser/skin/tabbrowser/pendingpaint.png"); + background-repeat: no-repeat; + background-size: 60px 60px; + background-position: center center; + display: flex; + align-items: center; + justify-content: center; + visibility: hidden; +} + +.previewStack[rendering=true] > .previewRendering { + visibility: visible; +} + +.printPreviewBrowser { + display: none; + opacity: 1; + transition: opacity 60ms; +} + +.previewStack[previewtype="primary"] > .printPreviewBrowser[previewtype="primary"], +.previewStack[previewtype="selection"] > .printPreviewBrowser[previewtype="selection"] { + display: block; +} + +.previewStack[rendering=true] > .printPreviewBrowser { + opacity: 0; + transition: opacity 1ms 250ms; +} + +.print-pending-label { + margin-top: 110px; + font-size: large; +} + +printpreview-pagination { + opacity: 0; + transition: opacity 100ms 500ms; +} +printpreview-pagination:focus-within, +.previewStack:hover > printpreview-pagination { + opacity: 1; + transition: opacity 100ms; +} +.previewStack[rendering=true] > printpreview-pagination { + opacity: 0; +} + +@media (prefers-color-scheme: dark) { + .previewStack { + background-color: #2A2A2E; + color: rgb(249, 249, 250); + } +} + +/* WebExtension Sidebars */ +#sidebar-box[sidebarcommand$="-sidebar-action"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon { + list-style-image: var(--webextension-menuitem-image, inherit); + -moz-context-properties: fill; + fill: currentColor; + width: 16px; + height: 16px; +} + +@media (min-resolution: 1.1dppx) { + #sidebar-box[sidebarcommand$="-sidebar-action"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon { + list-style-image: var(--webextension-menuitem-image-2x, inherit); + } +} + +toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop { + -moz-user-focus: normal; +} + +/* Frame used for rendering the DevTools inspector highlighters */ +:root > iframe.devtools-highlighter-renderer { + border: none; + pointer-events: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 2; +} + +/** + * Tab Dialogs + */ + +.dialogStack { + /* Should outrank the z-index values of other UI elements, particularly the devtools + splitter element. */ + z-index: 2; +} + +.dialogStack.temporarilyHidden { + /* For some printing use cases we need to visually hide the dialog before + * actually closing it / make it disappear from the frame tree. */ + visibility: hidden; +} + +.dialogOverlay { + visibility: hidden; +} + +.dialogOverlay[topmost="true"] { + background-color: rgba(0,0,0,0.5); + z-index: 1; +} + +.dialogBox { + background-clip: content-box; + box-shadow: 0 2px 6px 0 rgba(0,0,0,0.3); + display: -moz-box; + margin: 0; + /* Make dialogs overlap with upper chrome UI */ + margin-top: -5px; + padding: 0; + overflow-x: auto; +} + +.dialogBox[resizable="true"] { + resize: both; + overflow: hidden; + min-height: 20em; + min-width: 66ch; +} + +.dialogBox[sizeto="available"] { + --box-inline-margin: 4px; + --box-block-margin: 4px; + --box-ideal-width: 1000; + --box-ideal-height: 650; + --box-max-width-margin: calc(100vw - 2 * var(--box-inline-margin)); + --box-max-height-margin: calc(100vh - var(--box-top-px) - var(--box-block-margin)); + --box-max-width-ratio: 70vw; + --box-max-height-ratio: calc(var(--box-ideal-height) / var(--box-ideal-width) * var(--box-max-width-ratio)); + max-width: min(max(var(--box-ideal-width) * 1px, var(--box-max-width-ratio)), var(--box-max-width-margin)); + max-height: min(max(var(--box-ideal-height) * 1px, var(--box-max-height-ratio)), var(--box-max-height-margin)); + width: 100vw; + height: 100vh; +} + +@media (min-width: 550px) { + .dialogBox[sizeto="available"] { + --box-inline-margin: min(calc(4px + (100vw - 550px) / 4), 16px); + } +} + +@media (min-width: 800px) { + .dialogBox[sizeto="available"] { + --box-inline-margin: min(calc(16px + (100vw - 800px) / 4), 32px); + } +} + +@media (min-height: 350px) { + .dialogBox[sizeto="available"] { + --box-block-margin: min(calc(4px + (100vh - 350px) / 4), 16px); + } +} + +@media (min-height: 550px) { + .dialogBox[sizeto="available"] { + --box-block-margin: min(calc(16px + (100vh - 550px) / 4), 32px); + } +} + +.dialogFrame { + margin: 0; + -moz-box-flex: 1; + /* Default dialog dimensions */ + width: 66ch; +} + +.content-prompt-dialog > .dialogOverlay { + display: grid; + place-content: center; +} + +/** + * End Tab Dialogs + */ |