├── .editorconfig ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .mailmap ├── .stylelintrc ├── .travis.yml ├── AUTHORS ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── images ├── article-preview.png └── explorer-preview.png ├── package.json ├── pocket-dark.user.css └── tools ├── authors.sh └── fix-perfectionist.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | trim_trailing_whitespace = true 8 | end_of_line = lf 9 | charset = utf-8 10 | insert_final_newline = true 11 | 12 | [*.css] 13 | block_comment_start = /* 14 | block_comment = * 15 | block_comment_end = */ 16 | 17 | [*.svg] 18 | insert_final_newline = false 19 | 20 | [index.html] 21 | indent_size = none 22 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | root: true 2 | extends: eslint-config-silverwind 3 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # lockfiles 2 | package-lock.json 3 | yarn.lock 4 | 5 | # temp stuff 6 | tmp/ 7 | *.tmp 8 | *.bak 9 | 10 | # logs 11 | *.stackdump 12 | *.log 13 | 14 | # Build 15 | node_modules/ 16 | build.json 17 | *.build.css 18 | 19 | # Windows crap 20 | Thumbs.db 21 | Desktop.ini 22 | 23 | # Mac crap 24 | .DS_Store 25 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StylishThemes/Pocket-Dark/d8d9484dba38a0855ef896c5ceb8d142eeb6ec1e/.mailmap -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | # https://github.com/stylelint/stylelint/blob/master/docs/user-guide/rules.md 2 | # https://github.com/stylelint/stylelint-config-standard/blob/master/index.js 3 | 4 | extends: stylelint-config-standard 5 | ignoreFiles: "**/*.min.css" 6 | 7 | rules: 8 | at-rule-empty-line-before: null 9 | block-no-empty: null 10 | block-opening-brace-space-before: null 11 | color-hex-case: null 12 | color-named: null 13 | comment-empty-line-before: null 14 | comment-no-empty: null 15 | comment-whitespace-inside: null 16 | declaration-bang-space-before: null 17 | declaration-block-no-duplicate-properties: null 18 | declaration-block-single-line-max-declarations: null 19 | declaration-colon-newline-after: null 20 | font-family-name-quotes: always-where-recommended 21 | font-family-no-duplicate-names: true 22 | function-url-quotes: always 23 | function-comma-space-after: null 24 | indentation: null 25 | max-empty-lines: 0 26 | no-descending-specificity: null 27 | no-duplicate-selectors: null 28 | number-leading-zero: never 29 | number-max-precision: 3 30 | number-no-trailing-zeros: true 31 | rule-empty-line-before: null 32 | selector-combinator-space-after: null 33 | selector-combinator-space-before: null 34 | selector-list-comma-newline-after: null 35 | selector-pseudo-element-colon-notation: null 36 | selector-type-no-unknown: null 37 | string-quotes: double 38 | value-list-comma-newline-after: null 39 | property-no-unknown: null 40 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - node 4 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | # Authors ordered by first contribution. 2 | 3 | ddavison 4 | Dj 5 | Eddie James Carswell II 6 | the-j0k3r <31389848+the-j0k3r@users.noreply.github.com> 7 | 8 | # Generated by tools/authors.sh 9 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Pocket-Dark 2 | 3 | 1. [Getting Involved](#getting-involved) 4 | 2. [How To Report style issues](#how-to-report-style-issues) 5 | 3. [Style Guide](#style-guide) 6 | 4. [Getting Started](#getting-started) 7 | 8 | ## Getting Involved 9 | 10 | There are a number of ways to get involved with the development of this Pocket Dark theme. Even if you've never contributed to an Open Source project before, we're always looking for help identifying missing styles or other issues. 11 | 12 | ## How to Report Style issues 13 | 14 | ### I don't know CSS 15 | If you don't know CSS very well and have found a missing style, please include as much as possible of following information when opening an issue: 16 | 17 | * Screenshot of the problem; include the element(s) in the console if at all possible 18 | * To select an element, target it with your mouse then right-click and choose "Inspect Element" 19 | * Please include both the HTML view and the element with the problem in the screenshot (see [issue #119](https://github.com/StylishThemes/GitHub-Dark/issues/119) for an example from the GitHub-Dark repository) 20 | * A URL to the page (if public). 21 | 22 | ### I rock at CSS & GitHub! 23 | * Follow the style guide below 24 | * Make any needed changes, then send us a pull request 25 | * Please include a URL to the page (if public) 26 | 27 | ## Style Guide 28 | 29 | * Use the provided `.editorconfig` file with your code editor. Don't know what that is? Then check out http://editorconfig.org/. 30 | * Limit to the [K&R (KNF variation style)](https://en.wikipedia.org/wiki/Indentation_style#Variant:_BSD_KNF), and **2 SPACE INDENTATION** (no tabs, and not more, and not less than 2 spaces). 31 | 32 | * K&R - KNF Variation Example: 33 | ```css 34 | element[attr='value'] { 35 | ··property: value; 36 | } 37 | ``` 38 | 39 | * **Not Allman** 40 | ```css 41 | element[property='value'] 42 | { 43 | ··property: value; 44 | } 45 | ``` 46 | 47 | * Strict space between the `selector` and the `{`: 48 | ```css 49 | /* good */ 50 | element[attr='value'] { } 51 | 52 | /* bad */ 53 | element[attr='value']{ } 54 | ``` 55 | 56 | * 2 Space indentation 57 | ```css 58 | /* good */ 59 | ··property: value; 60 | 61 | /* bad */ 62 | ····property: value; 63 | ----property: value; 64 | ·property: value; 65 | ``` 66 | 67 | * Try to wrap lines at around 80 characters. 68 | * This style does not have a size limit, but: 69 | * Don't add any image URI's to the CSS; instead add the image into the `/images` directory; then point to using the following url: `http://StylishThemes.github.io/Pocket-Dark/images/{my-image.png}`. 70 | * If possible, reduce any added selectors. Remember that the style likely has an `!important` flag to override default styling, so a selector starting from the body isn't always necessary. 71 | * Don't add any inline comments. If you want to make a comment, add it as a note in the commit. 72 | * If your CSS definition already exists within the style, do not add it again! Add your selector to the existing definition. 73 | * Insert any new CSS selectors in any available slot before the style definition, or on a new line as needed. 74 | * If you want to add a new userstyle variable, please open an issue and discuss it with us first. 75 | * Don't include version bumps with your contribution, all releases are handled internally. 76 | * If your PR fixes an open issue or replaces another PR, include fixes/closes #issue-nr in your commit message title. [Read more on this](https://help.github.com/en/articles/closing-issues-using-keywords). 77 | 78 | ## Getting Started 79 | 80 | * [Download](https://github.com/StylishThemes/Pocket-Dark/archive/master.zip), [fork](https://github.com/StylishThemes/Pocket-Dark/fork) or clone this repository. 81 | * Use [node.js](http://nodejs.org/) to run `npm install`. 82 | * Make any changes to the `pocket-dark.user.css` file and save. 83 | 84 | ### Build & test 85 | 86 | * Create & change into a new branch of your local Pocket-Dark repository. 87 | * Open the style in the Stylus editor, and make sure to have "live preview" checked for testing. 88 | * Once you are satisfied with the changes, select all the CSS (Ctrl + a), copy (Ctrl + c) then paste (Ctrl + v) it into your editor. 89 | * Run `npm test` to test the CSS changes. 90 | * Now you can add and commit the changes of the `pocket-dark.user.css` file to your fork's branch. 91 | * If you haven't already contributed, then run `npm run authors` to add your name to our list of contributors :smile: 92 | * Push the changes to your branch, then submit a pull request. 93 | * And thanks again for contributing! 94 | 95 | ### Development Scripts 96 | 97 | * `npm run authors`: Runs a batch file to rebuild the `AUTHORS` file. Update the `.mailmap` file for any duplicate entries. 98 | * `npm run clean`: Runs the perfectionist script & cleans up after it. 99 | * `npm run eslint`: Lint the JavaScript code in the `tools` directory. 100 | * `npm run lint`: Run eslint & stylelint scripts. 101 | * `npm run major`: Creates a semantic major release. 102 | * `npm run minor`: Creates a semantic minor release. 103 | * `npm run patch`: Creates a semantic patch release. 104 | * `npm run perfectionist`: Runs perfectionist only. CSS is not cleaned! 105 | * `npm run stylelint`: Run stylelint on the CSS file. 106 | * `npm run test`: Same as `npm run lint`. 107 | * `npm run update`: Update development dependencies. 108 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Attribution-ShareAlike 4.0 International 2 | 3 | Creative Commons Corporation (“Creative Commons”) is not a law firm and does not 4 | provide legal services or legal advice. Distribution of Creative Commons public 5 | licenses does not create a lawyer-client or other relationship. Creative Commons 6 | makes its licenses and related information available on an “as-is” basis. 7 | Creative Commons gives no warranties regarding its licenses, any material 8 | licensed under their terms and conditions, or any related information. Creative 9 | Commons disclaims all liability for damages resulting from their use to the 10 | fullest extent possible. Using Creative Commons Public Licenses Creative Commons 11 | public licenses provide a standard set of terms and conditions that creators and 12 | other rights holders may use to share original works of authorship and other 13 | material subject to copyright and certain other rights specified in the public 14 | license below. The following considerations are for informational purposes only, 15 | are not exhaustive, and do not form part of our licenses. Considerations for 16 | licensors: Our public licenses are intended for use by those authorized to give 17 | the public permission to use material in ways otherwise restricted by copyright 18 | and certain other rights. Our licenses are irrevocable. Licensors should read 19 | and understand the terms and conditions of the license they choose before 20 | applying it. Licensors should also secure all rights necessary before applying 21 | our licenses so that the public can reuse the material as expected. Licensors 22 | should clearly mark any material not subject to the license. This includes other 23 | CC-licensed material, or material used under an exception or limitation to 24 | copyright. More considerations for licensors. Considerations for the public: By 25 | using one of our public licenses, a licensor grants the public permission to use 26 | the licensed material under specified terms and conditions. If the licensor’s 27 | permission is not necessary for any reason–for example, because of any 28 | applicable exception or limitation to copyright–then that use is not regulated 29 | by the license. Our licenses grant only permissions under copyright and certain 30 | other rights that a licensor has authority to grant. Use of the licensed 31 | material may still be restricted for other reasons, including because others 32 | have copyright or other rights in the material. A licensor may make special 33 | requests, such as asking that all changes be marked or described. Although not 34 | required by our licenses, you are encouraged to respect those requests where 35 | reasonable. More considerations for the public. 36 | 37 | Creative Commons Attribution-ShareAlike 4.0 International Public License 38 | 39 | By exercising the Licensed Rights (defined below), You accept and agree to be 40 | bound by the terms and conditions of this Creative Commons 41 | Attribution-ShareAlike 4.0 International Public License ("Public License"). To 42 | the extent this Public License may be interpreted as a contract, You are granted 43 | the Licensed Rights in consideration of Your acceptance of these terms and 44 | conditions, and the Licensor grants You such rights in consideration of benefits 45 | the Licensor receives from making the Licensed Material available under these 46 | terms and conditions. 47 | 48 | Section 1 – Definitions. 49 | 50 | a. Adapted Material means material subject to Copyright and Similar Rights that 51 | is derived from or based upon the Licensed Material and in which the Licensed 52 | Material is translated, altered, arranged, transformed, or otherwise modified in 53 | a manner requiring permission under the Copyright and Similar Rights held by the 54 | Licensor. For purposes of this Public License, where the Licensed Material is a 55 | musical work, performance, or sound recording, Adapted Material is always 56 | produced where the Licensed Material is synched in timed relation with a moving 57 | image. 58 | 59 | b. Adapter's License means the license You apply to Your Copyright and Similar 60 | Rights in Your contributions to Adapted Material in accordance with the terms 61 | and conditions of this Public License. 62 | 63 | c. BY-SA Compatible License means a license listed at 64 | creativecommons.org/compatiblelicenses, approved by Creative Commons as 65 | essentially the equivalent of this Public License. 66 | 67 | d. Copyright and Similar Rights means copyright and/or similar rights closely 68 | related to copyright including, without limitation, performance, broadcast, 69 | sound recording, and Sui Generis Database Rights, without regard to how the 70 | rights are labeled or categorized. For purposes of this Public License, the 71 | rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. 72 | 73 | e. Effective Technological Measures means those measures that, in the absence of 74 | proper authority, may not be circumvented under laws fulfilling obligations 75 | under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, 76 | and/or similar international agreements. 77 | 78 | f. Exceptions and Limitations means fair use, fair dealing, and/or any other 79 | exception or limitation to Copyright and Similar Rights that applies to Your use 80 | of the Licensed Material. 81 | 82 | g. License Elements means the license attributes listed in the name of a 83 | Creative Commons Public License. The License Elements of this Public License are 84 | Attribution and ShareAlike. 85 | 86 | h. Licensed Material means the artistic or literary work, database, or other 87 | material to which the Licensor applied this Public License. 88 | 89 | i. Licensed Rights means the rights granted to You subject to the terms and 90 | conditions of this Public License, which are limited to all Copyright and 91 | Similar Rights that apply to Your use of the Licensed Material and that the 92 | Licensor has authority to license. 93 | 94 | j. Licensor means the individual(s) or entity(ies) granting rights under this 95 | Public License. 96 | 97 | k. Share means to provide material to the public by any means or process that 98 | requires permission under the Licensed Rights, such as reproduction, public 99 | display, public performance, distribution, dissemination, communication, or 100 | importation, and to make material available to the public including in ways that 101 | members of the public may access the material from a place and at a time 102 | individually chosen by them. 103 | 104 | l. Sui Generis Database Rights means rights other than copyright resulting from 105 | Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 106 | on the legal protection of databases, as amended and/or succeeded, as well as 107 | other essentially equivalent rights anywhere in the world. 108 | 109 | m. You means the individual or entity exercising the Licensed Rights under this 110 | Public License. Your has a corresponding meaning. 111 | 112 | Section 2 – Scope. 113 | 114 | a. License grant. 115 | 116 | 1. Subject to the terms and conditions of this Public License, the Licensor 117 | hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, 118 | irrevocable license to exercise the Licensed Rights in the Licensed Material to: 119 | 120 | A. reproduce and Share the Licensed Material, in whole or in part; and 121 | 122 | B. produce, reproduce, and Share Adapted Material. 123 | 124 | 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and 125 | Limitations apply to Your use, this Public License does not apply, and You do 126 | not need to comply with its terms and conditions. 127 | 128 | 3. Term. The term of this Public License is specified in Section 6(a). 129 | 130 | 4. Media and formats; technical modifications allowed. The Licensor authorizes 131 | You to exercise the Licensed Rights in all media and formats whether now known 132 | or hereafter created, and to make technical modifications necessary to do so. 133 | The Licensor waives and/or agrees not to assert any right or authority to forbid 134 | You from making technical modifications necessary to exercise the Licensed 135 | Rights, including technical modifications necessary to circumvent Effective 136 | Technological Measures. For purposes of this Public License, simply making 137 | modifications authorized by this Section 2(a)(4) never produces Adapted 138 | Material. 139 | 140 | 5. Downstream recipients. 141 | 142 | A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed 143 | Material automatically receives an offer from the Licensor to exercise the 144 | Licensed Rights under the terms and conditions of this Public License. 145 | 146 | B. Additional offer from the Licensor – Adapted Material. Every recipient of 147 | Adapted Material from You automatically receives an offer from the Licensor to 148 | exercise the Licensed Rights in the Adapted Material under the conditions of the 149 | Adapter’s License You apply. 150 | 151 | C. No downstream restrictions. You may not offer or impose any additional or 152 | different terms or conditions on, or apply any Effective Technological Measures 153 | to, the Licensed Material if doing so restricts exercise of the Licensed Rights 154 | by any recipient of the Licensed Material. 155 | 156 | 6. No endorsement. Nothing in this Public License constitutes or may be 157 | construed as permission to assert or imply that You are, or that Your use of the 158 | Licensed Material is, connected with, or sponsored, endorsed, or granted 159 | official status by, the Licensor or others designated to receive attribution as 160 | provided in Section 3(a)(1)(A)(i). 161 | 162 | b. Other rights. 163 | 164 | 1. Moral rights, such as the right of integrity, are not licensed under this 165 | Public License, nor are publicity, privacy, and/or other similar personality 166 | rights; however, to the extent possible, the Licensor waives and/or agrees not 167 | to assert any such rights held by the Licensor to the limited extent necessary 168 | to allow You to exercise the Licensed Rights, but not otherwise. 169 | 170 | 2. Patent and trademark rights are not licensed under this Public License. 171 | 172 | 3. To the extent possible, the Licensor waives any right to collect royalties 173 | from You for the exercise of the Licensed Rights, whether directly or through a 174 | collecting society under any voluntary or waivable statutory or compulsory 175 | licensing scheme. In all other cases the Licensor expressly reserves any right 176 | to collect such royalties. 177 | 178 | Section 3 – License Conditions. 179 | 180 | Your exercise of the Licensed Rights is expressly made subject to the following 181 | conditions. 182 | 183 | a. Attribution. 184 | 185 | 1. If You Share the Licensed Material (including in modified form), You must: 186 | 187 | A. retain the following if it is supplied by the Licensor with the Licensed 188 | Material: 189 | 190 | i. identification of the creator(s) of the Licensed Material and any others 191 | designated to receive attribution, in any reasonable manner requested by the 192 | Licensor (including by pseudonym if designated); 193 | 194 | ii. a copyright notice; 195 | 196 | iii. a notice that refers to this Public License; 197 | 198 | iv. a notice that refers to the disclaimer of warranties; 199 | 200 | v. a URI or hyperlink to the Licensed Material to the extent reasonably 201 | practicable; 202 | 203 | B. indicate if You modified the Licensed Material and retain an indication of 204 | any previous modifications; and 205 | 206 | C. indicate the Licensed Material is licensed under this Public License, and 207 | include the text of, or the URI or hyperlink to, this Public License. 208 | 209 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner 210 | based on the medium, means, and context in which You Share the Licensed 211 | Material. For example, it may be reasonable to satisfy the conditions by 212 | providing a URI or hyperlink to a resource that includes the required 213 | information. 214 | 215 | 3. If requested by the Licensor, You must remove any of the information required 216 | by Section 3(a)(1)(A) to the extent reasonably practicable. 217 | 218 | b. ShareAlike.In addition to the conditions in Section 3(a), if You Share 219 | Adapted Material You produce, the following conditions also apply. 220 | 221 | 1. The Adapter’s License You apply must be a Creative Commons license with the 222 | same License Elements, this version or later, or a BY-SA Compatible License. 223 | 224 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's 225 | License You apply. You may satisfy this condition in any reasonable manner based 226 | on the medium, means, and context in which You Share Adapted Material. 227 | 228 | 3. You may not offer or impose any additional or different terms or conditions 229 | on, or apply any Effective Technological Measures to, Adapted Material that 230 | restrict exercise of the rights granted under the Adapter's License You apply. 231 | 232 | Section 4 – Sui Generis Database Rights. 233 | 234 | Where the Licensed Rights include Sui Generis Database Rights that apply to Your 235 | use of the Licensed Material: 236 | 237 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, 238 | reuse, reproduce, and Share all or a substantial portion of the contents of the 239 | database; 240 | 241 | b. if You include all or a substantial portion of the database contents in a 242 | database in which You have Sui Generis Database Rights, then the database in 243 | which You have Sui Generis Database Rights (but not its individual contents) is 244 | Adapted Material, including for purposes of Section 3(b); and 245 | 246 | c. You must comply with the conditions in Section 3(a) if You Share all or a 247 | substantial portion of the contents of the database. For the avoidance of 248 | doubt, this Section 4 supplements and does not replace Your obligations under 249 | this Public License where the Licensed Rights include other Copyright and 250 | Similar Rights. 251 | 252 | Section 5 – Disclaimer of Warranties and Limitation of Liability. 253 | 254 | a. Unless otherwise separately undertaken by the Licensor, to the extent 255 | possible, the Licensor offers the Licensed Material as-is and as-available, and 256 | makes no representations or warranties of any kind concerning the Licensed 257 | Material, whether express, implied, statutory, or other. This includes, without 258 | limitation, warranties of title, merchantability, fitness for a particular 259 | purpose, non-infringement, absence of latent or other defects, accuracy, or the 260 | presence or absence of errors, whether or not known or discoverable. Where 261 | disclaimers of warranties are not allowed in full or in part, this disclaimer 262 | may not apply to You. 263 | 264 | b. To the extent possible, in no event will the Licensor be liable to You on any 265 | legal theory (including, without limitation, negligence) or otherwise for any 266 | direct, special, indirect, incidental, consequential, punitive, exemplary, or 267 | other losses, costs, expenses, or damages arising out of this Public License or 268 | use of the Licensed Material, even if the Licensor has been advised of the 269 | possibility of such losses, costs, expenses, or damages. Where a limitation of 270 | liability is not allowed in full or in part, this limitation may not apply to 271 | You. 272 | 273 | c. The disclaimer of warranties and limitation of liability provided above shall 274 | be interpreted in a manner that, to the extent possible, most closely 275 | approximates an absolute disclaimer and waiver of all liability. 276 | 277 | Section 6 – Term and Termination. 278 | 279 | a. This Public License applies for the term of the Copyright and Similar Rights 280 | licensed here. However, if You fail to comply with this Public License, then 281 | Your rights under this Public License terminate automatically. 282 | 283 | b. Where Your right to use the Licensed Material has terminated under Section 284 | 6(a), it reinstates: 285 | 286 | 1. automatically as of the date the violation is cured, provided it is cured 287 | within 30 days of Your discovery of the violation; or 288 | 289 | 2. upon express reinstatement by the Licensor. 290 | 291 | c. For the avoidance of doubt, this Section 6(b) does not affect any right the 292 | Licensor may have to seek remedies for Your violations of this Public License. 293 | 294 | d. For the avoidance of doubt, the Licensor may also offer the Licensed Material 295 | under separate terms or conditions or stop distributing the Licensed Material at 296 | any time; however, doing so will not terminate this Public License. 297 | 298 | e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. 299 | 300 | Section 7 – Other Terms and Conditions. 301 | 302 | a. The Licensor shall not be bound by any additional or different terms or 303 | conditions communicated by You unless expressly agreed. 304 | 305 | b. Any arrangements, understandings, or agreements regarding the Licensed 306 | Material not stated herein are separate from and independent of the terms and 307 | conditions of this Public License. 308 | 309 | Section 8 – Interpretation. 310 | 311 | a. For the avoidance of doubt, this Public License does not, and shall not be 312 | interpreted to, reduce, limit, restrict, or impose conditions on any use of the 313 | Licensed Material that could lawfully be made without permission under this 314 | Public License. 315 | 316 | b. To the extent possible, if any provision of this Public License is deemed 317 | unenforceable, it shall be automatically reformed to the minimum extent 318 | necessary to make it enforceable. If the provision cannot be reformed, it shall 319 | be severed from this Public License without affecting the enforceability of the 320 | remaining terms and conditions. 321 | 322 | c. No term or condition of this Public License will be waived and no failure to 323 | comply consented to unless expressly agreed to by the Licensor. 324 | 325 | d. Nothing in this Public License constitutes or may be interpreted as a 326 | limitation upon, or waiver of, any privileges and immunities that apply to the 327 | Licensor or You, including from the legal processes of any jurisdiction or 328 | authority. 329 | 330 | Creative Commons is not a party to its public licenses. Notwithstanding, 331 | Creative Commons may elect to apply one of its public licenses to material it 332 | publishes and in those instances will be considered the “Licensor.” Except for 333 | the limited purpose of indicating that material is shared under a Creative 334 | Commons public license or as otherwise permitted by the Creative Commons 335 | policies published at creativecommons.org/policies, Creative Commons does not 336 | authorize the use of the trademark “Creative Commons” or any other trademark or 337 | logo of Creative Commons without its prior written consent including, without 338 | limitation, in connection with any unauthorized modifications to any of its 339 | public licenses or any other arrangements, understandings, or agreements 340 | concerning use of licensed material. For the avoidance of doubt, this paragraph 341 | does not form part of the public licenses.

