manage.css 12 KB

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