f8d13d8dec
* Now that our own pages retrieve the styles directly via getStylesSafe the only 0.001% of cases where code:false would be needed (the browser is starting up with some of the tabs showing our built-in pages like editor or manage) is not worth optimizing for. * According to CSS4 @document specification the entire URL must match. Stylish-for-Chrome implemented it incorrectly since the very beginning. We detect styles that abuse the bug by finding the sections that would have been applied by Stylish but not by us as we follow the spec. Additionally we'll check for invalid regexps.
431 lines
7.0 KiB
CSS
431 lines
7.0 KiB
CSS
body {
|
|
width: 252px;
|
|
font-size: 12px;
|
|
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
|
|
margin: 0;
|
|
}
|
|
|
|
body > div:not(#installed) {
|
|
margin-left: 0.75em;
|
|
margin-right: 0.75em;
|
|
}
|
|
|
|
input[type=checkbox] {
|
|
outline: none;
|
|
}
|
|
|
|
#disable-all-wrapper {
|
|
padding: 0.3em 0 0.6em;
|
|
}
|
|
|
|
#no-styles {
|
|
font-style: italic;
|
|
}
|
|
|
|
#popup-shortcuts-button {
|
|
margin-left: 3px;
|
|
}
|
|
|
|
.checker {
|
|
display: inline;
|
|
}
|
|
|
|
.style-name {
|
|
cursor: default;
|
|
font-weight: bold;
|
|
display: block;
|
|
}
|
|
|
|
a,
|
|
a:visited {
|
|
color: black;
|
|
text-decoration-skip: ink;
|
|
}
|
|
|
|
.left-gutter {
|
|
display: table-cell;
|
|
width: 16px;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.left-gutter input {
|
|
margin-bottom: 1px;
|
|
margin-top: 0;
|
|
margin-left: 0;
|
|
}
|
|
|
|
.main-controls {
|
|
display: table-cell;
|
|
}
|
|
|
|
#unavailable,
|
|
#installed {
|
|
border-bottom: 1px solid black;
|
|
padding-bottom: 2px;
|
|
}
|
|
|
|
body > DIV:last-of-type,
|
|
body.blocked > DIV {
|
|
border-bottom: none;
|
|
}
|
|
|
|
#installed {
|
|
padding-top: 2px;
|
|
max-height: 434px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
#installed.disabled .style-name {
|
|
text-decoration: line-through;
|
|
}
|
|
|
|
#installed .actions {
|
|
cursor: default;
|
|
}
|
|
|
|
#installed .actions a {
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
}
|
|
|
|
/* entry */
|
|
|
|
.entry {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 5px 0.75em;
|
|
}
|
|
|
|
.entry:nth-child(even) {
|
|
background-color: rgba(0, 0, 0, 0.05);
|
|
}
|
|
|
|
.entry .style-edit-link {
|
|
margin-right: 2px;
|
|
}
|
|
|
|
.entry .style-edit-link,
|
|
.entry .delete {
|
|
display: inline-block;
|
|
padding: 0 1px 0;
|
|
}
|
|
|
|
.entry .main-controls {
|
|
display: flex;
|
|
flex: 1;
|
|
width: calc(100% - 20px);
|
|
align-items: center;
|
|
}
|
|
|
|
.entry .main-controls label {
|
|
flex: 1;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
padding-right: 5px;
|
|
}
|
|
|
|
.not-applied .checker,
|
|
.not-applied .style-name,
|
|
.not-applied .actions > * {
|
|
opacity: .2;
|
|
transition: opacity .5s ease-in-out .25s, color .5s ease-in-out .25s;
|
|
}
|
|
|
|
.not-applied:hover .checker,
|
|
.not-applied:hover .style-name,
|
|
.not-applied:hover .actions > * {
|
|
opacity: 1;
|
|
}
|
|
|
|
.not-applied:hover .style-name {
|
|
color: darkorange;
|
|
}
|
|
|
|
.regexp-problem-indicator {
|
|
background-color: darkorange;
|
|
width: 15px;
|
|
height: 15px;
|
|
line-height: 16px;
|
|
border-radius: 8px;
|
|
margin-right: 4px;
|
|
margin-left: 4px;
|
|
text-align: center;
|
|
color: white;
|
|
font-weight: bold;
|
|
box-sizing: border-box;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.regexp-partial .actions,
|
|
.regexp-invalid .actions {
|
|
order: 2;
|
|
}
|
|
|
|
#regexp-explanation {
|
|
position: fixed;
|
|
background-color: white;
|
|
left: 0;
|
|
right: 0;
|
|
padding: .5rem;
|
|
font-size: 90%;
|
|
border-top: 2px solid black;
|
|
border-bottom: 2px solid black;
|
|
box-shadow: 0 0 100px black;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
#regexp-explanation > div {
|
|
display: none;
|
|
list-style-type: none;
|
|
padding: 0;
|
|
margin: 0;
|
|
}
|
|
|
|
.regexp-partial #regexp-partial,
|
|
.regexp-invalid #regexp-invalid {
|
|
display: block;
|
|
}
|
|
|
|
#regexp-explanation > div:not(:last-child) {
|
|
margin-bottom: .5rem;
|
|
}
|
|
|
|
.svg-icon {
|
|
pointer-events: none;
|
|
transition: fill .5s;
|
|
}
|
|
a:hover .svg-icon {
|
|
fill: #000000;
|
|
}
|
|
|
|
body > .actions {
|
|
margin-top: 0.5em;
|
|
}
|
|
|
|
.actions > div:not(:last-child):not(#disable-all-wrapper),
|
|
.actions > .main-controls > div:not(:last-child),
|
|
#unavailable:not(:last-child),
|
|
#unavailable + .actions {
|
|
margin-bottom: 0.75em;
|
|
}
|
|
|
|
.actions input,
|
|
.actions label {
|
|
vertical-align: middle;
|
|
}
|
|
|
|
#unavailable {
|
|
border: none;
|
|
display: none;
|
|
margin-top: 0.75em;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 14px;
|
|
}
|
|
|
|
body.blocked #installed,
|
|
body.blocked #find-styles,
|
|
body.blocked #write-style,
|
|
body:not(.blocked) #unavailable {
|
|
display: none;
|
|
}
|
|
|
|
body.blocked #unavailable {
|
|
display: flex;
|
|
}
|
|
|
|
/* Never shown, but can be enabled with a style */
|
|
|
|
.enable,
|
|
.disable {
|
|
display: none;
|
|
}
|
|
|
|
/* 'New style' links */
|
|
|
|
#write-style-for {
|
|
margin-right: .6ex
|
|
}
|
|
|
|
.write-style-link {
|
|
margin-left: .6ex
|
|
}
|
|
|
|
.write-style-link::before,
|
|
.write-style-link::after {
|
|
font-size: 12px
|
|
}
|
|
|
|
.write-style-link::before {
|
|
content: "\00ad"; /* "soft" hyphen */
|
|
}
|
|
|
|
#match {
|
|
overflow-wrap: break-word;
|
|
display: inline-block;
|
|
}
|
|
|
|
/* "breadcrumbs" 'new style' links */
|
|
.breadcrumbs > .write-style-link {
|
|
margin-left: 0
|
|
}
|
|
|
|
.breadcrumbs:hover a {
|
|
color: #bbb;
|
|
text-decoration: none
|
|
}
|
|
|
|
/* use just the subdomain name instead of the full domain name */
|
|
.breadcrumbs > .write-style-link[subdomain]:not(:nth-last-child(2)) {
|
|
font-size: 0
|
|
}
|
|
|
|
.breadcrumbs > .write-style-link[subdomain]:not(:nth-last-child(2))::before {
|
|
content: attr(subdomain);
|
|
}
|
|
|
|
/* "dot" after each subdomain name */
|
|
.breadcrumbs > .write-style-link[subdomain]::after {
|
|
content: "."
|
|
}
|
|
|
|
/* no "dot" after top-level domain */
|
|
.breadcrumbs > .write-style-link:nth-last-child(2)::after {
|
|
content: none
|
|
}
|
|
|
|
/* "forward slash" before path ("this URL") */
|
|
.breadcrumbs > .write-style-link:last-child::before {
|
|
content: "\200b/"
|
|
}
|
|
|
|
.breadcrumbs > .write-style-link:last-child:first-child::before,
|
|
.breadcrumbs > .write-style-link[subdomain=""] + .write-style-link::before {
|
|
content: none
|
|
}
|
|
|
|
/* suppress TLD-only link */
|
|
.breadcrumbs > .write-style-link[subdomain=""] {
|
|
display: none
|
|
}
|
|
|
|
/* :hover style */
|
|
.breadcrumbs.url\(\) > .write-style-link,
|
|
|
|
/* :hover or :focus on "this URL" sets class="url()" */
|
|
.breadcrumbs > .write-style-link:hover,
|
|
.breadcrumbs > .write-style-link:focus,
|
|
.breadcrumbs > .write-style-link:hover ~ .write-style-link[subdomain],
|
|
.breadcrumbs > .write-style-link:focus ~ .write-style-link[subdomain] {
|
|
color: inherit;
|
|
text-decoration: underline;
|
|
text-decoration-skip: ink;
|
|
}
|
|
|
|
/* action buttons */
|
|
|
|
#popup-options {
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-around;
|
|
padding: 1.2em 0;
|
|
}
|
|
|
|
#popup-options button {
|
|
margin: 0 2px;
|
|
width: 33%;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
/* confirm */
|
|
|
|
#confirm,
|
|
#confirm > div > span {
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
#confirm {
|
|
z-index: 2147483647;
|
|
display: none;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
margin: 0 !important;
|
|
box-sizing: border-box;
|
|
background-color: rgba(0, 0, 0, 0.4);
|
|
animation: lights-off .5s cubic-bezier(.03, .67, .08, .94);
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
#confirm.lights-on {
|
|
animation: lights-on .25s ease-in-out;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
#confirm.lights-on > div {
|
|
display: none;
|
|
}
|
|
|
|
#confirm[data-display=true] {
|
|
display: flex;
|
|
}
|
|
|
|
#confirm > div {
|
|
width: 80%;
|
|
height: 100px;
|
|
max-height: 80%;
|
|
min-height: 8em;
|
|
background-color: #fff;
|
|
display: flex;
|
|
flex-direction: column;
|
|
border: solid 2px rgba(0, 0, 0, 0.5);
|
|
}
|
|
|
|
#confirm > div > span {
|
|
display: flex;
|
|
flex: 1;
|
|
padding: 0 10px;
|
|
}
|
|
|
|
#confirm > div > b {
|
|
padding: 10px;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
#confirm > div > div {
|
|
padding: 10px;
|
|
text-align: center;
|
|
}
|
|
|
|
.non-windows #confirm > div > div {
|
|
direction: rtl;
|
|
text-align: right;
|
|
}
|
|
|
|
@keyframes lights-off {
|
|
from {
|
|
background-color: transparent;
|
|
}
|
|
to {
|
|
background-color: rgba(0, 0, 0, 0.4);
|
|
}
|
|
}
|
|
|
|
@keyframes lights-on {
|
|
from {
|
|
background-color: rgba(0, 0, 0, 0.4);
|
|
}
|
|
to {
|
|
background-color: transparent;
|
|
}
|
|
}
|