Creative Commons may be contacted at 342 | creativecommons.org. 343 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Pocket Dark

2 |
3 |

4 | 5 | Tag 6 | 7 | 8 | Star 9 | 10 | 11 | Fork 12 | 13 | 14 | devDependencies 15 | 16 | 17 | BuildStatus 18 | 19 | 20 | Gitter 21 | 22 |

23 | 24 | ## Preview 25 | 26 | ![Explorer Preview](images/explorer-preview.png "Pocket with the dark style applied") 27 | 28 | ## Installation 29 | 30 | A userstyle extension is required: 31 | 32 | 🎨 Stylus for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/styl-us/), [Chrome](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne) or [Opera](https://addons.opera.com/en-gb/extensions/details/stylus/). 33 | 34 | Then: 35 | 36 | 📦 [Install the usercss](https://github.com/StylishThemes/Pocket-Dark/raw/master/pocket-dark.user.css). It supports automatic updates. 37 | 38 | ## Contributions 39 | 40 | If you would like to contribute to this repository, please... 41 | 42 | 1. 👓 Read the [contribution guidelines](CONTRIBUTING.md). 43 | 2. ![repo-forked](https://user-images.githubusercontent.com/136959/42383736-c4cb0db8-80fd-11e8-91ca-12bae108bccc.png) [fork](https://github.com/StylishThemes/Pocket-Dark/fork) or ![cloud-download](https://user-images.githubusercontent.com/136959/42401932-9ee9cae0-813d-11e8-8691-16e29a85d3b9.png) 44 | [Download](https://github.com/StylishThemes/Pocket-Dark/archive/master.zip), 45 | 3. 👌 Create a pull request! 46 | 47 | Thanks to all that have [contributed](AUTHORS) so far! 48 | -------------------------------------------------------------------------------- /images/article-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StylishThemes/Pocket-Dark/d8d9484dba38a0855ef896c5ceb8d142eeb6ec1e/images/article-preview.png -------------------------------------------------------------------------------- /images/explorer-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StylishThemes/Pocket-Dark/d8d9484dba38a0855ef896c5ceb8d142eeb6ec1e/images/explorer-preview.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pocket-dark", 3 | "title": "Pocket-Dark", 4 | "version": "1.2.11", 5 | "description": "A dark Pocket theme", 6 | "license": "CC-BY-SA-4.0", 7 | "repository": "https://github.com/StylishThemes/Pocket-Dark", 8 | "homepage": "https://github.com/StylishThemes/Pocket-Dark", 9 | "main": "pocket-dark.user.css", 10 | "engines": { 11 | "node": ">=10" 12 | }, 13 | "devDependencies": { 14 | "eslint": "^7.2.0", 15 | "eslint-config-silverwind": "^13.4.6", 16 | "perfectionist": "^2.4.0", 17 | "stylelint": "^13.6.1", 18 | "stylelint-config-standard": "^20.0.0", 19 | "updates": "^10.2.14", 20 | "versions": "^8.4.1" 21 | }, 22 | "scripts": { 23 | "authors": "bash tools/authors", 24 | "clean": "npm run perfectionist && node tools/fix-perfectionist.js", 25 | "eslint": "eslint tools/*.js", 26 | "major": "versions -p -C major pocket-dark.user.css", 27 | "minor": "versions -p -C minor pocket-dark.user.css", 28 | "patch": "versions -p -C patch pocket-dark.user.css", 29 | "perfectionist": "npx perfectionist pocket-dark.user.css pocket-dark.user.css --indentSize 2 --maxAtRuleLength 250", 30 | "stylelint": "stylelint pocket-dark.user.css", 31 | "test": "npm run eslint && npm run stylelint", 32 | "update": "updates -cu && npm install" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pocket-dark.user.css: -------------------------------------------------------------------------------- 1 | /* ==UserStyle== 2 | @name Pocket Dark 3 | @version 1.2.11 4 | @namespace StylishThemes 5 | @author StylishThemes 6 | @description Dark theme for Pocket 7 | @homepageURL https://github.com/StylishThemes/Pocket-Dark 8 | @supportURL https://github.com/StylishThemes/Pocket-Dark/issues 9 | @updateURL https://raw.githubusercontent.com/StylishThemes/Pocket-Dark/master/pocket-dark.user.css 10 | @license CC-BY-SA-4.0 11 | ==/UserStyle== */ 12 | @-moz-document domain("getpocket.com") { 13 | :root { 14 | --light-gray: #888; 15 | --light-gray-two: #777; 16 | --mid-gray: #222; 17 | --mid-gray-two: #333; 18 | --dark-gray: #505050; 19 | --dark-gray-two: #444; 20 | --dark-gray-three: #666; 21 | --icon-gray: #919191; 22 | --icon-gray-two: #989797; 23 | --mid-gray-three: #b2b2b2; 24 | --off-black: #181818; 25 | --black: #111; 26 | --really-black: #080808; 27 | --white: #eee; 28 | --deep-green: #007a73; 29 | --sky-blue: #1eabf9; 30 | --med-blue: #4885ed; 31 | --weird-blue: #478f8f; 32 | --light-blue: #5dcfca; 33 | --btn-red-one: #d3505a; 34 | --btn-red-two: #ee5f64; 35 | --btn-red-three: #d13644; 36 | --dark-red: #300; 37 | --light-red: #f33; 38 | --red: #f00; 39 | --color-textPrimary: #777; 40 | } 41 | /* front page */ 42 | .mktg-bg--l-gray { 43 | background-color: var(--light-gray); 44 | } 45 | .mktg-bg--m-gray { 46 | background-color: var(--mid-gray); 47 | } 48 | .mktg-bg--deep-green { 49 | background-color: var(--deep-green); 50 | } 51 | .mktg-bg--white { 52 | background-color: var(--white); 53 | } 54 | .mktg-container.mktg-bg--dancer { 55 | background-image: linear-gradient(90deg, rgba(0, 0, 0, .1) 0, rgba(0, 0, 0, .5)), 56 | url("https://assets.getpocket.com/web/main/Components/HomePage/dancer.55decab57ea433e9f70fb55f52fd8542.png"); 57 | } 58 | @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 59 | .mktg-container.mktg-bg--dancer { 60 | background-image: linear-gradient(90deg, rgba(0, 0, 0, .1) 0, rgba(0, 0, 0, .5)), 61 | url("https://assets.getpocket.com/web/main/Components/HomePage/dancer@2x.3668c6f32d26a1013690213e6e7b86ae.png"); 62 | } 63 | } 64 | .mktg-icon--gray path { 65 | fill: var(--icon-gray); 66 | } 67 | .mktg-icon--white path { 68 | fill: var(--white); 69 | } 70 | .home-page .mktg-homepage-signin { 71 | border: 1px solid var(--mid-gray-three); 72 | } 73 | .home-page .mktg-homepage-signin, .mktg-panel { 74 | color: var(--white); 75 | } 76 | .mktg-panel { 77 | min-width: var(--min-width); 78 | } 79 | .mktg-panel.mktg-panel--dark, .mktg-panel.mktg-panel--dark .mktg-panel__title { 80 | color: var(--white); 81 | } 82 | .mktg-panel__title { 83 | color: var(--white); 84 | } 85 | .mktg-button { 86 | background-color: var(--mid-gray); 87 | color: var(--white); 88 | } 89 | .mktg-button:hover { 90 | color: var(--white); 91 | } 92 | .mktg-button.mktg-button--cta { 93 | background-color: var(--sky-blue); 94 | color: var(--white); 95 | } 96 | .mktg-button.mktg-button--cta-dark { 97 | background-color: var(--med-blue); 98 | color: var(--white); 99 | } 100 | .mktg-button--cta-dark:hover, .mktg-button--cta:hover { 101 | color: var(--white); 102 | } 103 | .mktg-hero-link, .mktg-hero-link:hover { 104 | color: var(--white); 105 | } 106 | .mktg-hero__privacy-and-terms a { 107 | color: var(--white); 108 | } 109 | .mktg-signin__message { 110 | color: var(--white); 111 | } 112 | .mktg-header-strip { 113 | min-width: var(--min-width); 114 | } 115 | .mktg-header-strip__message { 116 | color: var(--black); 117 | } 118 | .mktg-header-strip__link, .mktg-header-strip__link:hover { 119 | color: var(--sky-blue); 120 | } 121 | .start-saving { 122 | background-image: linear-gradient(90deg, rgba(0, 0, 0, .4) 0, rgba(0, 0, 0, .4)), 123 | url("https://assets.getpocket.com/web/main/Components/HomePage/gardener.75c1df6cac26631dd7e3e0da697a7a41.png"); 124 | } 125 | @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 126 | .start-saving { 127 | background-image: linear-gradient(90deg, rgba(0, 0, 0, .4) 0, rgba(0, 0, 0, .4)), 128 | url("https://assets.getpocket.com/web/main/Components/HomePage/gardener@2x.aa97691a9a15b88da544df46d0706086.png"); 129 | } 130 | } 131 | .start-saving__title { 132 | color: var(--white); 133 | } 134 | .mktg-inner.mktg-inner--press { 135 | color: var(--white); 136 | } 137 | .app-stores { 138 | border-right: 1px solid var(--white); 139 | } 140 | .twitter-quote { 141 | color: var(--white); 142 | } 143 | .twitter-user { 144 | color: var(--white); 145 | } 146 | .twitter-bird path { 147 | fill: var(--white); 148 | } 149 | .webby-quote { 150 | color: var(--white); 151 | } 152 | .webby-quote__title { 153 | color: var(--white); 154 | } 155 | @media screen and (min-width: 900px) { 156 | .twitter-quote { 157 | border-left: 1px solid var(--white); 158 | border-right: 1px solid var(--white); 159 | } 160 | } 161 | .downloads__app-store, .downloads__app-store:hover, .downloads__play-store, 162 | .downloads__play-store:hover { 163 | color: transparent; 164 | } 165 | .mktg-footer__link { 166 | color: var(--white); 167 | } 168 | .mktg-footer__link a { 169 | color: var(--sky-blue); 170 | } 171 | .mktg-footer__link.mktg-footer__link--alt { 172 | color: var(--sky-blue); 173 | } 174 | .mktg-footer__copyright { 175 | color: var(--icon-gray-two); 176 | } 177 | .brandBlock aside, .brandBlock blockquote { 178 | background-color: transparent; 179 | } 180 | /* login/signup stuff */ 181 | @keyframes autofill { 182 | to { 183 | background-color: var(--dark-gray); 184 | background-image: none; 185 | color: var(--white); 186 | } 187 | } 188 | @-webkit-keyframes autofill { 189 | to { 190 | background-color: var(--dark-gray); 191 | background-image: none; 192 | color: var(--white); 193 | } 194 | } 195 | input:-webkit-autofill, input:-webkit-autofill:hover, 196 | input:-webkit-autofill:focus, textarea:-webkit-autofill, 197 | textarea:-webkit-autofill:hover, textarea:-webkit-autofill:focus, 198 | select:-webkit-autofill, select:-webkit-autofill:hover, 199 | select:-webkit-autofill:focus { 200 | animation-name: autofill !important; 201 | -webkit-animation-name: autofill !important; 202 | animation-fill-mode: both !important; 203 | -webkit-animation-fill-mode: both !important; 204 | } 205 | .header-global { 206 | box-shadow: 0 0 5px rgba(0, 0, 0, .15); 207 | -moz-box-shadow: 0 0 5px rgba(0, 0, 0, .15); 208 | -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .15); 209 | border-bottom: 1px solid var(--mid-gray-two); 210 | } 211 | .signup-disclaimer a { 212 | color: var(--icon-gray) !important; 213 | } 214 | .signup-disclaimer a:hover { 215 | color: var(--mid-gray-three) !important; 216 | } 217 | #__next footer.with-border { 218 | background-color: var(--mid-gray); 219 | border-top-color: var(--mid-gray-two); 220 | } 221 | .footer-global { 222 | border-top: 1px solid var(--mid-gray-two); 223 | } 224 | .header-global li:first-child a, .header-global nav a { 225 | border-top: .333em solid var(--mid-gray-two); 226 | } 227 | .isVisible aside { 228 | background-color: var(--mid-gray); 229 | } 230 | .coreform-container .btn-secondary, .coreform-container .btn-secondary:hover { 231 | color: var(--white); 232 | } 233 | .coreform-container h2 { 234 | border-bottom: 1px solid var(--dark-gray-three); 235 | } 236 | .coreform-container { 237 | background-color: var(--mid-gray); 238 | border: none; 239 | } 240 | .coreform-container h2, .coreform-container p { 241 | color: var(--icon-gray); 242 | } 243 | .coreform-container p > a { 244 | color: var(--med-blue); 245 | border: none; 246 | } 247 | .coreform-container .login-msg { 248 | background-color: var(--black); 249 | } 250 | .coreform-container .login-error { 251 | background: var(--dark-red); 252 | color: var(--light-red); 253 | } 254 | .coreform-container .error-bubble { 255 | background: var(--dark-red); 256 | border-color: var(--red); 257 | color: var(--light-red); 258 | } 259 | .coreform-container .error-arrow:after { 260 | background: var(--dark-red); 261 | } 262 | .container-bulkedit { 263 | background-color: inherit; 264 | } 265 | .bulkedit-cancel { 266 | border-color: var(--dark-gray-three); 267 | background-color: var(--dark-gray-three); 268 | } 269 | .edit-content, .page-edit .tag-detail { 270 | background-color: var(--mid-gray); 271 | border-color: var(--dark-gray-two); 272 | } 273 | .page-edit .item-detail { 274 | border-color: var(--dark-gray-two); 275 | } 276 | .page-edit h2, .page-extsave h2 { 277 | color: var(--mid-gray-three); 278 | } 279 | /* buttons everywhere */ 280 | a.btn.signupinterim-btn-login, a.btn.signupinterim-btn-signup, 281 | a.btn.btn-importantalt, a.button.button-disabled, .container a.button, 282 | a.btn-secondary { 283 | color: var(--white) !important; 284 | } 285 | a.btn-secondary-disabled, .btn-secondary-disabled.btn-disabled, .btn[disabled], 286 | .btn-important-disabled, .btn-important-disabled:active, 287 | .btn-important-disabled:focus, .btn-important-disabled:hover, 288 | .btn-secondary-disabled, .btn-secondary-disabled:active, 289 | .btn-secondary-disabled:focus, .btn-secondary-disabled:hover { 290 | background-image: none !important; 291 | color: var(--icon-gray) !important; 292 | } 293 | .btn-important, .btn-secondary, .login-btn-firefox .text, .login .btn-small { 294 | color: var(--white); 295 | text-shadow: none; 296 | } 297 | .btn, .login-btn-firefox { 298 | background-color: var(--btn-red-one); 299 | background-image: -webkit-gradient(left top, left bottom, color-stop(0, var(--btn-red-two)), color-stop(100%, var(--btn-red-one))); 300 | background-image: linear-gradient(180deg, var(--btn-red-two) 0, var(--btn-red-one)); 301 | border: 1px solid var(--btn-red-three); 302 | color: var(--white); 303 | text-shadow: none; 304 | } 305 | .btn-secondary, .signup-btn-google, .login-btn-firefox, .login-btn-email, 306 | .forgot-btn-submit, .btn-purchase-premium, #nav .login a { 307 | background-color: var(--dark-gray); 308 | background-image: -webkit-gradient(left top, left bottom, color-stop(0, var(--dark-gray)), color-stop(100%, var(--mid-gray-two))); 309 | background-image: linear-gradient(180deg, var(--dark-gray) 0, var(--mid-gray-two)); 310 | border-color: var(--mid-gray); 311 | } 312 | .btn:hover, .login-btn-firefox:hover { 313 | background-position: 0 -45px; 314 | color: var(--white); 315 | } 316 | .header-global nav .btn { 317 | background-color: var(--mid-gray-two); 318 | background-image: linear-gradient(180deg, var(--mid-gray) 0, var(--mid-gray-two)); 319 | border-top-color: var(--black); 320 | } 321 | /* root styling */ 322 | body { 323 | color: var(--icon-gray); 324 | background-color: var(--black) !important; 325 | border-color: var(--mid-gray); 326 | } 327 | #warning-browserincompatible { 328 | background-color: var(--black); 329 | } 330 | /* main nav */ 331 | #header { 332 | border-bottom-color: var(--dark-gray); 333 | } 334 | #header #nav .login a { 335 | color: var(--white) !important; 336 | text-shadow: none; 337 | border: none; 338 | } 339 | #header #nav li a, .header-global li:first-child a, .header-global nav a { 340 | border-color: var(--mid-gray-two); 341 | } 342 | #header #nav li a:hover, #header #nav li.selected { 343 | border-color: var(--light-blue); 344 | } 345 | .header-global nav a:hover { 346 | border-color: var(--light-blue); 347 | } 348 | .navbar .navbar-inner { 349 | background: var(--black); 350 | } 351 | .portal-nav ul li a, .header-nav-lacroix nav a { 352 | color: var(--light-gray); 353 | } 354 | .portal-nav, .portal-header, .header-global, .story-footer-container, 355 | .footer-global, .publisher-cta .cta-button:hover { 356 | color: var(--light-gray-two); 357 | background-color: var(--mid-gray); 358 | } 359 | #__next > header { 360 | background-color: var(--mid-gray); 361 | border-bottom-color: var(--dark-gray-two); 362 | } 363 | .css-1h60lfy, .mktg-footer, .package .wrapper { 364 | background-color: var(--black); 365 | } 366 | .css-ff0ul7 { 367 | background-color: var(--black); 368 | border-color: var(--dark-gray-two); 369 | color: var(--white); 370 | } 371 | .css-obxhop { 372 | background-color: var(--mid-gray); 373 | } 374 | .css-10scaen { 375 | color: var(--light-gray) !important; 376 | } 377 | .css-rg5q7m { 378 | color: var(--light-gray); 379 | } 380 | .css-4z0h1o, .css-4z0h1o:hover { 381 | color: var(--light-gray-two); 382 | } 383 | .css-7m0e3m-ExploreContainer { 384 | border-bottom: var(--dark-gray-three); 385 | background-color: var(--mid-gray); 386 | } 387 | .css-z6iw5e-SearchInput { 388 | color: var(--light-gray-two); 389 | background-color: var(--black); 390 | border-color: var(--dark-gray-three); 391 | } 392 | header div.logo { 393 | filter: brightness(1.5); 394 | } 395 | /* signup and login */ 396 | .forgot-content, .signup-content, .wrapper-savefrombrowser, .wrapper-unlimited, 397 | .wrapper-waystosave { 398 | background: var(--black); 399 | } 400 | .wrapper-viewfrom { 401 | background-color: var(--mid-gray); 402 | } 403 | .signup-ordivider { 404 | filter: brightness(50%); 405 | } 406 | .page-add h2, .page-add h3 { 407 | color: var(--light-gray-two); 408 | } 409 | /* article page */ 410 | .story-content h1, .story-content h2, .syndication-article-header { 411 | color: var(--light-gray-two); 412 | } 413 | .story-content p, .story-content q, .body, 414 | .outgoing-links .outgoing-links-article-title, .page-add p { 415 | color: var(--icon-gray); 416 | } 417 | .article-join-us .message, .syndicated-article-byline, .publisher-cta, 418 | .publisher-cta .cta-button { 419 | color: var(--mid-gray-three); 420 | } 421 | .article-join-us a:hover, .story-content a:hover, #__next a:hover, 422 | .more-from-pocket .related-article .details .title:hover { 423 | color: var(--sky-blue); 424 | } 425 | h1, h2, h3, h4, h5, h6 { 426 | color: var(--mid-gray-three) !important; 427 | } 428 | .syndication-article-header .subhead { 429 | color: var(--light-gray) !important; 430 | } 431 | .story-page .story-content ul li p, .story-page .story-content ul li span, 432 | .story-page .story-content ol li, .story-page .story-content ul li, 433 | .story-content ol.numlist li, .story-page .blockquote p, 434 | .story-page .blockquote q { 435 | color: var(--light-gray); 436 | } 437 | .story-page .footer .signoff p, .comments .comment .content .date { 438 | color: var(--dark-gray-three); 439 | } 440 | .mfp-divider { 441 | border-color: var(--mid-gray-two); 442 | } 443 | .footer .divider { 444 | background-color: var(--mid-gray-two); 445 | } 446 | .comments .comment .comment-text { 447 | border-color: var(--dark-gray-two); 448 | } 449 | .more-from-pocket .related-article .details .title, .story-content a, 450 | .story-content a:visited, .article-join-us a, 451 | .syndicated-article-byline .publisher-name a, 452 | .outgoing-links .outgoing-links-article-title { 453 | color: var(--med-blue); 454 | text-shadow: none; 455 | } 456 | .footer .signoff .publisher-logo, 457 | .more-from-pocket .related-article .details .publisher-logo { 458 | filter: invert(90%) brightness(80%); 459 | } 460 | .css-d86t8w { 461 | background-color: var(--mid-gray); 462 | border-color: var(--dark-gray-two); 463 | } 464 | /* explore page */ 465 | .portal_intro { 466 | background-color: var(--dark-gray); 467 | border-bottom-color: var(--dark-gray-three); 468 | } 469 | .topic-heading h2 { 470 | color: var(--light-gray); 471 | } 472 | .best_of_list, .topic-heading, .trending_list, body.pocket-hits #container { 473 | background-color: var(--black); 474 | } 475 | .portal_list .item { 476 | background-color: var(--mid-gray); 477 | } 478 | .topic-heading p, .item_content p { 479 | color: var(--icon-gray); 480 | } 481 | .flag-trending { 482 | background-color: var(--med-blue); 483 | } 484 | .flag { 485 | color: var(--white); 486 | } 487 | .title_sponsor a, .title a, body.pocket-hits a, body.pocket-hits .post_title a { 488 | color: var(--med-blue); 489 | } 490 | #__next article > a .title span { 491 | background: transparent; 492 | text-shadow: none; 493 | } 494 | /* queue page */ 495 | #queue_empty p, .nav-default a { 496 | color: var(--icon-gray) !important; 497 | } 498 | .no-touch .nav-default a:hover { 499 | color: var(--light-blue) !important; 500 | } 501 | .item_image { 502 | border-bottom-color: var(--icon-gray); 503 | } 504 | .gsf_device_reminder { 505 | background-color: var(--mid-gray-two); 506 | border-color: var(--dark-gray-two); 507 | } 508 | .gsf_device_reminder p { 509 | color: var(--icon-gray-two); 510 | } 511 | /* side-nav cant be a different color than the list bg else somethin looks broken */ 512 | .side-nav { 513 | background-color: inherit; 514 | } 515 | .nav-list li.active a { 516 | color: var(--white) !important; 517 | } 518 | .nav-default .nav-selected, .nav-default .nav-selected:hover { 519 | color: var(--white) !important; 520 | } 521 | .nav-default-divider { 522 | border-bottom-color: var(--icon-gray); 523 | } 524 | #page .pkt-nav, .overflow-nav { 525 | background-color: var(--mid-gray); 526 | border: none; 527 | } 528 | .flexbox #pagenav_options > a, 529 | .pkt-nav .pagenav_sectiontoggle .queue_explore_option, 530 | .pkt-nav .pagenav_sectiontoggle .queue_togglesection_option { 531 | color: var(--light-gray); 532 | } 533 | #pagenav_searchicon > a, #pagenav_addarticle > a, #pagenav_inbox > a, 534 | #pagenav_options_container .nav-icon, #pagenav_options .nav-downnotch, 535 | .gsf_device_reminder .close { 536 | filter: invert(70%); 537 | } 538 | #pagenav_searchicon > a:hover, #pagenav_addarticle a:hover, 539 | #pagenav_inbox a:hover { 540 | filter: invert(0%) brightness(100%); 541 | } 542 | .pagenav_gridview > a:hover, .pagenav_bulkedit a:hover, 543 | .pagenav_gridlist a:hover { 544 | filter: brightness(290%); 545 | } 546 | .popover-new-listitem a:hover span { 547 | filter: brightness(100%) !important; 548 | } 549 | #pagenav_optionsdivider { 550 | border-left-color: var(--icon-gray); 551 | } 552 | #pagenav_options_container .popover-new { 553 | color: var(--light-gray); 554 | background-color: var(--mid-gray-two); 555 | border: none; 556 | } 557 | .pkt-nav .pagenav_sectiontoggle .queue_togglesection_optionselected { 558 | color: var(--light-blue); 559 | } 560 | .popover-new-centeredleft .arrow, .popover-new-centeredleft .arrow::after { 561 | border-right-color: var(--mid-gray-two); 562 | } 563 | .popover-new-bottom .arrow, .popover-new-bottom .arrow:after, 564 | .popover-new-bottomleft .arrow, .popover-new-bottomleft .arrow:after, 565 | .popover-new-bottomright .arrow { 566 | border-bottom-color: var(--mid-gray-two) !important; 567 | } 568 | .popover-new .arrow, .popover-new .arrow::after { 569 | border-color: transparent; 570 | } 571 | .no-touch .popover-new .popover-new-list a:hover { 572 | background-color: var(--mid-gray); 573 | } 574 | #pagenav_options_container .premium { 575 | border: none; 576 | } 577 | #pagenav_options_container .popover-new-list a { 578 | color: var(--icon-gray); 579 | } 580 | .pagination ul > li > a, .pagination ul > li > span { 581 | background-color: var(--mid-gray-two) !important; 582 | border-color: var(--black) !important; 583 | } 584 | .pagination ul > li > a:hover, .pagination ul > li > a:focus, 585 | .pagination ul > .active > a, .pagination ul > .active > span { 586 | background-color: var(--med-blue) !important; 587 | color: var(--white); 588 | } 589 | .pagination ul > .active > a, .pagination ul > .active > span { 590 | color: var(--light-gray); 591 | background-color: var(--mid-gray-two) !important; 592 | } 593 | .pagination ul > .disabled > span, .pagination ul > .disabled > a, 594 | .pagination ul > .disabled > a:hover, .pagination ul > .disabled > a:focus { 595 | color: var(--light-gray) !important; 596 | background-color: transparent !important; 597 | } 598 | .page_queue_list .item_content, .page_queue_grid .item_content, 599 | .page_queue_grid .item .sub, .item_content_text, .recommend_footer { 600 | background-color: var(--mid-gray-two); 601 | border: none; 602 | } 603 | .recommend_footer .item_content_actionscontainer:hover a, 604 | .recommend_footer .item_content_actionscontainer:hover span { 605 | color: var(--btn-red-three); 606 | } 607 | .item_content_actionscontainer { 608 | border-top-color: var(--dark-gray); 609 | } 610 | .persistent-actions .save-pocket { 611 | filter: invert(1) brightness(80%); 612 | } 613 | .persistent-actions .save-pocket:hover { 614 | filter: none; 615 | } 616 | .page_queue_grid .item .title, .page_queue_list .item .title { 617 | color: var(--icon-gray); 618 | } 619 | .page_queue_grid .item .buttons, 620 | .no-touch .page_queue_grid .item:hover .buttons { 621 | background-color: var(--mid-gray-two); 622 | } 623 | .item .buttons a:hover { 624 | filter: invert(100%); 625 | } 626 | .page-queue .popover-new { 627 | background-color: var(--mid-gray-two); 628 | border: none; 629 | } 630 | #addMenu .container { 631 | background-color: var(--mid-gray-two); 632 | } 633 | #addMenu .container input { 634 | border: none; 635 | } 636 | #addMenu .container h5 { 637 | color: var(--light-gray); 638 | } 639 | #addMenu .container p { 640 | background-color: var(--mid-gray-two); 641 | color: var(--light-gray); 642 | } 643 | /* queue search */ 644 | .searchtoolbar_screenbar { 645 | background-color: var(--mid-gray); 646 | } 647 | .searchtoolbar_screen { 648 | background-color: var(--black); 649 | } 650 | .wrapper_search, .wrapper_search_loading { 651 | background-color: var(--black); 652 | border: none; 653 | } 654 | #search_close > a, #searchnav_sortby > a { 655 | filter: invert(70%); 656 | } 657 | #searchSortMenu .search-sortby-options .search-sortby-selected { 658 | filter: invert(1) hue-rotate(180deg); 659 | } 660 | #searchSortMenu .search-sortby-options .search-sortby-selected:hover { 661 | filter: invert(100%) hue-rotate(180deg) brightness(90%); 662 | } 663 | #searchSortMenu .search-sortby-options a { 664 | filter: none; 665 | color: var(--icon-gray); 666 | } 667 | #searchSortMenu .container, .search-instr-recent, .section-filter, 668 | .section-filter .section-filter-options { 669 | background-color: var(--mid-gray-two); 670 | border: none; 671 | } 672 | .section-filter-value, .section-filter .section-filter-options a { 673 | color: var(--mid-gray-three); 674 | } 675 | .section-filter-disabled .section-filter-downnotch { 676 | opacity: .7; 677 | filter: invert(1); 678 | } 679 | .section-filter-downnotch { 680 | opacity: 1; 681 | filter: invert(1); 682 | } 683 | #searchSortMenu .search-sortby-options a:hover, 684 | .no-touch .section-filter .section-filter-options a:hover { 685 | background-color: var(--dark-gray); 686 | } 687 | /* reader view */ 688 | .page-reader #page .pkt-nav, .reader_explore_bar { 689 | background-color: var(--mid-gray); 690 | border: none; 691 | } 692 | .flexbox .toolbar_reader .icons { 693 | filter: invert(30%); 694 | } 695 | .page-reader .popover-new { 696 | color: var(--light-gray); 697 | background-color: var(--mid-gray-two); 698 | border: none; 699 | } 700 | .page-reader .pkt-nav { 701 | border: none; 702 | } 703 | #styleMenu .pkt-nav .icons { 704 | border-color: var(--dark-gray); 705 | } 706 | #styleMenu .textoptions_theme { 707 | border-color: var(--dark-gray); 708 | } 709 | #styleMenu .textoptions_font > li { 710 | border-color: var(--light-gray-two); 711 | } 712 | #styleMenu .textoptions_font .selected { 713 | background-color: var(--light-gray-two); 714 | } 715 | .reader_head h1 { 716 | color: var(--light-gray-two); 717 | } 718 | .reader_content, #addMenu .container input { 719 | color: var(--icon-gray); 720 | } 721 | .popover-new .popover-new-list a { 722 | color: var(--light-gray); 723 | } 724 | ::selection { 725 | background: var(--dark-gray-three); 726 | color: var(--icon-gray); 727 | } 728 | .overlay_screen_light { 729 | background: var(--black); 730 | } 731 | .overlay_screen_light h2, .overlay_screen_light p { 732 | border-bottom-color: var(--dark-gray-two); 733 | color: var(--icon-gray); 734 | } 735 | .overlay_screen .overlay_detail { 736 | color: var(--light-gray); 737 | background-color: var(--mid-gray-two); 738 | } 739 | .overlay_screen_light .overlay_createpasswordcontainer { 740 | background: var(--mid-gray-two); 741 | border-color: var(--dark-gray-two); 742 | color: var(--white); 743 | } 744 | .overlay_screen_light .form-field input, .page-account .legacy-content h2, 745 | .page-account .change-options, .page-account .legacy-content .validate, 746 | #addMenu .container input, .coreform-container .form-field input { 747 | border-color: var(--icon-gray); 748 | } 749 | .token-input-dropdown-fortag, .token-input-list { 750 | border: none; 751 | background-color: var(--black); 752 | color: var(--light-gray-two); 753 | } 754 | .token-input-token { 755 | border: none; 756 | background-color: var(--mid-gray-two); 757 | color: var(--light-gray); 758 | } 759 | .token-input-list li input { 760 | background-color: var(--mid-gray-two); 761 | } 762 | .token-input-selected-token { 763 | background-color: var(--dark-gray); 764 | } 765 | .overlay_screen .overlay_detail .close { 766 | filter: invert(70%); 767 | } 768 | /* account page */ 769 | .page-account .legacy-content h2 { 770 | color: var(--icon-gray); 771 | } 772 | .legacy-content { 773 | border-color: var(--dark-gray); 774 | } 775 | .legacy-content a:hover, .legacy-sidebar a:hover { 776 | color: var(--light-blue); 777 | } 778 | .legacy-sidebar h5 > a, .page-account .legacy-content h4, #sidebar ul li a { 779 | color: var(--icon-gray-two); 780 | } 781 | #sidebar h3, #sidebar h3 a { 782 | color: var(--icon-gray-two); 783 | text-shadow: none; 784 | } 785 | .content-welcome { 786 | background: var(--mid-gray); 787 | border-color: var(--dark-gray); 788 | } 789 | #content, .content_section { 790 | background: var(--mid-gray) !important; 791 | border-color: var(--icon-gray) !important; 792 | box-shadow: 0 1px 0 0 var(--mid-gray) !important; 793 | } 794 | .contentWrapper { 795 | background-color: var(--black); 796 | color: var(--mid-gray-two); 797 | border-color: var(--mid-gray-two); 798 | } 799 | .app_icons li a, .app_icons li small, .app_rows li a { 800 | color: var(--icon-gray); 801 | } 802 | .app_icons li a:hover { 803 | color: var(--icon-gray-two); 804 | filter: brightness(120%); 805 | } 806 | .app_rows li a:hover { 807 | background-color: var(--mid-gray); 808 | } 809 | .app_rows li { 810 | border-color: var(--dark-gray-two); 811 | } 812 | .page-account .options_list li { 813 | border-bottom-color: var(--mid-gray-two); 814 | background: var(--mid-gray-two); 815 | } 816 | /* help page */ 817 | #fullArticle, #fullArticle p, #fullArticle ul, #fullArticle ol, 818 | #fullArticle li, #fullArticle div, #fullArticle blockquote, #fullArticle dd, 819 | #fullArticle table { 820 | color: var(--icon-gray); 821 | } 822 | #fullArticle h1, #fullArticle h2, #fullArticle h3, #fullArticle h4, 823 | #fullArticle h5, #categoryHead h1, .contentWrapper .articleList a, 824 | .category-list h3 { 825 | color: var(--light-gray-two); 826 | } 827 | #fullArticle .callout-yellow, #fullArticle .callout-blue, 828 | #fullArticle .callout-red, #fullArticle .callout-green, #fullArticle .callout, 829 | #fullArticle .private-note, .category-list .category, .modal { 830 | background-color: var(--mid-gray); 831 | } 832 | #sidebar .nav-list a:hover, #sidebar .nav-list a:focus { 833 | color: var(--dark-gray); 834 | } 835 | #sidebar .nav-list .active a, #sidebar .nav-list .active a:hover, 836 | #sidebar .nav-list .active a:focus { 837 | color: var(--mid-gray-two); 838 | } 839 | .category-list .category { 840 | border-color: var(--mid-gray-two); 841 | } 842 | .category-list .category:hover { 843 | background-color: var(--dark-gray-two); 844 | } 845 | .category-list .category:hover h3 { 846 | color: var(--white); 847 | } 848 | #docsSearch { 849 | background: var(--mid-gray-two); 850 | border-bottom: 1px solid var(--mid-gray-two); 851 | } 852 | #contactModal h2, .abuse h2 { 853 | background-color: var(--black); 854 | } 855 | /* search boxes */ 856 | .explore_search input { 857 | border-color: var(--icon-gray); 858 | } 859 | .explore_search input, .explore_search.search_toolbar input, 860 | #sidebar form .search-query { 861 | color: var(--white); 862 | background-color: var(--black); 863 | } 864 | #serp-dd { 865 | border-color: var(--dark-gray); 866 | } 867 | #serp-dd .result { 868 | color: var(--icon-gray); 869 | background-color: var(--mid-gray); 870 | } 871 | #serp-dd .result > li.active, #serp-dd .result a:hover { 872 | background-color: var(--mid-gray-two); 873 | } 874 | select, textarea, input[type="text"], input[type="password"], 875 | input[type="datetime"], input[type="datetime-local"], input[type="date"], 876 | input[type="month"], input[type="time"], input[type="week"], 877 | input[type="number"], input[type="email"], input[type="url"], 878 | input[type="search"], input[type="tel"], input[type="color"], 879 | .uneditable-input, #sidebar form .search-query { 880 | color: var(--icon-gray); 881 | background-color: var(--black); 882 | border: 1px solid var(--mid-gray-two); 883 | } 884 | textarea:focus, input:focus, input[type="text"]:focus, 885 | input[type="password"]:focus, input[type="datetime"]:focus, 886 | input[type="datetime-local"]:focus, input[type="date"]:focus, 887 | input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, 888 | input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, 889 | input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, 890 | .uneditable-input:focus, #sidebar form .search-query:focus { 891 | color: var(--white) !important; 892 | border-color: var(--med-blue) !important; 893 | opacity: .6; 894 | } 895 | .most-pop-articles .popArticles li a { 896 | color: var(--mid-gray-three); 897 | } 898 | /* Premium page */ 899 | .premium-form > form { 900 | background-color: var(--mid-gray); 901 | border: none; 902 | } 903 | .page-premium .premium-form .premium-divider, .premium-tabledetail .row, 904 | .page-premium .premium-divider { 905 | border-color: var(--dark-gray-three); 906 | } 907 | .page-premium .premium-form .premium-divider > h5 { 908 | background-color: var(--mid-gray); 909 | } 910 | .premium-form .toggle-yrmth { 911 | background-color: var(--mid-gray-two); 912 | } 913 | .premium-form .toggle-yrmth-selected { 914 | background-color: var(--dark-gray); 915 | } 916 | .premium-form .toggle-yrmth:hover, .premium-form .toggle-yrmth-selected:hover { 917 | background-color: var(--black); 918 | } 919 | .premiumform-container .form-field label { 920 | color: var(--light-gray-two); 921 | } 922 | .page-premium .premium-features h4 { 923 | color: var(--white); 924 | } 925 | .page-premium .premium-form, .page-premium .premium-divider > h5 { 926 | background-color: var(--black); 927 | } 928 | .premium-tabledetail p, .premium-tabledetail h5 { 929 | color: var(--light-gray-two); 930 | } 931 | .premium-tabledetail .featuretable-premium h5 { 932 | color: var(--light-blue); 933 | } 934 | .premium-tabledetail .row-header .featuretable-premium { 935 | background-color: var(--black); 936 | } 937 | .premium-tabledetail .check { 938 | filter: brightness(80%); 939 | } 940 | .premium-hero figure { 941 | filter: invert(100%) hue-rotate(180deg); 942 | } 943 | .premium-hero p, .hero-tile p, .quote-tile .quote, .stats-tile .post { 944 | color: var(--light-gray-two); 945 | } 946 | .package .plan { 947 | color: var(--light-gray); 948 | } 949 | /* secondary pages */ 950 | .legacy-container { 951 | background-color: var(--black); 952 | } 953 | .legacy-content { 954 | background-color: var(--mid-gray); 955 | } 956 | .legacy-sidebar h3, .legacy-sidebar h5 { 957 | color: var(--white); 958 | } 959 | /* jobs page */ 960 | .page-jobs .job-list ul { 961 | background-color: var(--mid-gray-two); 962 | } 963 | /* sponsor page */ 964 | .page-sponsor > section:nth-child(2n), .page-sponsor .hero-bottom .copy { 965 | background-color: var(--mid-gray); 966 | } 967 | .page-sponsor section, h1, h2, h3, h4, h5, h6 { 968 | color: inherit; 969 | } 970 | .page-sponsor .partners .logo-list li { 971 | filter: invert(100%); 972 | } 973 | /* eoy section */ 974 | .eoy--2018 .eoy-top-publishers { 975 | background-color: var(--mid-gray); 976 | } 977 | .eoy, .eoy--2018.eoy .eoy-publisher-link h3 { 978 | color: var(--light-gray-two); 979 | } 980 | .eoy--2018 .eoy-hero, .eoy .eoy-cheers { 981 | background-color: var(--mid-gray-two); 982 | } 983 | .eoy--2018.eoy .eoy-publisher-link h3:hover { 984 | color: var(--dark-gray); 985 | } 986 | /* blog */ 987 | #sidebar .widget-title, .sidebar_content .post-title { 988 | color: var(--light-gray-two) !important; 989 | } 990 | #header, .site-footer, .sidebar_content #content { 991 | background-color: var(--mid-gray); 992 | } 993 | .post-title a:link, .post-title a:visited, .post-title a:hover, 994 | .post-title a:focus, a:link, a:visited { 995 | color: var(--med-blue); 996 | } 997 | /* developer page */ 998 | .banner_preferencesapi a { 999 | background: var(--mid-gray-two) !important; 1000 | } 1001 | #container footer { 1002 | background-color: var(--mid-gray); 1003 | border-top-color: var(--icon-gray); 1004 | border-bottom-color: var(--icon-gray); 1005 | } 1006 | #sidebar h5 { 1007 | color: var(--mid-gray-three); 1008 | text-shadow: none; 1009 | } 1010 | #sidebar a:hover { 1011 | color: var(--light-blue); 1012 | } 1013 | img[src*="mask70.png"] { 1014 | opacity: 0; 1015 | } 1016 | .welcome header, .welcome .description, #content.landing .learn_more h2, 1017 | #content.landing .learn_more h4 { 1018 | color: var(--icon-gray); 1019 | } 1020 | .code { 1021 | color: var(--white); 1022 | background-color: var(--black); 1023 | } 1024 | .codefont { 1025 | color: var(--white); 1026 | } 1027 | /* publisher page */ 1028 | textarea[readonly="readonly"] { 1029 | color: var(--light-gray-two); 1030 | background-color: var(--black); 1031 | } 1032 | #pkt_btn_preview { 1033 | overflow: hidden; 1034 | background-color: var(--black); 1035 | } 1036 | .sidebar_content #content, .sidebar_content .content_section { 1037 | color: var(--icon-gray); 1038 | background-color: var(--mid-gray); 1039 | } 1040 | .integration h3 { 1041 | color: var(--light-gray-two); 1042 | } 1043 | } 1044 | -------------------------------------------------------------------------------- /tools/authors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # generate AUTHORS, modify .mailmap in case of duplicates 4 | git log --reverse --format='%aN <%aE>' | perl -we ' 5 | BEGIN { 6 | %seen = (), @authors = (); 7 | } 8 | while (<>) { 9 | next if $seen{$_}; 10 | $seen{$_} = push @authors, $_; 11 | } 12 | END { 13 | print "# Authors ordered by first contribution.\n"; 14 | print "\n", @authors, "\n"; 15 | print "# Generated by tools/authors.sh\n"; 16 | } 17 | ' > "${BASH_SOURCE%/*}/../AUTHORS" 18 | -------------------------------------------------------------------------------- /tools/fix-perfectionist.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | const fs = require("fs").promises; 5 | const path = require("path"); 6 | const pkg = require("../package.json"); 7 | 8 | const fileName = path.join(__dirname, "..", pkg.main); 9 | 10 | function cleanup(css) { 11 | return css 12 | // Perfectionist adds comments to the end of the previous line... 13 | // }/* comment */ => }\n\n /* comment */ 14 | .replace(/}\/\*(([\s\S])+?)\*\/\s*/g, "}\n\n /*$1*/\n ") 15 | .replace(/,\s\/\*/g, ",\n /*") 16 | .replace(/\s+regexp\(/g, "\nregexp(") 17 | // Remove extra carriage returns between definitions 18 | .replace(/\n+/g, "\n"); 19 | } 20 | 21 | async function postPerfectionist() { 22 | const css = await fs.readFile(fileName, "utf8"); 23 | await fs.writeFile(fileName, cleanup(css)); 24 | console.info("\x1b[32m%s\x1b[0m", `${pkg.title} usercss cleanup completed`); 25 | } 26 | 27 | postPerfectionist(); 28 | --------------------------------------------------------------------------------