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 }