manage.css 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881
  1. body {
  2. margin: 0;
  3. font: 12px arial, sans-serif;
  4. /* Firefox: fill the entire page for drag'n'drop to work */
  5. display: flex;
  6. height: 100%;
  7. }
  8. a {
  9. color: #000;
  10. transition: color .5s;
  11. text-decoration-skip: ink;
  12. }
  13. a:hover {
  14. color: #666;
  15. }
  16. select {
  17. font-size: 12px;
  18. }
  19. .nowrap {
  20. white-space: nowrap;
  21. }
  22. .nowrap > * {
  23. white-space: nowrap;
  24. overflow-x: hidden;
  25. text-overflow: ellipsis;
  26. }
  27. #header {
  28. width: 280px;
  29. height: 100vh;
  30. position: fixed;
  31. top: 0;
  32. padding: 15px;
  33. border-right: 1px dashed #AAA;
  34. -webkit-box-shadow: 0 0 50px -18px black;
  35. overflow: auto;
  36. box-sizing: border-box;
  37. z-index: 9;
  38. }
  39. #check-all-updates {
  40. max-width: 220px;
  41. }
  42. #header h1 {
  43. margin-top: 0;
  44. }
  45. #header a[href^="edit"] {
  46. text-decoration: none;
  47. }
  48. #add-style-label {
  49. margin-right: .25em;
  50. margin-bottom: .25em;
  51. }
  52. #newStyleAsUsercss-wrapper:not(:hover) input:not(:checked) ~ a svg {
  53. fill: #aaa;
  54. }
  55. .nobreak {
  56. white-space: nowrap;
  57. }
  58. label.nobreak input {
  59. vertical-align: middle;
  60. margin: 0;
  61. }
  62. .firefox .chromium-only {
  63. display: none;
  64. }
  65. #installed {
  66. position: relative;
  67. padding-left: 280px;
  68. box-sizing: border-box;
  69. width: 100%;
  70. }
  71. .entry {
  72. margin: 0;
  73. padding: 1.25em 2em;
  74. border-top: 1px solid #ddd;
  75. }
  76. .entry:first-child {
  77. border-top: none;
  78. }
  79. .svg-icon {
  80. cursor: pointer;
  81. vertical-align: middle;
  82. transition: fill .5s;
  83. width: 20px;
  84. height: 20px;
  85. }
  86. .svg-icon:hover {
  87. fill: #000;
  88. }
  89. .svg-icon {
  90. fill: #666;
  91. }
  92. .svg-icon.info {
  93. width: 14px;
  94. height: 16px;
  95. margin-left: .5ex;
  96. }
  97. .homepage {
  98. margin-left: 0.1em;
  99. margin-right: 0.1em;
  100. }
  101. .homepage[href=""] {
  102. display: none;
  103. }
  104. .homepage .svg-icon {
  105. margin-top: -4px;
  106. margin-left: .5ex;
  107. }
  108. .style-name {
  109. margin-top: .25em;
  110. overflow-wrap: break-word;
  111. }
  112. .style-name a, .style-edit-link {
  113. text-decoration: none;
  114. }
  115. .style-name-link:hover {
  116. text-decoration: underline;
  117. color: #000;
  118. }
  119. .applies-to {
  120. overflow-wrap: break-word;
  121. }
  122. .applies-to,
  123. .actions {
  124. padding-left: 15px;
  125. margin-bottom: 0;
  126. }
  127. .actions {
  128. display: flex;
  129. flex-wrap: wrap;
  130. align-items: center;
  131. }
  132. .actions > * {
  133. margin-bottom: .25rem;
  134. }
  135. .actions > *:not(:last-child) {
  136. margin-right: .25rem;
  137. }
  138. .applies-to label {
  139. margin-right: .5ex;
  140. }
  141. .applies-to .target:hover {
  142. background-color: rgba(128, 128, 128, .15);
  143. }
  144. .applies-to-extra:not([open]) {
  145. display: inline;
  146. margin-left: 1ex;
  147. }
  148. summary {
  149. font-weight: bold;
  150. cursor: pointer;
  151. outline: none;
  152. }
  153. .applies-to-extra summary {
  154. list-style-type: none; /* for FF, allegedly */
  155. }
  156. .applies-to-extra summary::-webkit-details-marker {
  157. display: none;
  158. }
  159. .disabled h2::after {
  160. font-weight: normal;
  161. font-size: 11px;
  162. text-transform: lowercase;
  163. background: rgba(128, 128, 128, .2);
  164. padding: 2px 5px 3px;
  165. border-radius: 4px;
  166. margin-left: 1ex;
  167. }
  168. .disabled {
  169. opacity: 0.5;
  170. }
  171. .disabled .disable {
  172. display: none;
  173. }
  174. .enabled .enable {
  175. display: none;
  176. }
  177. /* compact layout */
  178. .newUI #installed {
  179. display: table;
  180. margin-top: .75rem;
  181. margin-bottom: .75rem;
  182. }
  183. .newUI .disabled {
  184. opacity: 1;
  185. }
  186. .newUI .disabled .style-name,
  187. .newUI .disabled .applies-to {
  188. opacity: .5;
  189. }
  190. .newUI .entry {
  191. display: table-row;
  192. }
  193. .newUI .entry:nth-child(2n) {
  194. background-color: rgba(128, 128, 128, 0.05);
  195. }
  196. .newUI .entry > * {
  197. padding: .9rem 0 1rem;
  198. margin: 0;
  199. display: table-cell;
  200. vertical-align: middle;
  201. }
  202. .newUI .checker {
  203. position: relative;
  204. top: 1px;
  205. margin-right: 1ex;
  206. }
  207. .newUI .style-name {
  208. font-size: 14px;
  209. font-family: sans-serif;
  210. text-indent: -2em;
  211. padding-left: 3em;
  212. padding-right: 40px;
  213. }
  214. .newUI .homepage .svg-icon {
  215. position: absolute;
  216. margin-top: 0;
  217. margin-left: -28px;
  218. }
  219. .newUI .actions {
  220. width: 75px;
  221. height: 20px;
  222. white-space: nowrap;
  223. }
  224. .newUI .actions > * {
  225. margin: 0;
  226. }
  227. .newUI .actions .svg-icon {
  228. margin-right: 8px;
  229. }
  230. .newUI .updater-icons > * {
  231. transition: opacity 1s;
  232. display: none;
  233. }
  234. .newUI .entry .svg-icon {
  235. fill: #999;
  236. }
  237. .newUI .entry:hover .svg-icon {
  238. fill: #666;
  239. }
  240. .newUI .entry:hover .svg-icon:hover {
  241. fill: #000;
  242. }
  243. .newUI .checking-update .check-update {
  244. opacity: 0;
  245. display: inline;
  246. pointer-events: none;
  247. }
  248. .newUI .can-update .update,
  249. .newUI .no-update:not(.update-problem):not(.update-done) .up-to-date,
  250. .newUI .no-update.update-problem .check-update,
  251. .newUI .update-done .updated {
  252. display: inline;
  253. }
  254. .newUI .update-done .updated svg {
  255. top: -4px;
  256. position: relative;
  257. /* unprefixed since Chrome 53 */
  258. -webkit-filter: drop-shadow(0 4px 0 currentColor);
  259. filter: drop-shadow(0 5px 0 currentColor);
  260. }
  261. .newUI .can-update .update,
  262. .newUI .no-update.update-problem .check-update {
  263. cursor: pointer;
  264. }
  265. .newUI .can-update[data-details$="locally edited"] .update svg,
  266. .newUI .update-problem .check-update svg {
  267. fill: #ef6969;
  268. }
  269. .newUI .can-update[data-details$="locally edited"]:hover .update svg,
  270. .newUI .entry.update-problem:hover .check-update svg {
  271. fill: #fd4040;
  272. }
  273. .newUI .can-update[data-details$="locally edited"]:hover .update svg:hover,
  274. .newUI .entry.update-problem:hover .check-update svg:hover {
  275. fill: red;
  276. }
  277. .newUI .updater-icons > :not(.check-update):after {
  278. content: attr(title);
  279. position: absolute;
  280. margin-top: 18px;
  281. margin-left: -36px;
  282. padding: 1ex 1.5ex;
  283. border: 1px solid #ded597;
  284. background-color: #fffbd6;
  285. border-radius: 4px;
  286. box-shadow: 2px 3px 10px rgba(0,0,0,.25);
  287. font-size: 90%;
  288. animation: fadeout 10s;
  289. animation-fill-mode: both;
  290. z-index: 999;
  291. }
  292. .newUI .update-problem .check-update:after {
  293. background-color: red;
  294. border: 1px solid #d40000;
  295. color: white;
  296. animation: none;
  297. }
  298. .newUI .can-update .update:after {
  299. animation: none;
  300. }
  301. .newUI .can-update:not([data-details$="locally edited"]) .update:after {
  302. background-color: #c0fff0;
  303. border: 1px solid #89cac9;
  304. }
  305. .newUI .applies-to {
  306. padding-top: .25rem;
  307. padding-bottom: .25rem;
  308. }
  309. .newUI .targets {
  310. overflow: hidden;
  311. }
  312. .newUI .applies-to.expanded .targets {
  313. max-height: none;
  314. }
  315. .newUI .target {
  316. display: block;
  317. overflow: hidden;
  318. text-overflow: ellipsis;
  319. white-space: nowrap;
  320. max-width: calc(100vw - 280px - 60px - 25vw - 3rem);
  321. box-sizing: border-box;
  322. padding-right: 1rem;
  323. line-height: 18px;
  324. }
  325. .newUI .applies-to .expander {
  326. margin: 0;
  327. cursor: pointer;
  328. font-size: 3ex;
  329. line-height: .5ex;
  330. vertical-align: super;
  331. letter-spacing: .1ex;
  332. }
  333. .newUI .applies-to:not(.has-more) .expander {
  334. display: none;
  335. }
  336. .newUI .has-favicons .applies-to .expander {
  337. padding-left: 20px;
  338. }
  339. .newUI .target:hover {
  340. background-color: inherit;
  341. }
  342. .newUI .target img {
  343. width: 16px;
  344. height: 16px;
  345. vertical-align: sub;
  346. margin-left: -20px;
  347. margin-right: 4px;
  348. transition: opacity .5s, filter .5s;
  349. /* unprefixed since Chrome 53 */
  350. -webkit-filter: grayscale(1);
  351. filter: grayscale(1);
  352. /* workaround for the buggy CSS filter: images in the hidden overflow are shown on Mac */
  353. backface-visibility: hidden;
  354. opacity: .25;
  355. display: none;
  356. }
  357. .newUI .has-favicons .target {
  358. padding-left: 20px;
  359. }
  360. .newUI .has-favicons .target img[src] {
  361. display: inline;
  362. }
  363. .newUI .entry:hover .target img {
  364. opacity: 1;
  365. /* unprefixed since Chrome 53 */
  366. -webkit-filter: grayscale(0);
  367. filter: grayscale(0);
  368. }
  369. #newUIoptions {
  370. display: none;
  371. }
  372. .newUI #newUIoptions {
  373. display: initial;
  374. }
  375. #newUIoptions > * {
  376. display: flex;
  377. align-items: center;
  378. margin-bottom: auto;
  379. flex-wrap: wrap;
  380. }
  381. #newUIoptions input[type="number"] {
  382. width: 3em;
  383. margin-right: .5em;
  384. }
  385. input[id^="manage.newUI"] {
  386. margin-left: 0;
  387. }
  388. #faviconsHelp {
  389. overflow-y: auto;
  390. font-size: 90%;
  391. padding: 1ex 0 2ex 16px;
  392. }
  393. #faviconsHelp div {
  394. display: flex;
  395. align-items: center;
  396. margin-top: 1ex;
  397. }
  398. /* Default, no update buttons */
  399. .update,
  400. .check-update {
  401. display: none;
  402. }
  403. /* Check update button for things that can*/
  404. .updatable .check-update {
  405. display: inline;
  406. }
  407. /* Update check in progress */
  408. .checking-update .check-update {
  409. display: none;
  410. }
  411. /* Updates available */
  412. .can-update .update {
  413. display: inline;
  414. }
  415. .can-update[data-details$="locally edited"] button.update:after {
  416. content: "*";
  417. }
  418. .can-update .check-update {
  419. display: none;
  420. }
  421. /* Updates not available */
  422. .no-update:not(.update-problem) .check-update {
  423. display: none;
  424. }
  425. /* Updates done */
  426. .update-done .check-update {
  427. display: none;
  428. }
  429. #apply-all-updates:after {
  430. content: " (" attr(data-value) ")";
  431. }
  432. .update-in-progress #check-all-updates {
  433. position: relative;
  434. }
  435. .update-in-progress #update-progress {
  436. position: absolute;
  437. top: 0;
  438. left: 0;
  439. bottom: 0;
  440. background-color: currentColor;
  441. content: "";
  442. opacity: .35;
  443. }
  444. #check-all-updates-force {
  445. margin-top: 1ex;
  446. }
  447. /* highlight updated/added styles */
  448. .highlight {
  449. animation: highlight 10s cubic-bezier(0,.82,.47,.98);
  450. }
  451. @keyframes highlight {
  452. from {
  453. background-color: rgba(128, 128, 128, .5);
  454. }
  455. to {
  456. background-color: none;
  457. }
  458. }
  459. .hidden {
  460. display: none !important;
  461. }
  462. fieldset {
  463. border-width: 1px;
  464. border-radius: 6px;
  465. margin: 1em 0;
  466. min-width: 0;
  467. max-width: 250px;
  468. }
  469. fieldset > *:not(legend) {
  470. display: flex;
  471. align-items: center;
  472. }
  473. #filters {
  474. border: 1px solid transparent;
  475. }
  476. #filters.active {
  477. background-color: darkcyan;
  478. border-color: darkcyan;
  479. color: white;
  480. }
  481. #filters:not(.active) #filters-stats {
  482. display: none;
  483. }
  484. #filters-stats::before {
  485. content: ": ";
  486. }
  487. fieldset select {
  488. border: none;
  489. max-width: calc(100% - 2em);
  490. background-color: transparent;
  491. }
  492. #search {
  493. width: calc(100% - 4px);
  494. margin: 0.25rem 4px 0;
  495. border-radius: 0.25rem;
  496. padding-left: 0.25rem;
  497. border-width: 1px;
  498. }
  499. #import ul {
  500. margin-left: 0;
  501. padding-left: 0;
  502. list-style: none;
  503. }
  504. #import li {
  505. margin-bottom: .5em;
  506. }
  507. #import pre {
  508. background: #eee;
  509. overflow: auto;
  510. margin: 0 0 .5em 0;
  511. }
  512. /* drag-n-drop on import button */
  513. .dropzone:after {
  514. background-color: rgba(0, 0, 0, 0.7);
  515. color: white;
  516. left: 0;
  517. top: 0;
  518. right: 0;
  519. bottom: 0;
  520. z-index: 1000;
  521. position: fixed;
  522. padding: calc(50vh - 3em) calc(50vw - 5em);
  523. content: attr(dragndrop-hint);
  524. text-shadow: 1px 1px 10px black;
  525. font-size: xx-large;
  526. text-align: center;
  527. animation: fadein 1s cubic-bezier(.03, .67, .08, .94);
  528. animation-fill-mode: both;
  529. }
  530. .fadeout.dropzone:after {
  531. animation: fadeout .25s ease-in-out;
  532. animation-fill-mode: both;
  533. }
  534. /* post-import report */
  535. #message-box details:not([data-id="invalid"]) div:hover {
  536. background-color: rgba(128, 128, 128, .3);
  537. }
  538. #message-box details:not(:last-child) {
  539. margin-bottom: 1em;
  540. }
  541. #message-box details small div {
  542. margin-left: 1.5em;
  543. }
  544. .update-history-log {
  545. font-size: 11px;
  546. white-space: pre;
  547. overflow-x: hidden;
  548. text-overflow: ellipsis;
  549. }
  550. /* config dialog */
  551. .config-dialog .config-heading {
  552. float: right;
  553. margin: -1.25rem 0 0 0;
  554. font-size: 0.9em;
  555. }
  556. .config-dialog label {
  557. display: flex;
  558. padding: .75em 0;
  559. align-items: center;
  560. }
  561. .config-dialog label:first-child {
  562. padding-top: 0;
  563. }
  564. .config-dialog label:last-child {
  565. padding-bottom: 0;
  566. }
  567. .config-dialog label:not(:first-child) {
  568. border-top: 1px dotted #ccc;
  569. }
  570. .config-dialog label > :first-child {
  571. margin-right: 8px;
  572. flex-grow: 1;
  573. }
  574. .config-dialog label:not([disabled]) > :first-child {
  575. cursor: default;
  576. }
  577. .config-dialog label:not([disabled]):hover > :first-child {
  578. text-shadow: 0 0 0.01px rgba(0, 0, 0, .25);
  579. cursor: pointer;
  580. }
  581. .config-dialog input,
  582. .config-dialog select,
  583. .config-dialog .onoffswitch {
  584. width: 60px;
  585. margin: 0;
  586. height: 2em;
  587. box-sizing: border-box;
  588. vertical-align: middle;
  589. }
  590. .config-dialog select {
  591. width: auto;
  592. min-width: 60px;
  593. max-width: 124px;
  594. }
  595. .config-dialog .onoffswitch {
  596. height: auto;
  597. margin: calc((2em - 12px) / 2) 0;
  598. }
  599. .config-dialog input[type="text"] {
  600. padding-left: 0.25em;
  601. }
  602. .config-dialog label > :last-child {
  603. box-sizing: border-box;
  604. flex-shrink: 0;
  605. }
  606. .config-dialog label > :last-child:not(.onoffswitch) > :not(:last-child) {
  607. margin-right: 4px;
  608. }
  609. @keyframes fadein {
  610. from {
  611. opacity: 0;
  612. }
  613. to {
  614. opacity: 1;
  615. }
  616. }
  617. @keyframes fadeout {
  618. from {
  619. opacity: 1;
  620. }
  621. to {
  622. opacity: 0;
  623. }
  624. }
  625. @keyframes fadein-25pct {
  626. from {
  627. opacity: 0;
  628. }
  629. to {
  630. opacity: .25;
  631. }
  632. }
  633. @media (max-width: 675px) {
  634. #installed {
  635. position: static;
  636. padding-left: 0;
  637. overflow: visible;
  638. }
  639. #header p,
  640. #header fieldset div,
  641. #backup {
  642. display: inline-block;
  643. }
  644. #find-editor-styles {
  645. display: inline-block;
  646. }
  647. #backup {
  648. margin-right: 1em;
  649. }
  650. #backup p,
  651. #header fieldset {
  652. margin: 0;
  653. }
  654. .entry {
  655. margin: 0;
  656. }
  657. }
  658. @media (max-width: 800px) {
  659. body {
  660. flex-direction: column;
  661. }
  662. #header {
  663. height: auto;
  664. position: static;
  665. width: auto;
  666. border-right: none;
  667. border-bottom: 1px dashed #AAA;
  668. overflow: visible;
  669. -webkit-column-count: 2;
  670. -moz-column-count: 2;
  671. column-count: 2;
  672. }
  673. #installed {
  674. padding-left: 0;
  675. }
  676. fieldset {
  677. max-width: none;
  678. margin-top: 0;
  679. margin-right: 2em;
  680. }
  681. #header h1,
  682. #header h2,
  683. #header h3,
  684. #backup-message {
  685. display: none;
  686. }
  687. .newUI .entry {
  688. margin: 0;
  689. }
  690. .newUI .style-name {
  691. width: 50%;
  692. }
  693. .newUI .target {
  694. max-width: calc(50vw - 60px);
  695. }
  696. }
  697. @media (max-width: 500px) {
  698. #header {
  699. -webkit-column-count: 1;
  700. -moz-column-count: 1;
  701. column-count: 1;
  702. }
  703. .newUI #header > *:not(h1),
  704. .newUI #newUIoptions,
  705. #newUIoptions > *,
  706. fieldset label {
  707. display: inline;
  708. }
  709. fieldset {
  710. border: none;
  711. margin: 0;
  712. padding: 0 0 1em;
  713. }
  714. fieldset legend {
  715. display: none;
  716. }
  717. #header label {
  718. white-space: nowrap;
  719. }
  720. .newUI .style-name {
  721. word-break: break-all;
  722. }
  723. }