uBlock/platform/mv3/extension/css/popup.css
Raymond Hill 0b0294af4f
[mv3] Add support for custom CSS-based cosmetic filters
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/325

This is a first version, with support only for custom filters which are
plain CSS selectors. Future versions will extend support to style-based
and procedural cosmetic filters.

Manually text-editing existing custom filters is currently not supported,
this will be added in a future version in the Develop pane. To remove
existing custom filters, the "Remove a custom filter" tool can be used.
2025-07-06 16:43:22 -04:00

198 lines
4.3 KiB
CSS

/* External CSS values override */
.fa-icon.fa-icon-badged > .fa-icon-badge {
bottom: auto;
top: -20%;
}
:root {
--popup-min-width: calc(
var(--filtering-mode-slider-width) +
var(--filtering-mode-button-size) / 2
);
}
:root body,
:root.mobile body {
--font-size: 15px;
--popup-gap: var(--font-size);
--popup-gap-thin: calc(0.5 * var(--popup-gap));
--popup-gap-extra-thin: calc(0.25 * var(--popup-gap));
font-size: var(--font-size);
min-width: var(--popup-min-width);
}
:root body.loading {
visibility: hidden;
}
a {
color: var(--ink-1);
fill: var(--ink-1);
text-decoration: none;
}
:focus {
outline: 0;
}
#main {
align-self: flex-start;
display: flex;
flex-direction: column;
}
:root.portrait #main {
align-self: inherit;
}
hr {
margin: 0.5em 0;
}
#hostname {
align-items: center;
background-color: var(--popup-toolbar-surface);
display: flex;
justify-content: center;
min-height: calc(var(--font-size) * 3);
padding: 0 var(--popup-gap-extra-thin);
text-align: center;
word-break: break-all;
}
#hostname > span {
word-break: break-all;
}
#hostname > span + span {
font-weight: 600;
}
body[data-forbid~="filteringMode"] .filteringModeSlider {
pointer-events: none;
}
body[data-forbid~="dashboard"] #gotoDashboard,
body[data-forbid~="zapper"] #gotoZapper,
body[data-forbid~="picker"] #gotoPicker {
display: none;
}
#filteringModeText {
color: var(--ink-3);
margin-bottom: var(--default-gap-small);
margin-top: 0;
text-align: center;
text-transform: lowercase;
}
#filteringModeText > span {
color: var(--accent-surface-1);
}
#filteringModeText > span:nth-of-type(2) {
display: none;
}
#filteringModeText > span:nth-of-type(2):not(:empty) {
display: inline;
}
#filteringModeText > span:nth-of-type(2):not(:empty)::before {
content: '\2002\2192\2002';
}
[dir="rtl"] #filteringModeText > span:nth-of-type(2):not(:empty)::before {
content: '\2002\2190\2002';
}
.filteringModeSlider {
align-self: center;
margin-bottom: var(--popup-gap);
margin-top: var(--popup-gap);
}
.rulesetTools {
background-color: transparent;
border: 0;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-evenly;
width: 25%;
}
.rulesetTools [id] {
background-color: var(--popup-ruleset-tool-surface);
border-radius: 4px;
cursor: pointer;
fill: var(--popup-ruleset-tool-ink);
flex-grow: 1;
font-size: 2.2em;
padding: 0;
visibility: hidden;
}
.rulesetTools [id]:not(:first-of-type) {
margin-block-start: 1px;
}
.rulesetTools [id] > svg {
fill: var(--ink-4);
}
body.needReload #refresh {
visibility: visible;
}
.toolRibbon {
display: flex;
flex-direction: column;
font-size: calc(var(--font-size) - 1px);
line-height: calc(var(--font-size) * 2.2);
white-space: nowrap;
}
:root:not(.isHTTP) .needHTTP {
display: none;
}
.toolRibbon > label {
font-size: small;
color: var(--ink-2);
line-height: calc(var(--font-size) * 1.8);
margin-inline-start: 0.5em;
}
.toolRibbon .tool {
cursor: pointer;
display: flex;
unicode-bidi: embed;
}
.toolRibbon .tool:hover {
color: var(--ink-1);
fill: var(--ink-1);
}
.toolRibbon .tool .fa-icon {
font-size: 1.4em;
min-width: 1.4em;
}
.toolRibbon .tool:not(.enabled) {
display: none;
}
body.mobile.no-tooltips .toolRibbon .tool {
font-size: 1.6em;
}
.toolRibbon.genericTools {
margin-bottom: 0;
}
body:not([data-section~="a"]) [data-section="a"] {
display: none;
}
body:not([data-section~="b"]) [data-section="b"] {
display: none;
}
/* horizontally-constrained viewport */
:root.portrait body {
overflow-y: auto;
width: 100%;
}
:root.portrait #main {
max-width: unset;
}
/* mouse-driven devices */
:root.desktop {
display: flex;
}
:root.desktop .rulesetTools [id]:hover {
background-color: var(--popup-ruleset-tool-surface-hover);
}
:root.desktop .rulesetTools [id]:hover > svg {
fill: var(--ink-2);
}
:root.desktop .tool:hover {
background-color: var(--popup-toolbar-surface-hover);
}