stylus/manage/manage.css
2020-03-10 19:33:13 -05:00

954 lines
19 KiB
CSS

:root {
--header-icon-size: 20px;
--entry-icon-size: 20px;
--favicon-size: 16px;
--narrow-column: 60px;
--header-height: 40px;
--toolbar-height: 60px;
--entry-height: 30px;
--onoffswitch-width: 60px;
--header-bg-color: #333;
--header-text-color: #ddd;
--header-text-hover-color: hsla(180, 100%, 20%, 1);
--header-icon-color: #888;
--header-icon-hover-color: hsla(180, 99%, 58%, 1);
--tools-bg-color: #ccc;
--entry-header-bg-color: #ddd;
--entry-header-text-color: #111;
--checked-count-bg-color: hsla(180, 100%, 20%, 1);
--checked-bg-color: hsla(180, 100%, 24%, 1);
--checked-mark-color: #fff;
--entry-icon-color: #666;
--entry-icon-hover-color: hsla(180, 100%, 24%, 1);
--delete-icon-hover-color: #d40000;
}
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
body {
margin: 0;
/* Firefox: fill the entire page for drag'n'drop to work */
display: flex;
height: 100%;
}
body.dark {
background: #181818;
color: #ddd;
}
a,
.disabled a:hover {
color: #000;
transition: color .5s;
}
a {
cursor: pointer;
}
a:hover {
color: #666;
}
.invisible {
visibility: hidden;
pointer-events: none;
}
.svg-icon {
cursor: pointer;
width: var(--entry-icon-size);
height: var(--entry-icon-size);
vertical-align: middle;
transition: fill .5s;
fill: var(--entry-icon-color);
}
#main-header .svg-icon {
width: var(--header-icon-size);
height: var(--header-icon-size);
fill: var(--header-icon-color);
}
#main-actions {
display: flex;
width: 320px;
height: 40px;
justify-content: space-between;
align-items: center;
margin-right: 10px;
}
#main-actions a,
#main-actions div {
margin-right: 4px;
}
/* header vertical separator between icon groups */
.spacer {
width: 10px;
height: 1em;
border-right: 1px solid rgba(119, 119, 119, .5);
margin-right: 10px;
}
.entry-actions > a,
.bulk-actions-select-wrapper,
#bulk-actions-apply {
position: relative;
margin-left: 2px;
}
#bulk-actions .svg-icon.busy:not(.hidden) {
-webkit-animation:spin 1s linear infinite;
-moz-animation:spin 1s linear infinite;
animation:spin 1s linear infinite;
}
@-moz-keyframes spin {
100% { -moz-transform: rotate(360deg); }
}
@-webkit-keyframes spin {
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); }
}
.entry-header a:hover .svg-icon,
.entry a:hover .svg-icon,
.svg-icon:hover {
fill: var(--entry-icon-hover-color);
}
.entry .entry-delete:hover .svg-icon {
fill: var(--delete-icon-hover-color);
}
#main-header {
background: var(--header-bg-color);
color: var(--header-text-color);
position: fixed;
top: 0;
width: 100%;
height: var(--header-height);
z-index: 101;
padding: 0 4px;
margin: 0;
display: flex;
align-items: center;
justify-content: space-between;
}
#main-header .ext-version {
font-size: .5em;
}
#main-header svg {
vertical-align: bottom;
}
#main-header a:hover,
#main-actions a:hover svg,
.manage-backups:hover svg {
color: var(--header-icon-hover-color);
fill: var(--header-icon-hover-color);
}
#main-header:lang(ja) {
font-weight: normal;
}
#installed, #options, #backup {
width: 100%;
margin-top: calc(var(--header-height) + var(--entry-height));
}
#installed .entry-header {
background: var(--entry-header-bg-color);
color: var(--entry-header-text-color);
position: fixed;
top: var(--header-height);
z-index: 100;
}
#installed .entry,
#installed .entry-header {
width: 100%;
line-height: var(--entry-height);
display: flex;
flex: 0 0 var(--narrow-column);
flex-flow: row nowrap;
align-content: stretch;
align-items: center;
justify-content: center;
padding: 0;
}
#installed .entry:last-child {
margin-bottom: 10px;
}
body.all-styles-hidden-by-filters #installed:after {
font-size: 20px;
position: relative;
top: 20px;
left: 30px;
}
.entry-header {
margin: 0;
padding: 0 4px;
}
.entry {
margin: 0;
padding: 4px 8px;
border-top: 1px solid #ddd;
}
.entry-col {
padding-left: 4px;
flex: 1;
justify-content: space-evenly;
}
.center-text,
.entry-filter,
.entry-state,
.entry-last-update {
text-align: center;
justify-content: center;
max-width: var(--narrow-column);
padding: 0;
}
.header-last-update,
.entry-last-update {
/* inlcude update history link */
max-width: calc(var(--narrow-column) + 20px);
}
/* keep all icons on the same row */
.entry-actions {
white-space: pre;
}
.header-version,
.entry-version {
max-width: var(--narrow-column);
}
.header-name,
.entry-name {
flex: 3;
}
.header-id,
.entry-id {
text-align: right;
padding-right: 8px;
max-width: 50px;
}
.entry, .targets {
position: relative;
display: flex;
justify-content: start;
}
.entry-name {
overflow-wrap: break-word;
font-weight: 600;
text-decoration: none;
margin-right: 8px;
padding: 8px 0;
}
.entry-name-text {
display: inline-block;
max-width: 30vw;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: top;
white-space: nowrap;
}
.entry-header:not(.sortable) {
cursor: default;
}
.sortable {
align-self: center;
cursor: pointer;
text-decoration: none;
}
.sortable[data-sort-dir="asc"] span:after,
.sortable[data-sort-dir="desc"] span:after {
font-size: 16px;
position: relative;
top: 2px;
}
.sortable[data-sort-dir="asc"] span:after {
content: '▴';
}
.sortable[data-sort-dir="desc"] span:after {
content: '▾';
}
.header-filter span:before {
content: '►';
color: #666;
position: relative;
left: 7px;
}
.header-filter:hover span:before,
.header-filter:hover .svg-icon,
.header-filter.active svg {
transition: all .5s;
color: #000;
fill: #000;
}
.header-filter.active span:before {
content: '▲';
color: #000;
}
.targets {
flex-wrap: wrap;
}
.targets .target {
display: inline-block;
padding: 2px;
line-height: var(--favicon-size);
}
.targets .applies-to-extra .target {
padding: 2px;
}
.applies-to-extra-expander {
text-decoration: none;
font-size: 1.5em;
}
.targets .target img,
.targets .target svg {
max-width: var(--favicon-size);
max-height: var(--favicon-size);
width: var(--favicon-size);
}
#installed:not(.has-favicons) .targets img,
#installed.has-favicons .targets img:not([src]),
#installed.has-favicons .targets img[src] + svg {
display: none;
}
#installed.faviconsGray .target img {
-webkit-filter: grayscale(1);
filter: grayscale(1);
}
.entry.odd {
background-color: rgba(128, 128, 128, 0.05);
}
.entry:hover:before {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to right, hsla(180, 50%, 30%, 0.2), hsla(180, 20%, 10%, 0.05) 50%, transparent);
pointer-events: none;
}
.entry.enabled .entry-name:hover .style-name {
color: hsla(180, 100%, 15%, 1);
}
.entry:hover .svg-icon:hover {
fill: #000;
}
.header-labels {
margin-left: 16px;
justify-content: center
}
.header-label,
.entry-label {
padding: 2px 4px;
margin-left: 2px;
border-radius: 4px;
font-size: .8em;
text-transform: lowercase;
}
.header-label[data-type="usercss"],
.entry-label[data-type="usercss"] {
background-color: hsla(180, 100%, 20%, 1);
color: white;
text-transform: lowercase;
}
.header-label[data-type="disabled"],
.entry-label[data-type="disabled"] {
background: rgba(128, 128, 128, .2);
color: #222;
}
.disabled .entry-name,
.disabled .entry-actions,
.disabled .entry-version,
.disabled .entry-last-update {
opacity: 0.6;
font-weight: normal;
transition: opacity .5s .1s;
}
.disabled:hover .entry-actions {
opacity: 1;
}
.disabled .entry-applies-to .svg-icon {
fill: rgba(92, 92, 92, 0.6);
}
a svg, .svg-icon.sort {
pointer-events: none;
}
/* Checkbox */
.checkmate input:checked + svg.checkbox .filled-circle {
fill: var(--checked-bg-color);
display: block;
}
.checkmate input[type="checkbox"],
.checkmate input:checked + svg.checkbox .circle,
.checkmate input:not(:checked) + svg .checkmark,
.checkmate input:not(:checked) + svg.checkbox .filled-circle,
.checkmate input:not(:indeterminate) + svg .indeterminate {
display: none;
}
.checkmate input:checked + svg.checkbox .checkmark {
fill: var(--checked-mark-color);
}
.checking-update .check-update {
opacity: 0;
display: inline-block;
pointer-events: none;
}
#installed[data-sort="order"] .header-sort,
/* Update icons */
.can-update .update,
.no-update:not(.update-problem):not(.update-done) .up-to-date,
.no-update.update-problem .check-update,
.update-done .updated {
display: inline-block;
}
.up-to-date svg,
.updated svg {
cursor: auto;
}
.update-done .updated svg {
top: -4px;
position: relative;
/* unprefixed since Chrome 53 */
-webkit-filter: drop-shadow(0 4px 0 currentColor);
filter: drop-shadow(0 5px 0 currentColor);
}
.can-update .update,
.no-update.update-problem .check-update {
cursor: pointer;
}
.can-update[data-details$="locally edited"] .update svg,
.update-problem .check-update svg {
fill: #ef6969;
}
.can-update[data-details$="locally edited"]:hover .update svg,
.entry.update-problem:hover .check-update svg {
fill: #fd4040;
}
.can-update[data-details$="locally edited"]:hover .update svg:hover,
.entry.update-problem:hover .check-update svg:hover {
fill: red;
}
.updater-icons > .update:after {
content: attr(data-title);
border: 1px solid gold;
background-color: goldenrod;
}
.entry-actions .entry-delete:after,
.update-problem .check-update:after {
background-color: #d40000;
border: 1px solid red;
color: white;
}
.update-problem.showTip {
animation: fadeout 10s;
animation-fill-mode: both;
display: inline;
}
.can-update .update:after {
animation: none;
}
.entry .svg-icon.world {
fill: #ef6969;
}
.target:hover img {
background-color: inherit;
}
.target img{
width: var(--entry-icon-size);
height: var(--entry-icon-size);
vertical-align: sub;
transition: opacity .5s, filter .5s;
/* unprefixed since Chrome 53 */
-webkit-filter: grayscale(1);
filter: grayscale(1);
/* workaround for the buggy CSS filter: images in the hidden overflow are shown on Mac */
backface-visibility: hidden;
opacity: .5;
}
.entry:hover .target img {
opacity: 1;
/* unprefixed since Chrome 53 */
-webkit-filter: grayscale(0);
filter: grayscale(0);
}
.targets .applies-to-extra {
margin-left: 4px;
margin-top: 5px;
cursor: pointer;
}
.entry.hide-extra .target.extra {
display: none;
}
#faviconsHelp {
overflow-y: auto;
font-size: 90%;
padding: 1ex 0 2ex 16px;
}
#faviconsHelp div {
display: flex;
align-items: center;
margin-top: 1ex;
}
/* Default, no update buttons */
.updater-icons .update,
.updater-icons .check-update {
display: none;
}
.updater-icons > * {
transition: opacity 1s;
display: none;
}
/* Check update button for things that can */
.updatable .check-update {
display: inline-block;
}
/* Update check in progress */
.checking-update .check-update {
display: none;
}
/* Updates available */
.can-update .update {
display: inline-block;
}
.can-update[data-details$="locally edited"] button.update:after {
content: "*";
}
.can-update .check-update {
display: none;
}
/* Updates not available */
.no-update:not(.update-problem) .check-update {
display: none;
}
/* Updates done */
.update-done .check-update {
display: none;
}
#apply-all-updates:after {
content: " (" attr(data-value) ")";
}
.update-in-progress #check-all-updates {
position: relative;
}
.update-in-progress #update-progress {
position: absolute;
top: 0;
left: 0;
bottom: 0;
background-color: currentColor;
content: "";
opacity: .35;
}
#check-all-updates-force {
margin-top: 1ex;
}
#update-all-no-updates[data-skipped-edited="true"] {
font-weight: bold;
}
#update-all-no-updates[data-skipped-edited="true"]::after {
font-weight: normal;
display: block;
}
/* bulk actions */
#tools-wrapper {
background: var(--tools-bg-color);
width: 100vw;
position: fixed;
top: var(--header-height);
left: 0;
height: var(--toolbar-height);
padding: 4px 16px;
z-index: 100;
}
#tools-wrapper:not(.hidden) + #installed {
margin-top: calc(var(--header-height) + var(--toolbar-height) + var(--entry-height));
}
#tools-wrapper:not(.hidden) + #installed .entry-header {
top: calc(var(--header-height) + var(--toolbar-height));
}
#tools-wrapper .select-resizer {
background: #fff;
}
.manage-row {
padding: 2px 18px;
display: flex;
align-items: center;
justify-content: space-between;
}
#filters-wrapper,
#bulk-filter-count {
margin-right: 20px;
}
#search-wrapper {
width: 30%;
}
#search {
width: calc(100% - var(--entry-icon-size) * 1.4);
}
#search-help {
text-decoration: none;
}
/* highlight updated/added styles */
.highlight {
animation: highlight 10s cubic-bezier(0,.82,.47,.98);
}
.highlight-quick {
animation: highlight .5s;
}
@keyframes highlight {
from {
background-color: rgba(128, 128, 128, .5);
}
to {
background-color: none;
}
}
.hidden {
display: none !important;
}
.active #filters-stats,
#bulk-filter-count:not(:empty) {
background-color: var(--checked-count-bg-color);
border-color: var(--checked-count-bg-color);
border-radius: 2px;
color: white;
font-size: 0.7rem;
font-weight: normal;
padding: 2px 5px;
position: relative;
white-space: nowrap;
}
.filter-stats-wrapper {
margin-left: .2rem;
}
#reset-filters svg {
fill: hsla(180, 50%, 50%, .7);
width: 24px; /* widen the click area a bit */
height: 20px;
padding: 2px;
box-sizing: border-box;
}
#reset-filters:hover svg {
fill: var(--header-icon-hover-color);
}
.filter-stats-wrapper:not(.active) #reset-filters,
.filter-stats-wrapper:not(.active) #filters-stats {
display: none;
}
/* drag-n-drop on import button */
.dropzone:after {
background-color: rgba(0, 0, 0, 0.7);
color: white;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1000;
position: fixed;
padding: calc(50vh - 3em) calc(50vw - 5em);
content: attr(dragndrop-hint);
text-shadow: 1px 1px 10px black;
font-size: xx-large;
text-align: center;
animation: fadein 1s cubic-bezier(.03, .67, .08, .94);
animation-fill-mode: both;
}
.fadeout.dropzone:after {
animation: fadeout .25s ease-in-out;
animation-fill-mode: both;
}
/* post-import report */
#message-box details:not([data-id="invalid"]) div:hover {
background-color: rgba(128, 128, 128, .3);
}
#message-box details:not(:last-child) {
margin-bottom: 1em;
}
#message-box details small div {
margin-left: 1.5em;
}
.update-history-log {
font-size: 11px;
white-space: pre;
overflow-x: hidden;
text-overflow: ellipsis;
}
/* export/import buttons */
.manage-backups {
position: relative;
}
.manage-backups .dropdown {
display: none;
background: transparent;
padding-top: 10px;
position: absolute;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 101;
}
.manage-backups .dropdown a {
background-color: #f9f9f9;
color: black;
padding: 8px;
font-size: 12px;
text-decoration: none;
display: block;
}
#main-header .manage-backups .dropdown a:hover {
/* background-color: #f2f2f2 */
background-color: #e9e9e9;
color: var(--header-text-hover-color);
}
.manage-backups:hover .dropdown {
display: block;
right: -20px;
top: 100%;
}
/* sort font */
@font-face {
font-family: 'sorticon';
src: url('data:application/x-font-ttf;base64,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') format('truetype');
font-weight: normal;
font-style: normal;
unicode-range: U+21E9;
}
#manage.sort {
font-family: 'sorticon', Arial;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#stylus-embedded-options {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
border: 0;
z-index: 2147483647;
background-color: hsla(0, 0%, 0%, .45);
animation: fadein .25s ease-in-out;
}
#stylus-embedded-options.fadeout {
animation: fadeout .25s ease-in-out;
}
@keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeout {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadein-25pct {
from {
opacity: 0;
}
to {
opacity: .25;
}
}
@media (max-width: 1100px) {
body,
#main-header,
#tools-wrapper,
.manage-row {
position: static;
display: block;
height: auto;
}
#installed .entry-header {
position: static;
width: 100%;
height: auto;
}
.manage-backups {
display: inline-block;
vertical-align: center;
}
.manage-backups:hover .dropdown {
display: block;
left: -20px;
right: auto;
top: 99%;
}
#installed,
#tools-wrapper:not(.hidden) + #installed {
margin-top: 0;
}
#installed .entry,
#installed .entry-col,
#installed .entry-header {
flex-wrap: wrap;
}
.header-name,
.entry-name {
flex: 1;
}
.entry-name-text {
max-width: 10vw;
}
.entry-actions {
white-space: normal;
}
.invisible {
display: none;
}
}
/* Deprecated dropbox backup (dropbox-sync) */
#sync-dropbox-export,
#sync-dropbox-import {
opacity: 0.5;
cursor: not-allowed;
}
#backup-buttons .dropdown-content #sync-dropbox-export:hover,
#backup-buttons .dropdown-content #sync-dropbox-import:hover {
background: transparent;
}