tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

preferences.css (31933B)


      1 /* - This Source Code Form is subject to the terms of the Mozilla Public
      2   - License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3   - You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 @namespace html "http://www.w3.org/1999/xhtml";
      6 
      7 /* Global rules */
      8 :root {
      9  /**
     10   * Headings are currently 1 level higher than they should be. Eventually
     11   * "Settings" will become our h1 and everything will drop down a level so our
     12   * h1s become h2s, h2s become h3s, etc.
     13   */
     14  --heading-font-size-xlarge: var(--font-size-xlarge);
     15  --heading-font-size-large: var(--font-size-large);
     16  --heading-font-size-medium: var(--font-size-medium);
     17  --select-max-width: 20rem;
     18  user-select: text;
     19 }
     20 
     21 #preferences-root {
     22  text-rendering: optimizeLegibility;
     23 }
     24 
     25 @media not print {
     26  #preferences-root,
     27  #preferences-body {
     28    height: 100%;
     29    overflow: hidden;
     30  }
     31 }
     32 
     33 #preferences-root,
     34 #preferences-body {
     35  margin: 0;
     36  padding: 0;
     37  width: 100%;
     38 }
     39 
     40 #preferences-body {
     41  vertical-align: top; /* See bug 1606130 */
     42  display: flex;
     43  flex-direction: column;
     44 }
     45 
     46 /*
     47  The stack has some very tall content but it shouldn't be taller than the
     48  viewport (and we know the tall content will still be accessible via scrollbars
     49  regardless if the stack has a shorter height). So we use min-height: 0 to allow
     50  the stack to be smaller than its content height so it can fit the viewport size.
     51 */
     52 #preferences-stack {
     53  min-height: 0;
     54 }
     55 
     56 .main-content {
     57  padding-top: 0;
     58  /* the 32px min-height, plus 20+30px margin below, plus some leeway: */
     59  scroll-padding-top: 90px;
     60  contain: inline-size;
     61 }
     62 
     63 .pane-container {
     64  /* A workaround to keep the container always float on the `top: 0` (Bug 1377009) */
     65  display: block;
     66  width: min(100%, var(--page-main-content-width));
     67  min-width: min-content;
     68 }
     69 
     70 #mainPrefPane {
     71  width: 100%;
     72  /* at some point we'll end up removing the sticky element using z-index above this that cuts off the top of the focus outline in https://bugzilla.mozilla.org/show_bug.cgi?id=1867385, but we're adding padding intentionally until then */
     73  padding: calc(var(--focus-outline-offset) + var(--focus-outline-width)) 0 0;
     74 }
     75 
     76 html|div[data-category],
     77 groupbox[data-category],
     78 setting-group[data-category] {
     79  margin: 0 0 32px;
     80 }
     81 
     82 html|h1 {
     83  margin: 0 0 var(--space-small);
     84 }
     85 
     86 html|h2 {
     87  margin: var(--space-small) 0 var(--space-xxsmall) 0;
     88 }
     89 
     90 description.indent,
     91 .indent:not(#browserPrivateEngineSelection) > description {
     92  color: var(--text-color-deemphasized);
     93 
     94  /* Ensures margin on checkboxes, radios, and description don't create a big gap between the input and indented description */
     95  margin-top: calc(var(--space-xsmall) * -1);
     96 }
     97 
     98 button,
     99 treecol,
    100 menulist,
    101 html|select {
    102  /* override the root rule */
    103  user-select: none;
    104 }
    105 
    106 /* Buttons get a default min-width in XUL. When they also have flex, they will
    107 * be large enough anyway, and we don't want them to become smaller than their inner
    108 * text which would then overflow the button. Set min-width back to auto for that:
    109 */
    110 button[flex] {
    111  min-width: auto;
    112 }
    113 
    114 description,
    115 label {
    116  margin: var(--space-xxsmall) 0;
    117 }
    118 
    119 label {
    120  margin: var(--space-xxsmall) 0;
    121 
    122  &.tail-with-learn-more + a {
    123    margin-block: var(--space-xxsmall);
    124    margin-inline: var(--space-small) 0;
    125  }
    126 }
    127 
    128 .description-deemphasized {
    129  color: var(--text-color-deemphasized);
    130 }
    131 
    132 .tip-caption {
    133  font-size: 0.9em;
    134  color: var(--text-color-deemphasized);
    135 }
    136 
    137 menulist::part(label),
    138 menuitem > label,
    139 button > hbox > label {
    140  line-height: unset;
    141 }
    142 
    143 .indent {
    144  margin-inline-start: calc(var(--checkbox-size) + var(--checkbox-margin-inline)) !important;
    145 }
    146 
    147 checkbox,
    148 radio {
    149  margin: var(--space-small) 0;
    150 
    151  &.tail-with-learn-more + a {
    152    margin-block: var(--space-small);
    153    margin-inline: var(--space-small) 0;
    154  }
    155 }
    156 
    157 /* Add a bit of space to the end of descriptions to
    158 * leave margin with e.g. additional buttons on the side. */
    159 .description-with-side-element {
    160  margin-inline-end: 10px !important;
    161 }
    162 
    163 .learnMore {
    164  margin-inline-start: 0;
    165  font-weight: normal;
    166  white-space: nowrap;
    167 }
    168 
    169 .accessory-button {
    170  min-width: 150px;
    171  margin: 4px 0;
    172 }
    173 
    174 .spotlight {
    175  background-color: color-mix(in srgb, var(--color-accent-primary) 15%, transparent);
    176  outline: var(--border-color-selected) 1px dotted;
    177  animation: fade-out 0.5s ease-out 2s forwards;
    178  /* Show the border to spotlight the components in high-contrast mode. */
    179  border: 1px solid transparent;
    180  border-radius: var(--border-radius-xsmall);
    181 }
    182 
    183 @keyframes fade-out {
    184  100% {
    185    background-color: transparent;
    186    outline-color: transparent;
    187  }
    188 }
    189 
    190 [data-subcategory] {
    191  margin-inline: -4px;
    192  padding-inline: 4px;
    193 }
    194 
    195 .ac-site-icon {
    196  display: flex;
    197 }
    198 
    199 /* Subcategory title */
    200 
    201 /**
    202 * The first subcategory title for each category should not have margin-top.
    203 */
    204 
    205 .subcategory:not([hidden]) ~ .subcategory {
    206  padding-top: var(--space-xxlarge);
    207  border-top: 1px solid var(--border-color);
    208 }
    209 
    210 /* Category List */
    211 
    212 #categories {
    213  overflow: visible;
    214  min-height: auto;
    215  padding: 1px; /* Adding padding around richlistitem in order to make entire keyboard focusing outline visible */
    216 }
    217 
    218 #category-general > .category-icon {
    219  list-style-image: url("chrome://browser/skin/preferences/category-general.svg");
    220 }
    221 
    222 #category-home > .category-icon {
    223  list-style-image: url("chrome://browser/skin/home.svg");
    224 }
    225 
    226 #category-search > .category-icon {
    227  list-style-image: url("chrome://browser/skin/preferences/category-search.svg");
    228 }
    229 
    230 #category-privacy > .category-icon {
    231  list-style-image: url("chrome://browser/skin/preferences/category-privacy-security.svg");
    232 }
    233 
    234 #category-sync > .category-icon {
    235  list-style-image: url("chrome://browser/skin/preferences/category-sync.svg");
    236 }
    237 
    238 #category-ai-features > .category-icon {
    239  list-style-image: url("chrome://global/skin/icons/highlights.svg");
    240 }
    241 
    242 #category-experimental > .category-icon {
    243  list-style-image: url("chrome://global/skin/icons/experiments.svg");
    244 }
    245 
    246 #category-more-from-mozilla > .category-icon {
    247  list-style-image: url("chrome://browser/skin/preferences/mozilla-logo.svg");
    248 }
    249 
    250 /* All panes */
    251 
    252 .info-icon,
    253 .androidIcon,
    254 .iOSIcon {
    255  -moz-context-properties: fill;
    256  fill: currentColor;
    257 }
    258 
    259 /* General Pane */
    260 
    261 /* stylelint-disable-next-line media-query-no-invalid */
    262 @media not -moz-pref("browser.migrate.preferences-entrypoint.enabled") {
    263  #dataMigrationGroup {
    264    display: none;
    265  }
    266 }
    267 
    268 .extension-controlled {
    269  margin-block: 18px;
    270 }
    271 
    272 .extension-controlled-icon {
    273  height: var(--icon-size-medium);
    274  margin: 2px 0 6px;
    275  vertical-align: middle;
    276  width: var(--icon-size-medium);
    277  -moz-context-properties: fill;
    278  fill: currentColor;
    279 }
    280 
    281 .extension-controlled-disabled {
    282  -moz-context-properties: fill;
    283  color: GrayText;
    284  fill: currentColor;
    285 }
    286 
    287 .extension-controlled-disabled > .extension-controlled-button {
    288  display: none;
    289 }
    290 
    291 .extension-controlled-icon.close-icon {
    292  height: 30px;
    293  width: 30px;
    294  margin-inline-start: 5px;
    295 }
    296 
    297 #getStarted {
    298  font-size: 90%;
    299 }
    300 
    301 #colors {
    302  margin-inline-start: 5px;
    303 }
    304 
    305 #FontsDialog menulist:empty {
    306  /* When there's no menupopup, while the font builder is running,
    307   * the height of the menulist would otherwise shrink. This throws
    308   * off the height determination SubDialog.sys.mjs does, which then
    309   * leads to content being cut off. Fix by enforcing a minimum height
    310   * when there's no content: */
    311  min-height: max(32px, calc(1.4em + 16px));
    312 }
    313 
    314 #useDocumentColors {
    315  margin: 4px 0;
    316 }
    317 
    318 #activeLanguages > richlistitem {
    319  padding: 0.3em;
    320 }
    321 
    322 #updateBox {
    323  margin-block: 4px 32px;
    324 }
    325 
    326 /* Work around bug 560067 - animated images in visibility: hidden
    327 * still eat CPU. */
    328 #updateDeck > *:not(.deck-selected) > .update-throbber {
    329  display: none;
    330 }
    331 
    332 #updateDeck > hbox > button {
    333  margin-block: 0;
    334  margin-inline-end: 0;
    335 }
    336 
    337 #updateDeck > hbox > label {
    338  flex: 1;
    339  margin-inline-end: 5px !important;
    340 }
    341 
    342 .manualLink {
    343  margin-inline-start: 6px !important;
    344 }
    345 
    346 #updateRadioGroup > radio {
    347  min-height: 30px;
    348  margin: 2px 0;
    349 }
    350 
    351 #filter {
    352  flex: 1;
    353  margin: 4px 0 8px;
    354 }
    355 
    356 #handlersView {
    357  height: 25em;
    358  margin-inline-end: 0;
    359 }
    360 
    361 #handlersView > richlistitem {
    362  min-height: 30px;
    363 }
    364 
    365 #handlersView .actionsMenu {
    366  margin: 0;
    367  min-height: 0;
    368  padding: 0;
    369  border: none;
    370  padding-inline-end: 8px;
    371 }
    372 
    373 #handlersView .actionsMenu::part(label) {
    374  margin: 0;
    375 }
    376 
    377 .typeIcon,
    378 .actionIcon,
    379 .actionsMenu::part(icon) {
    380  height: 16px;
    381  width: 16px;
    382 }
    383 
    384 .typeIcon {
    385  margin-inline: 10px 9px !important;
    386  &:not([srcset]) {
    387    visibility: hidden;
    388  }
    389 }
    390 
    391 #handlersView .actionsMenu::part(icon),
    392 .actionIcon {
    393  margin-inline: 11px 8px !important;
    394 }
    395 
    396 .actionsMenu > menupopup > menuitem {
    397  padding-inline-start: 10px !important;
    398 }
    399 
    400 .actionsMenu > menupopup > menuitem > .menu-icon {
    401  margin-inline-end: 8px !important;
    402 }
    403 
    404 /* Increase the specifity to override common.inc.css */
    405 richlistitem[selected] .actionsMenu:focus-visible {
    406  outline-offset: -3px;
    407 }
    408 
    409 /* Home Pane */
    410 
    411 #homepageGroup menulist,
    412 #homepageGroup html|input {
    413  margin: var(--space-xsmall) 0;
    414 }
    415 
    416 #homepageGroup html|input {
    417  text-align: match-parent;
    418 }
    419 
    420 #homepageGroup:-moz-locale-dir(rtl) html|input {
    421  unicode-bidi: plaintext;
    422 }
    423 
    424 #homepageAndNewWindowsOption {
    425  margin-top: 20px;
    426 }
    427 
    428 #homepageGroup:-moz-locale-dir(rtl) panel[type="autocomplete-richlistbox"] {
    429  direction: rtl;
    430 }
    431 
    432 .homepage-buttons > .homepage-button {
    433  flex: 1 auto;
    434 }
    435 
    436 .homepage-button:first-of-type {
    437  margin-inline-start: 0;
    438 }
    439 
    440 .homepage-button:last-of-type {
    441  margin-inline-end: 0;
    442 }
    443 
    444 #homeContentsGroup .checkbox-icon[src] {
    445  -moz-context-properties: fill;
    446  fill: currentColor;
    447  margin-inline-end: var(--checkbox-margin-inline);
    448  width: 16px;
    449 }
    450 
    451 #homeContentsGroup > [data-subcategory] {
    452  margin-top: 14px;
    453 }
    454 
    455 #homeContentsGroup > [data-subcategory] .section-checkbox {
    456  font-weight: var(--font-weight-semibold);
    457 }
    458 
    459 #homeContentsGroup > [data-subcategory] > vbox menulist {
    460  margin-block: 0;
    461 }
    462 
    463 /* Align fix for prefs that have a text link in the headline */
    464 #homeContentsGroup > [data-subcategory] > hbox {
    465  align-items: last baseline;
    466 }
    467 
    468 #homeContentsGroup .checkbox-label {
    469  margin-inline-end: var(--space-small);
    470 }
    471 
    472 a[is="moz-support-link"]:not(.sidebar-footer-link, [hidden]) {
    473  display: inline-block;
    474  white-space: initial;
    475 }
    476 
    477 /* Search Pane */
    478 
    479 #engineList {
    480  margin: 2px 0 5px;
    481 }
    482 
    483 #engineList > treechildren::-moz-tree-image(engineShown, checked),
    484 #blocklistsTree > treechildren::-moz-tree-image(selectionCol, checked) {
    485  list-style-image: url("chrome://global/skin/icons/check.svg");
    486  -moz-context-properties: fill, stroke;
    487  fill: var(--color-accent-primary);
    488 }
    489 
    490 #engineList > treechildren::-moz-tree-image(engineShown, checked, selected),
    491 #blocklistsTree > treechildren::-moz-tree-image(selectionCol, checked, selected) {
    492  fill: var(--text-color-accent-primary-selected);
    493  stroke: var(--color-accent-primary-selected);
    494 }
    495 
    496 @media (forced-colors) {
    497  #engineList > treechildren::-moz-tree-image(hover),
    498  #blocklistsTree > treechildren::-moz-tree-image(hover) {
    499    fill: var(--text-color-list-item-hover);
    500    /* fill allows icon and text colors, but we have no such rules for stroke */
    501    /* stylelint-disable-next-line stylelint-plugin-mozilla/no-non-semantic-token-usage */
    502    stroke: var(--background-color-list-item-hover);
    503  }
    504 }
    505 
    506 #engineList > treechildren::-moz-tree-row,
    507 #blocklistsTree > treechildren::-moz-tree-row {
    508  min-height: 36px;
    509 }
    510 
    511 #selectionCol {
    512  min-width: 26px;
    513 }
    514 
    515 #addEnginesBox {
    516  margin: 4px 0 0;
    517 }
    518 
    519 /* Privacy Pane */
    520 
    521 #allowSmartSize {
    522  margin-block: 0 4px;
    523 }
    524 
    525 #historyPane {
    526  margin-top: 4px;
    527 }
    528 
    529 #historyButtons {
    530  display: flex;
    531  flex-direction: column;
    532  justify-content: space-between;
    533 }
    534 
    535 #blockCookies,
    536 #keepRow {
    537  margin-top: 1.5em;
    538 }
    539 
    540 /* Collapse the non-active vboxes in decks to use only the height the
    541   active vbox needs */
    542 #historyPane:not([selectedIndex="1"]) > #historyDontRememberPane,
    543 #historyPane:not([selectedIndex="2"]) > #historyCustomPane,
    544 #weavePrefsDeck:not([selectedIndex="1"]) > #hasFxaAccount,
    545 #fxaLoginStatus:not([selectedIndex="1"]) > #fxaLoginUnverified,
    546 #fxaLoginStatus:not([selectedIndex="2"]) > #fxaLoginRejected {
    547  visibility: collapse;
    548 }
    549 
    550 #tabsElement {
    551  margin-inline-end: 4px; /* add the 4px end-margin of other elements */
    552 }
    553 
    554 .text-link {
    555  margin-bottom: 0;
    556 }
    557 
    558 .text-link[disabled] {
    559  pointer-events: none;
    560 }
    561 
    562 html|label[disabled] {
    563  /* This matches XUL checkbox.css - but for HTML labels for HTML inputs we
    564   * need to do this ourselves. */
    565  opacity: 0.4;
    566 }
    567 
    568 #showUpdateHistory {
    569  margin-inline-start: 0;
    570 }
    571 
    572 @media (-moz-platform: windows) {
    573  #windows-sso,
    574  #windows-sso-caption {
    575    display: none;
    576  }
    577 }
    578 
    579 /**
    580 * Dialog
    581 */
    582 
    583 .dialogOverlay {
    584  visibility: hidden;
    585 }
    586 
    587 html|dialog {
    588  padding: var(--space-xlarge);
    589 }
    590 
    591 html|dialog::backdrop,
    592 .dialogOverlay[topmost="true"] {
    593  background-color: var(--background-color-overlay);
    594 }
    595 
    596 html|dialog,
    597 .dialogBox {
    598  border: 1px solid transparent;
    599  border-radius: var(--border-radius-medium);
    600  box-shadow: var(--box-shadow-popup);
    601 }
    602 
    603 .dialogBox {
    604  background-color: var(--background-color-canvas);
    605  background-clip: content-box;
    606  color: var(--text-color);
    607  /* `transparent` will use the dialogText color in high-contrast themes and
    608     when page colors are disabled */
    609  display: flex;
    610  margin: 0;
    611  padding: 0;
    612  overflow-x: auto;
    613 }
    614 
    615 @media (prefers-color-scheme: dark) {
    616  @media not (forced-colors) {
    617    html|dialog,
    618    .dialogBox {
    619      --background-color-canvas: #42414d;
    620    }
    621  }
    622 }
    623 
    624 .dialogBox[resizable="true"] {
    625  resize: both;
    626  overflow: hidden;
    627  min-height: 20em;
    628  min-width: 66ch;
    629 }
    630 
    631 .dialogTitleBar {
    632  padding: 0.4em 0.2em;
    633  border-bottom: 1px solid var(--border-color);
    634 }
    635 
    636 .dialogTitle {
    637  font-weight: var(--heading-font-weight);
    638  text-align: center;
    639  user-select: none;
    640 }
    641 
    642 .fxaPairDeviceIcon {
    643  background-image: url("chrome://browser/content/logos/fxa-logo.svg");
    644  background-position: center center;
    645  background-repeat: no-repeat;
    646  position: relative;
    647  height: 80px;
    648  padding-top: 42px;
    649  margin-top: -40px;
    650 }
    651 
    652 .fxaPairDeviceIcon .close-icon {
    653  margin-top: 10px;
    654 }
    655 
    656 .close-icon {
    657  border: none;
    658  background-color: transparent; /* override common.css, but keep hover/active states */
    659  min-width: 0;
    660  min-height: auto;
    661  width: var(--icon-size-medium);
    662  height: var(--icon-size-medium);
    663  padding: 0;
    664  margin-inline: 0 8px;
    665 }
    666 
    667 .dialogFrame {
    668  margin: 10px;
    669  flex: 1;
    670  /* Default dialog dimensions */
    671  min-width: 66ch;
    672 }
    673 
    674 /**
    675 * End Dialog
    676 */
    677 
    678 /**
    679 * Font group and font dialog menulist fixes
    680 */
    681 
    682 #font-chooser-group {
    683  display: grid;
    684  grid-template-columns: max-content 1fr max-content max-content;
    685 }
    686 
    687 #defaultFont {
    688  flex: 1 25ch;
    689 }
    690 
    691 #defaultFontType,
    692 #serif,
    693 #sans-serif,
    694 #monospace {
    695  width: 0; /* Might be able to be removed */
    696  min-width: 30ch;
    697 }
    698 
    699 /**
    700 * Sync
    701 */
    702 
    703 .fxaProfileImage {
    704  width: 80px;
    705  height: 80px;
    706  border-radius: var(--border-radius-circle);
    707  border: 1px solid transparent;
    708  list-style-image: url(chrome://browser/skin/fxa/avatar-color.svg);
    709  margin-inline-end: var(--space-xlarge);
    710  -moz-user-focus: normal;
    711 }
    712 
    713 .fxaProfileImage.actionable {
    714  cursor: pointer;
    715 }
    716 
    717 .fxaProfileImage.actionable:hover {
    718  border-color: #0095dd;
    719 }
    720 
    721 .fxaProfileImage.actionable:hover:active {
    722  border-color: #ff9500;
    723 }
    724 
    725 #useFirefoxSync {
    726  font-size: 90%;
    727  margin-inline-end: 8px !important;
    728 }
    729 
    730 #fxaNoLoginStatus {
    731  margin-block: 46px 64px;
    732 }
    733 
    734 #fxaSyncComputerName {
    735  flex: 1;
    736  margin-block: 4px;
    737  margin-inline-start: 0;
    738 }
    739 
    740 #fxaChangeDeviceName {
    741  margin-block: 4px;
    742  margin-inline-end: 0;
    743 }
    744 
    745 #noFxaAccount > label:first-child {
    746  margin-bottom: 0.6em;
    747 }
    748 
    749 #noFxaCaption {
    750  margin-block: 0 4px;
    751 }
    752 
    753 button#noFxaSignIn {
    754  margin-inline-start: 8px;
    755 }
    756 
    757 #syncConfigured {
    758  --box-icon-start-fill: var(--icon-color-success);
    759 }
    760 
    761 #syncNotConfigured,
    762 #noFxaSignIn {
    763  --box-icon-start-fill: var(--icon-color-warning);
    764 }
    765 
    766 #syncSetup {
    767  white-space: nowrap;
    768 }
    769 
    770 #syncNow,
    771 #syncing {
    772  min-width: 150px;
    773 }
    774 
    775 .fxaSyncIllustration {
    776  list-style-image: url(chrome://browser/skin/fxa/sync-devices.svg);
    777  width: 312px;
    778  height: 136px;
    779 }
    780 
    781 #noFxaDescription {
    782  padding-inline-end: 52px;
    783 }
    784 
    785 .separator {
    786  border-bottom: 1px solid var(--border-color);
    787 }
    788 
    789 #fxaGroup {
    790  margin-bottom: 32px;
    791 }
    792 
    793 .openLink {
    794  cursor: pointer;
    795 }
    796 
    797 #fxaDisplayName {
    798  margin-inline-end: 10px !important;
    799 }
    800 
    801 .fxaLoginRejectedWarning {
    802  list-style-image: url(chrome://global/skin/icons/warning.svg);
    803  -moz-context-properties: fill;
    804  fill: #ffbf00;
    805  margin-inline: 4px 8px;
    806 }
    807 
    808 #fxaLoginVerified {
    809  --box-icon-size: calc(var(--icon-size-xlarge) * 2);
    810  --box-icon-border-radius: var(--border-radius-circle);
    811 
    812  &[description] {
    813    --box-label-alignment: end;
    814    --box-description-alignment: start;
    815  }
    816 }
    817 
    818 #syncStatusContainer {
    819  margin-top: 32px;
    820 }
    821 
    822 #syncChangeOptions {
    823  margin-inline-start: 0;
    824 }
    825 
    826 .sync-group {
    827  margin-block: var(--space-large);
    828  border: 1px solid var(--border-color);
    829 }
    830 
    831 .sync-configured {
    832  display: block;
    833 }
    834 
    835 .sync-info-box {
    836  border-radius: var(--border-radius-medium);
    837  padding: var(--space-large);
    838 }
    839 
    840 .sync-engines-list > div,
    841 .sync-engines-list + hbox {
    842  margin-top: 0;
    843  padding-top: var(--space-large);
    844 }
    845 
    846 dialog > .sync-engines-list > div,
    847 dialog > .sync-engines-list + hbox {
    848  padding-top: 0;
    849 }
    850 
    851 .sync-engines-list checkbox .checkbox-icon,
    852 .sync-engine-image {
    853  display: flex;
    854  margin-inline: 2px 8px;
    855  width: 16px;
    856  height: 16px;
    857  -moz-context-properties: fill;
    858  fill: currentColor;
    859  align-self: center;
    860 }
    861 
    862 .sync-engines-list checkbox {
    863  min-width: max-content;
    864  max-width: calc(50vw - 10px);
    865 }
    866 
    867 .sync-engines-list .checkbox-label-box {
    868  align-items: center;
    869 }
    870 
    871 .sync-engines-list {
    872  column-count: 3;
    873  column-fill: balance;
    874  margin-block-end: 10px;
    875 }
    876 
    877 .sync-engines-list > div:not([hidden]) {
    878  display: flex;
    879  break-inside: avoid;
    880 }
    881 
    882 .sync-engine-bookmarks .checkbox-icon,
    883 .sync-engine-bookmarks.sync-engine-image {
    884  list-style-image: url("chrome://browser/skin/bookmark.svg");
    885 }
    886 
    887 .sync-engine-history .checkbox-icon,
    888 .sync-engine-history.sync-engine-image {
    889  list-style-image: url("chrome://browser/skin/history.svg");
    890 }
    891 
    892 .sync-engine-tabs .checkbox-icon,
    893 .sync-engine-tabs.sync-engine-image {
    894  list-style-image: url("chrome://browser/skin/synced-tabs.svg");
    895 }
    896 
    897 .sync-engine-passwords .checkbox-icon,
    898 .sync-engine-passwords.sync-engine-image {
    899  list-style-image: url("chrome://browser/skin/login.svg");
    900 }
    901 
    902 .sync-engine-addons .checkbox-icon,
    903 .sync-engine-addons.sync-engine-image {
    904  list-style-image: url("chrome://mozapps/skin/extensions/extension.svg");
    905 }
    906 
    907 .sync-engine-prefs .checkbox-icon,
    908 .sync-engine-prefs.sync-engine-image {
    909  list-style-image: url("chrome://global/skin/icons/settings.svg");
    910 }
    911 
    912 .sync-engine-addresses .checkbox-icon,
    913 .sync-engine-addresses.sync-engine-image {
    914  list-style-image: url("chrome://formautofill/content/formfill-anchor.svg");
    915 }
    916 
    917 .sync-engine-creditcards .checkbox-icon,
    918 .sync-engine-creditcards.sync-engine-image {
    919  list-style-image: url("chrome://formautofill/content/icon-credit-card-generic.svg");
    920 }
    921 
    922 .fxaMobilePromo {
    923  margin-top: 2px !important;
    924  margin-bottom: var(--space-xxlarge);
    925 }
    926 
    927 .androidIcon,
    928 .iOSIcon {
    929  margin-inline: 2px 4px;
    930  width: var(--icon-size-medium);
    931  height: var(--icon-size-medium);
    932  vertical-align: text-bottom;
    933 }
    934 
    935 .update-throbber {
    936  width: 1.3em;
    937  min-height: 1.3em;
    938  margin-inline-end: 8px;
    939  content: url("chrome://global/skin/icons/loading.svg");
    940  -moz-context-properties: fill;
    941  fill: var(--color-accent-primary);
    942 }
    943 
    944 .navigation {
    945  overflow-x: hidden;
    946  overflow-y: auto;
    947  position: relative;
    948 }
    949 
    950 @media (prefers-reduced-motion) {
    951  /* Setting border-inline-end on .navigation makes it a focusable element */
    952  .navigation::after {
    953    content: "";
    954    width: 1px;
    955    height: 100%;
    956    /* stylelint-disable-next-line stylelint-plugin-mozilla/no-non-semantic-token-usage */
    957    background-color: var(--border-color);
    958    top: 0;
    959    inset-inline-end: 0;
    960    position: absolute;
    961  }
    962 }
    963 
    964 .face-sad::before {
    965  content: "\01F641";
    966  font-size: 1.3em;
    967  margin-inline-end: 8px;
    968 }
    969 
    970 .face-smile::before {
    971  content: "\01F600";
    972  font-size: 1.3em;
    973  margin-inline-end: 8px;
    974 }
    975 
    976 #policies-container,
    977 #searchInput {
    978  min-height: 32px;
    979  margin: 20px 0 30px;
    980 }
    981 
    982 #policies-container {
    983  margin-inline-end: var(--space-large);
    984  /* Make sure the container is at least the same height as the searchbox.
    985     This is needed in addition to the min-height above to make the info icon
    986     the same height as the first line in the policies label.
    987     Searchbox's height - line-height - border top and bottom */
    988  padding-block: max(0px, calc((32px - 1.8em - 2px) / 2));
    989 }
    990 
    991 .info-box-container {
    992  background-color: var(--background-color-box-info);
    993  padding: 9px;
    994  border: 1px solid transparent;
    995  border-radius: var(--border-radius-small);
    996 }
    997 
    998 .info-box-container.smaller-font-size {
    999  font-size: 85%;
   1000 }
   1001 
   1002 .info-icon-container {
   1003  display: flex;
   1004 }
   1005 
   1006 .info-icon {
   1007  content: url("chrome://global/skin/icons/info.svg");
   1008  width: 16px;
   1009  height: 16px;
   1010  margin-inline-end: 6px;
   1011  align-self: start;
   1012  margin-top: 0.4em;
   1013  flex-shrink: 0;
   1014 }
   1015 
   1016 .info-box-container.smaller-font-size .info-icon {
   1017  margin-top: 0.3em;
   1018 }
   1019 
   1020 .sticky-container {
   1021  position: sticky;
   1022  background-color: var(--background-color-canvas);
   1023  top: 0;
   1024  z-index: 1;
   1025  /* The sticky-container should have the capability to cover all spotlight area. */
   1026  width: calc(100% + 8px);
   1027  margin-inline: -4px;
   1028  padding-inline: 4px;
   1029 }
   1030 
   1031 .sticky-inner-container {
   1032  flex: 1;
   1033  max-width: var(--page-main-content-width);
   1034 }
   1035 
   1036 #search-tooltip-container {
   1037  position: relative;
   1038  top: 0;
   1039 }
   1040 
   1041 .search-tooltip {
   1042  max-width: 10em;
   1043  font-size: 1rem;
   1044  position: absolute;
   1045  padding: 0 0.7em;
   1046  background-color: #ffe900;
   1047  color: #000;
   1048  border: 1px solid #d7b600;
   1049  margin-top: -18px;
   1050  opacity: 0.85;
   1051  z-index: 1;
   1052 }
   1053 
   1054 .search-tooltip:hover {
   1055  opacity: 0.1;
   1056 }
   1057 
   1058 .search-tooltip::before {
   1059  position: absolute;
   1060  content: "";
   1061  border: 7px solid transparent;
   1062  border-top-color: #d7b600;
   1063  top: 100%;
   1064  inset-inline-start: calc(50% - 7px);
   1065  forced-color-adjust: none;
   1066 }
   1067 
   1068 .search-tooltip::after {
   1069  position: absolute;
   1070  content: "";
   1071  border: 6px solid transparent;
   1072  border-top-color: #ffe900;
   1073  top: 100%;
   1074  inset-inline-start: calc(50% - 6px);
   1075  forced-color-adjust: none;
   1076 }
   1077 
   1078 @media (forced-colors: active) {
   1079  .search-tooltip::before {
   1080    border-top-color: CanvasText;
   1081  }
   1082 
   1083  .search-tooltip::after {
   1084    border-top-color: Canvas;
   1085  }
   1086 }
   1087 
   1088 .search-tooltip-parent {
   1089  position: relative;
   1090 }
   1091 
   1092 .search-tooltip > span {
   1093  display: block;
   1094  user-select: none;
   1095  white-space: nowrap;
   1096  overflow: hidden;
   1097  text-overflow: ellipsis;
   1098 }
   1099 
   1100 .visually-hidden {
   1101  display: none !important;
   1102 }
   1103 
   1104 menulist[indicator="true"] > menupopup menuitem:not([image]) > .menu-icon {
   1105  display: flex;
   1106  min-width: auto; /* Override the min-width defined in menu.css */
   1107  margin-inline-end: 6px;
   1108  width: 8px;
   1109  height: 10px;
   1110 }
   1111 
   1112 menulist[indicator="true"] > menupopup menuitem[indicator="true"]:not([image]) > .menu-icon {
   1113  list-style-image: url(chrome://browser/skin/preferences/search-arrow-indicator.svg);
   1114 
   1115  &:-moz-locale-dir(rtl) {
   1116    transform: scaleX(-1);
   1117  }
   1118 }
   1119 
   1120 .menu-highlightable-text {
   1121  margin: 0; /* Align with the margin of xul:label.menu-text */
   1122 }
   1123 
   1124 #no-results-message > label {
   1125  margin: 2px 0;
   1126 }
   1127 
   1128 /* Proxy port input */
   1129 
   1130 .proxy-port-input {
   1131  width: calc(5ch + 18px); /* 5 chars + (8px padding + 1px border) on both sides */
   1132  margin-inline-start: 4px;
   1133 }
   1134 
   1135 #primaryBrowserLocale {
   1136  margin-inline-start: 0;
   1137  min-width: 20em;
   1138 }
   1139 
   1140 #availableLanguages,
   1141 #availableLocales {
   1142  margin-inline-start: 0;
   1143 }
   1144 
   1145 #availableLanguages,
   1146 #availableLocales,
   1147 #activeLanguages,
   1148 #selectedLocales {
   1149  margin-inline-end: 4px;
   1150 }
   1151 
   1152 #activeLanguages,
   1153 #selectedLocales {
   1154  min-height: 15em;
   1155  contain: size;
   1156 }
   1157 
   1158 #selectedLocales > richlistitem {
   1159  padding-inline-start: 13px;
   1160 }
   1161 
   1162 #warning-message > .message-bar-description {
   1163  width: 32em;
   1164 }
   1165 
   1166 #warning-message {
   1167  margin-top: 8px;
   1168 }
   1169 
   1170 .action-button {
   1171  margin-inline-end: 0;
   1172 }
   1173 
   1174 .languages-grid {
   1175  flex: 1;
   1176  display: grid;
   1177  grid-template-rows: 1fr auto;
   1178  grid-template-columns: 1fr auto;
   1179 }
   1180 
   1181 /* Menulist styles */
   1182 .label-item {
   1183  font-size: 0.8em;
   1184 }
   1185 
   1186 .updateSettingCrossUserWarningContainer {
   1187  margin-block-end: 17px;
   1188 }
   1189 
   1190 #updateSettingCrossUserWarningDesc {
   1191  padding-inline-start: calc(16px + 6px); /* radio-check's width + margin-inline-end */
   1192  margin-block-start: 20px;
   1193 }
   1194 
   1195 richlistitem .text-link {
   1196  color: inherit;
   1197  text-decoration: underline;
   1198 }
   1199 
   1200 richlistitem .text-link:hover {
   1201  color: inherit;
   1202 }
   1203 
   1204 #proxy-grid,
   1205 #dnsOverHttps-grid {
   1206  display: grid;
   1207  grid-template-columns: auto 1fr;
   1208  align-items: center;
   1209 }
   1210 
   1211 .proxy-grid-row:not([hidden]),
   1212 .dnsOverHttps-grid-row:not([hidden]) {
   1213  display: contents;
   1214 }
   1215 
   1216 #proxy-grid > .thin {
   1217  grid-column: span 2;
   1218  height: 20px;
   1219 }
   1220 
   1221 #pane-experimental-featureGates > .featureGate:not(.visually-hidden) ~ .featureGate:not(.visually-hidden) {
   1222  margin-top: var(--space-xlarge);
   1223 }
   1224 
   1225 #pane-experimental-featureGates moz-fieldset::part(label) {
   1226  font-size: var(--font-size-large);
   1227 }
   1228 
   1229 #experimentalCategory-reset {
   1230  margin-top: var(--space-small);
   1231 }
   1232 
   1233 .featureGateDescription {
   1234  white-space: pre-wrap;
   1235 }
   1236 
   1237 .checkbox-row {
   1238  display: flex;
   1239  align-items: baseline;
   1240 }
   1241 
   1242 .checkbox-row input[type="checkbox"] {
   1243  translate: 0 2px;
   1244 }
   1245 
   1246 .checkbox-row a {
   1247  margin-inline-start: 6px;
   1248 }
   1249 
   1250 #moreFromMozillaCategory-header .subtitle {
   1251  margin-block-end: var(--space-xlarge);
   1252 }
   1253 
   1254 #moreFromMozillaCategory:not([hidden]) {
   1255  display: flex;
   1256  flex-direction: column;
   1257 }
   1258 
   1259 #moreFromMozillaCategory .mozilla-product-item {
   1260  margin-top: 30px;
   1261 }
   1262 
   1263 #moreFromMozillaCategory .product-title {
   1264  margin: 4px 0 3px;
   1265  background-repeat: no-repeat;
   1266  background-size: contain;
   1267  padding-inline-start: 30px;
   1268  -moz-context-properties: fill;
   1269  fill: currentColor;
   1270 }
   1271 
   1272 #moreFromMozillaCategory .product-title:-moz-locale-dir(rtl) {
   1273  background-position-x: right;
   1274 }
   1275 
   1276 #moreFromMozillaCategory .product-description-box {
   1277  padding-inline-start: 30px;
   1278  margin: 2px 0;
   1279 }
   1280 
   1281 #moreFromMozillaCategory .description {
   1282  display: inline;
   1283 }
   1284 
   1285 #moreFromMozillaCategory .small-button {
   1286  margin-block: 14px 2px;
   1287  margin-inline: 30px 0;
   1288 }
   1289 
   1290 #firefox-mobile {
   1291  background-image: url("chrome://browser/skin/device-phone.svg");
   1292 }
   1293 
   1294 #mozilla-vpn {
   1295  background-image: url("chrome://browser/skin/preferences/vpn-logo.svg");
   1296 }
   1297 
   1298 #mozilla-monitor {
   1299  background-image: url("chrome://browser/skin/preferences/monitor-logo.svg");
   1300 }
   1301 
   1302 #firefox-relay {
   1303  background-image: url("chrome://browser/skin/preferences/relay-logo.svg");
   1304 }
   1305 
   1306 #solo-ai {
   1307  background-image: url("chrome://browser/skin/preferences/solo-ai-logo.svg");
   1308 }
   1309 
   1310 #mdn {
   1311  background-image: url("chrome://browser/skin/preferences/mdn-logo.svg");
   1312 }
   1313 
   1314 /*
   1315 * The :not clause is required because hiding an element with `display: flex` only
   1316 * partially hides it.
   1317 */
   1318 .qr-code-box:not([hidden="true"]) {
   1319  max-width: 320px; /* a unit better than px for this & next? */
   1320  min-height: 204px;
   1321  margin-block: 10px 0;
   1322  margin-inline-start: 30px;
   1323  background-color: var(--background-color-box-info);
   1324  display: flex;
   1325  flex-direction: column;
   1326  align-items: center;
   1327  justify-content: space-evenly;
   1328  border-radius: var(--border-radius-small);
   1329 }
   1330 
   1331 @media (forced-colors) {
   1332  .qr-code-box:not([hidden="true"]) {
   1333    border: 1px solid currentColor;
   1334  }
   1335 }
   1336 
   1337 .qr-code-box-image-wrapper {
   1338  position: relative;
   1339  display: grid;
   1340  align-items: center;
   1341  justify-items: center;
   1342 }
   1343 
   1344 .qr-code-box-image {
   1345  border-radius: var(--border-radius-small);
   1346  padding: 2px;
   1347  width: 80px;
   1348  flex: 0 0 auto;
   1349  -moz-context-properties: fill;
   1350  fill: currentColor;
   1351 }
   1352 
   1353 .qr-code-box-logo {
   1354  height: 18px;
   1355  position: absolute;
   1356 }
   1357 
   1358 .qr-code-title-label {
   1359  flex: 1 1 auto;
   1360 }
   1361 
   1362 .qr-code-box-title {
   1363  font-size: 0.87em;
   1364  font-weight: normal;
   1365 
   1366  text-align: center;
   1367 
   1368  margin-block: 20px 0;
   1369  margin-inline: 40px;
   1370 }
   1371 
   1372 .simple .qr-code-box-title {
   1373  margin-block: 0;
   1374  width: 296px;
   1375 }
   1376 
   1377 .simple .qr-code-box {
   1378  padding-inline: var(--space-xlarge);
   1379  padding-block: 20px;
   1380 }
   1381 
   1382 .simple .qr-code-box-image {
   1383  padding: 10px;
   1384 }
   1385 
   1386 #moreFromMozillaCategory .qr-code-link {
   1387  font-size: 0.87em;
   1388 }
   1389 
   1390 @media (prefers-color-scheme: dark) {
   1391  .qr-code-box:not([hidden="true"]) {
   1392    background-color: rgba(91, 91, 102, 0.45);
   1393  }
   1394 
   1395  .qr-code-box-title {
   1396    color: #fbfbfe;
   1397  }
   1398 }
   1399 
   1400 #webAppearanceGroup .description-deemphasized {
   1401  margin-block-end: var(--space-large);
   1402 }
   1403 
   1404 /** SRD web-appearance-chooser control START **/
   1405 .appearance-chooser-item {
   1406  flex: 1;
   1407 
   1408  &::part(image) {
   1409    width: 54px;
   1410    box-shadow: var(--box-shadow-card);
   1411    margin-block: var(--space-medium);
   1412    border: var(--border-width) solid var(--border-color);
   1413    border-radius: var(--border-radius-small);
   1414  }
   1415 
   1416  &:dir(rtl)::part(image) {
   1417    transform: scaleX(-1);
   1418  }
   1419 }
   1420 /** SRD web-appearance-chooser control END **/
   1421 
   1422 /** SRD rows control for Homepage START **/
   1423 setting-group[groupid="homepage"] {
   1424  --select-max-width: fit-content;
   1425  --select-min-width: 15em;
   1426 }
   1427 /** SRD rows control for Homepage END **/
   1428 
   1429 /** SRD rows control for New Tab START **/
   1430 setting-group[groupid="home"] {
   1431  --select-max-width: 17rem;
   1432 }
   1433 /** SRD rows control for New Tab END **/
   1434 
   1435 setting-group[groupid="aiFeatures"] {
   1436  --select-max-width: fit-content;
   1437 }
   1438 
   1439 #translations-manage-install-list {
   1440  height: 220px;
   1441  overflow: auto;
   1442  background-color: var(--background-color-box);
   1443  border: 1px solid var(--border-color);
   1444  border-radius: var(--border-radius-small);
   1445  resize: vertical;
   1446  margin: 4px 0;
   1447 }
   1448 
   1449 .translations-manage-language:first-child {
   1450  border-bottom: 1px solid var(--border-color);
   1451  padding: 8px;
   1452  margin-bottom: 8px;
   1453 }
   1454 
   1455 .translations-manage-language {
   1456  align-items: center;
   1457  padding: 0 8px;
   1458 }
   1459 
   1460 .translations-manage-language > label {
   1461  flex: 1;
   1462  margin: 0 15px;
   1463 }
   1464 
   1465 #translations-manage-error {
   1466  color: var(--text-color-error);
   1467  margin: var(--space-large) 0;
   1468 }
   1469 
   1470 .translations-download-language-error {
   1471  background-color: var(--background-color-critical);
   1472 }
   1473 
   1474 .hidden-category {
   1475  display: none;
   1476 }
   1477 /* Platform-specific tweaks & overrides */
   1478 
   1479 @media (-moz-platform: macos) {
   1480  tabpanels {
   1481    padding: 20px 7px 7px;
   1482  }
   1483 
   1484  #browserUseCurrent,
   1485  #browserUseBookmark,
   1486  #browserUseBlank {
   1487    margin-top: 10px;
   1488  }
   1489 
   1490  #privacyPrefs {
   1491    padding: 0 4px;
   1492  }
   1493 
   1494  #privacyPrefs > tabpanels {
   1495    padding: 18px 10px 10px;
   1496  }
   1497 
   1498  #OCSPDialogPane {
   1499    font: message-box !important;
   1500  }
   1501 
   1502  /**
   1503   * Update Preferences
   1504   */
   1505  #autoInstallOptions {
   1506    margin-inline-start: 20px;
   1507  }
   1508 
   1509  .updateControls {
   1510    margin-inline-start: 10px;
   1511  }
   1512 }
   1513 
   1514 @media (-moz-platform: linux) {
   1515  .treecol-sortdirection {
   1516    /* override the Linux only toolkit rule */
   1517    appearance: none;
   1518  }
   1519 }
   1520 
   1521 .section-heading,
   1522 .section-description {
   1523  margin: 0 0 var(--space-small);
   1524 }
   1525 
   1526 .subsection-heading {
   1527  margin-bottom: var(--space-small);
   1528 }
   1529 
   1530 .section-header-last {
   1531  margin: 0 0 var(--space-large);
   1532 }
   1533 
   1534 .search-header:has(.section-heading) {
   1535  margin: 0;
   1536 }
   1537 
   1538 /* Styles for the "sponsors support our mission" message and link on the Home tab */
   1539 .mission-message {
   1540  margin-block-start: var(--space-large);
   1541 
   1542  > a {
   1543    font-size: var(--font-size-small);
   1544  }
   1545 }
   1546 
   1547 #dohProviderSelect {
   1548  --select-max-width: 235px;
   1549 }
   1550 
   1551 #browserContainersbox moz-message-bar {
   1552  margin-block-start: 0;
   1553 }
   1554 
   1555 #etpBannerEl {
   1556  border-radius: var(--border-radius-large);
   1557  background-clip: content-box;
   1558  background-image:
   1559    url("chrome://browser/content/preferences/etp-advanced-banner.svg"),
   1560    radial-gradient(94.12% 34.67% at 50% 50%, rgba(159, 116, 255, 0.5) 0%, rgba(159, 116, 255, 0) 100%), linear-gradient(135deg, #592acb 0%, #ab43e7 100%);
   1561  background-repeat: no-repeat;
   1562  background-position: center;
   1563  background-size: cover;
   1564  height: 128px;
   1565 }
   1566 
   1567 #etpLevelWarning {
   1568  --promo-image-position: top;
   1569 }
   1570 
   1571 #etpResetButtonGroup {
   1572  display: flex;
   1573  gap: var(--space-small);
   1574 }
   1575 
   1576 #addresses-list-header,
   1577 #payments-list-header {
   1578  --box-label-font-weight: var(--heading-font-weight);
   1579 }
   1580 
   1581 .box-header-bold {
   1582  --box-label-font-weight: var(--heading-font-weight);
   1583 }