├── .gitignore ├── LICENSE ├── README.md └── docs ├── 404.html ├── CNAME ├── Gemfile ├── Gemfile.lock ├── _config.yml ├── _data └── sites.csv ├── _includes ├── board_listing.html ├── board_listing_item.html ├── board_listing_item_mobile.html ├── footer.html ├── google-analytics.html ├── head.html ├── header.html └── logo.html ├── _layouts ├── default.html ├── home.html ├── post.html └── posts.html ├── _posts ├── 2017-09-04-difference-between-types.markdown └── 2017-09-05-why-people-hate-upwork.md ├── assets ├── app.css └── app.source.css ├── build.sh ├── dev.sh ├── favicon.ico ├── icons ├── 99designs.com.ico ├── angel.co.ico ├── arc.dev.ico ├── careers.stackoverflow.com.ico ├── codeable.io.ico ├── codementor.io.ico ├── codersclan.net.ico ├── coworks.com.ico ├── crew.co.ico ├── curatedjobs.spirofloropoulos.com.ico ├── dreamlance.io.ico ├── dribbble.com.ico ├── freelance.chat.ico ├── freelancedevleads.com.ico ├── freelancer.com.ico ├── frontenddevelopers.org.ico ├── gigster.com.ico ├── gun.io.ico ├── hackhands.com.ico ├── hellobonsai.com.ico ├── hire.codementor.io.ico ├── hired.com.ico ├── jobhunt.ai.ico ├── jobmote.com.ico ├── jobscri.be.ico ├── lightboard.io.ico ├── nofluffjobs.com.ico ├── pilot.co.ico ├── remotebase.io.ico ├── remotefriendly.work.ico ├── remoteok.io.ico ├── speedlancer.com.ico ├── teamextension.io.ico ├── thumbtack.com.ico ├── turing.com.ico ├── upwork.com.ico ├── weworkremotely.com.ico ├── workingnotworking.com.ico ├── worksome.co.uk.ico ├── www.10xmanagement.com.ico ├── www.asklorem.com.ico ├── www.authenticjobs.com.ico ├── www.certace.com.ico ├── www.crossover.com.ico ├── www.doz.co.ico ├── www.doz.com.ico ├── www.experfy.com.ico ├── www.fiverr.com.ico ├── www.flexjobs.com.ico ├── www.folyo.me.ico ├── www.golangprojects.com.ico ├── www.guru.com.ico ├── www.jobbox.io.ico ├── www.joinloom.com.ico ├── www.konsus.com.ico ├── www.moonlightwork.com.ico ├── www.peopleperhour.com.ico ├── www.remotelyawesomejobs.com.ico ├── www.scalablepath.com.ico ├── www.sevendays.co.ico ├── www.soshace.com.ico ├── www.toptal.com.ico ├── www.truelancer.com.ico ├── www.wearedomino.com.ico ├── www.wfh.io.ico ├── www.workingnomads.co.ico └── x-team.com.ico ├── images ├── bg.jpg ├── chevron-down.svg ├── chevron-up.svg └── trf.png ├── index.md ├── logo.svg ├── package-lock.json ├── package.json ├── postcss.config.js ├── posts.html ├── scripts ├── alexa.py ├── download_favicons.py ├── sites_history_script.py └── update.py ├── tailwind.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | _site/ 3 | .sass-cache/ 4 | .jekyll-metadata 5 | __pycache__ 6 | .idea/ 7 | node_modules 8 | # Local Netlify folder 9 | .netlify 10 | docs/.netlify 11 | docs/.jekyll-cache 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Remote Freelancer 2 | List of community-curated resources to find topical remote freelance & contract work for software developers, web designers, and more! 3 | 4 | See [Why](#why) and [Contributing](#contributing). Rank: This is an estimation on how popular the site is, with #1 being the most viewed site on the internet in the US. Up until 2022 Alexa was used, Similar web will be used for future ratings. [Graph of changes over time](https://public.tableau.com/profile/andrew.chase#!/vizhome/theremotefreelancer/AlexaRankOverTime?publish=yes) 5 | 6 | | **Clients** | | | | 7 | |------------------------------------------------------------------------------------------|----------------|------------|-------------------------------------------| 8 | | **Name** | **Rank** | | **Hires these Types** | 9 | | [Upwork](https://upwork.com) | 200 | | Designers, Developers, & Others | 10 | | [Freelancer](https://www.freelancer.com/affiliates/andychase) | 700 | | Designers, Developers, & Others | 11 | | [PeoplePerHour](https://www.peopleperhour.com) | 2,000 | & Gigs | Designers, Developers, & Others | 12 | | [Toptal](https://www.toptal.com/BLjoyn/worlds-top-talent) | 3,000 | | Designers, Developers, & Others | 13 | | [Guru.com](http://www.guru.com/) | 5,000 | | Designers, Developers, & Others | 14 | | [Turing](https://turing.com/) | 6,000 | | Developers | 15 | | [Truelancer](https://www.truelancer.com) | 10,000 | | Designers, Developers, & Others | 16 | | [Crossover](https://www.crossover.com) | 10,000 | | Developers & Business Managers | 17 | | [arc.dev](https://arc.dev/) | 20,000 | | Developers | 18 | | [Scalable Path](https://www.scalablepath.com/) | 70,000 | | Designers & Developers | 19 | | [freelancermap](https://www.freelancermap.com/it-projects.html) | 80,000 | | Developers, Engineers, Consultants, Others| 20 | | [StoreTasker](https://www.storetasker.com/) | 100,000 | | Shopify Developers | 21 | | [Soshace](https://www.soshace.com/) | 100,000 | | Developers | 22 | | [Adeva](https://adevait.com/) | 200,000 | | Designers, Developers, & QA | 23 | | [Speedlancer](https://speedlancer.com/) | 600,000 | | Designers & Developers | 24 | | [Worksome](https://worksome.co.uk/) | 2,000,000 | | Consultants, Data Scientists, & Developers| 25 | | **Tutoring** | | | | 26 | | [CodeMentor.io](https://www.codementor.io) | 10,000 | Tutoring | Developers | 27 | | **Other** | | | | 28 | | **Name** | **Rank** | | **Hires these Types** | 29 | | [Fiverr](https://www.fiverr.com/) | 100 | Gigs | Variety | 30 | | [Bonsai](https://app.hellobonsai.com/users/sign_up?refer=8728021d) | 20,000 | Tools | Designers, Developers, & Others | 31 | | [Jobdone.net](https://jobdone.net/explore?) | 1,000,000 | Gigs | Variety | 32 | | [\#frontenddevelopers.org](http://frontenddevelopers.org/) | 1,000,000 | Community | Developers | 33 | | [Remote One](https://remote.one/) | 1,000,000 | Tools | Designers, Developers, & Others | 34 | | [Clarrow](https://clarrow.com/) | 2,000,000 | Tools | Designers, Developer & Others | 35 | | **Jobs** | | | | 36 | | **Name** | **Rank** | | **Hires these Types** | 37 | | [Dribbble Jobs](https://dribbble.com/obs?utf8=%E2%9C%93&anywhere=true&location=Anywhere) | 1,000 | | Designers | 38 | | [Angel List Jobs](https://angel.co/jobs#find/f!%7B%22remote%22%3Atrue%7D) | 2,000 | | Variety | 39 | | [FlexJobs](https://www.flexjobs.com) | 7,000 | | Variety | 40 | | [We Work Remotely](https://weworkremotely.com/) | 10,000 | | Variety | 41 | | [Hired](https://hired.com/) | 20,000 | | Designers, Developers, & Product Managers | 42 | | [RemoteOK](https://remoteok.io/) | 80,000 | | Developers | 43 | | [Himalayas](https://himalayas.app) | 200,000 | | Designers, Developers, & Product Managers | 44 | | [No Fluff Jobs](https://nofluffjobs.com/#criteria=remote) | 200,000 | | Developers | 45 | | [Golangprojects.com](https://www.golangprojects.com/golang-remote-jobs.html) | 600,000 | | Go/Golang jobs, filter on remote jobs | 46 | | [Remotesome.com](https://www.remotesome.com/) | 1,000,000 | | Developers | 47 | | [RemoteYeah](https://remoteyeah.com/) | 2,000,000 | | Data Scientists & Developers | 48 | | [Jobhunt.ai](https://jobhunt.ai/machinelearning-remote-jobs.html) | 8,000,000 | | AI/Machine learning jobs, filter on remote jobs | 49 | | [Team Extension](https://teamextension.io/) | 8,000,000 | | Eastern Euro Developers, Designers, QA 50 | | **Agency** | | | | 51 | | **Name** | **Rank** | | **Hires these Types** | 52 | | [Codeable](https://codeable.io/) | 40,000 | | Wordpress Developers developers | 53 | | [Superside](https://www.superside.com/) | 50,000 | | Designers | 54 | | [Working Not Working](https://workingnotworking.com/) | 70,000 | | Designers | 55 | | [X-Team](http://x-team.com) | 70,000 | | Developers | 56 | | [Experfy](https://www.experfy.com/) | 80,000 | | Data Scientists & Developers | 57 | | [Gun.io](https://gun.io/) | 100,000 | | Developers | 58 | | [Gigster](https://gigster.com/) | 200,000 | | Developers, Project Managers, & Designers | 59 | | [DOZ.com](https://www.doz.com) | 500,000 | | Marketing | 60 | | [Moonlight](https://www.moonlightwork.com) | 1,000,000 | | Developers | 61 | | [10xmanagement](https://www.10xmanagement.com/) | 1,000,000 | | Designers & Developers | 62 | | [Lightboard](https://lightboard.io) | 2,000,000 | | Designers | 63 | | [MeteorOps.com](https://meteorops.com) | 10,000,000 | | DevOps Engineers | 64 | | [Dreamlance](http://dreamlance.io/) | 10,000,000 | | Designers & Developers | 65 | | [CodersClan.net](https://codersclan.net) | 10,000,000 | | Developers | 66 | 67 | ## Regional, or Language-Specific 68 | 69 | * UK 70 | * [Gigged AI](https://gigged.ai) - Newcomer in the space with Clients ready but little Talent. 71 | * [devitjobs.uk](https://devitjobs.uk/jobs/all/remote) 72 | * Germany 73 | * [germantechjobs](https://germantechjobs.de/jobs/all/remote) 74 | * Latin America 75 | * [Workana](https://www.workana.com) – Largest Latin American freelancer network 76 | * French 77 | * [Codeur](https://www.codeur.com/) - Leader in France. 78 | * [Malt](https://www.malt.fr/) - One of the largest platform for french Freelancers. 79 | * [Comet](https://www.comet.co/) - French platform that search and qualify IT freelancers for each mission. 80 | * [Laotop](https://www.laotop.fr/) - French platform that search and qualify IT freelancers for each mission. 81 | * Denmark 82 | * [Worksome](http://www.worksome.dk) - Denmark's largest platform for local freelancers. 83 | * Dutch 84 | * [Freelance.nl](https://freelance.nl/) - Leader in the Netherlands. 85 | * [Marktplaats](http://klussen.marktplaats.nl/diensten-en-vakmensen/klussen/0) - Kind of like Craigslist. 86 | * [Funle.nl](https://funle.nl/) - Aggregator of all available IT-specific freelance gigs in the Netherlands 87 | * [de Publieke Partner](https://depubliekepartner.nl/) - Agency in dutch Government freelance assignments. 88 | * Spanish 89 | * [Freelancer MX](https://www.freelancer.mx) - Contrata a freelancers expertos para tu trabajo en l?nea. 90 | * Persian 91 | * [Ponisha](http://ponisha.ir) - Ponisha is an online network for freelance professionals, in Iran. 92 | * Brazilian 93 | * [99 Freelas](https://www.99freelas.com.br) - Contrate os melhores freelancers do Brasil. 94 | * Russian 95 | * [Freelansim](https://freelansim.ru/) - биржа удаленной работы для IT-специалистов. 96 | * [FL](https://www.fl.ru/) - профессиональный ресурс, предназначенный для поиска работы или исполнителя на удаленную работу. 97 | * [freelance.ru](https://freelance.ru/) - Биржа фриланса, каталог фрилансеров и самозанятых по категориям. 98 | * Indonesian 99 | * [Projects.co.id](https://projects.co.id/) - Leader in Indonesia. 100 | * [Fastwork](https://m.fastwork.id/) - Newcomers. 101 | * [Sribu.com](https://sribu.com/) - is For Designer (but sribulancer.com is dead). 102 | 103 | ## Why 104 | This repo was inspired by [this Hacker News thread](https://news.ycombinator.com/item?id=12773282) about one software developer's experience with Upwork. For all those who have had bad experiences with Upwork, I wanted to create a list of additional resources that software developers can use to find freelance, nomadic and contract work. 105 | 106 | ## Contributing 107 | Please please please contribute to the list! If you have freelance work available or know someone who does, feel free to open a pull request to augment this list! 108 | 109 | Thank you for looking :) Good hunting! 110 | 111 | ## Differences between types 112 | 113 | | | Clients | Jobs | Agency | 114 | |----------------------------------|--------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| 115 | | Interaction with Clients | Your interaction is with clients directly, organization does little/no communication with clients | You interact with employers directly, organization does little/no communication with clients | Organization handles clients and just gives you work. You have little/no interaction with clients | 116 | | Control over working environment | Generally you can work however, using own tools, supplies, set own hours, etc | Employer controls how you work generally. Provides tools, sets hours, tasks, etc. | Agency might direct you on what tasks to do but you have flexibility on how to accomplish them | 117 | | Payment | Client pays you, but through the organization (which may takes its cut) | Employer pays you salary (withholding taxes) | Agency pays you | 118 | | Choice of Client or Project | Complete control of client/project | Complete control of job selection | Little/no choice of project or client | 119 | | Vetting/Interviews | Clients vets you | Companies vet you | Organization vets you, Client wouldn't really vet you individual | 120 | 121 | ## Other resources 122 | 123 | ### Aggregators 124 | 125 | - https://findwork.dev 126 | - http://jobscribe.com/ 127 | - https://www.hellobonsai.com/gig-list 128 | - https://www.folyo.me/ 129 | - http://www.lancelist.com/ 130 | - https://www.letsmakeapps.io/ 131 | - https://freelandr.com/ 132 | - https://remotephp.io 133 | - https://periodix.net 134 | - https://www.remotelyawesomejobs.com 135 | - https://www.nynedge.com/ 136 | - https://remotework.fyi/ 137 | - https://www.vollna.com/ 138 | - https://remotebond.com/ 139 | 140 | ### Bounties based and open source 141 | - https://gitcoin.co 142 | - https://bountysource.com 143 | - https://gitpay.me 144 | 145 | ### Remote jobs 146 | 147 | - [lukasz-madonawesome-remote-job](https://github.com/lukasz-madon/awesome-remote-job#job-boards) – A curated list of awesome remote jobs and resources. Inspired by [Awesome Python](https://github.com/vinta/awesome-python). 148 | - [HN Hiring (hnhiring.me)](http://hnhiring.me/) 149 | - [HNHIRING](https://hnhiring.com/) – All Jobs From Hacker News 'Who is Hiring?'. 150 | - [Remote Leaf](https://remoteleaf.com/) – Receive hand-picked remote jobs posted anywhere delivered straight to your inbox. 151 | 152 | ### Job tracking tools 153 | - [Upfeed](https://upfeed.io/) – Smart and personalized Upwork's feed. 154 | - [Upwork jobs feed tracker](https://chrome.google.com/webstore/detail/upwork-jobs-feed-tracker/gcjmekbfkkmaccloaoccfiohjnmgkddm) – Convenient way to track new jobs for Upwork freelancers. 155 | 156 | ## Who 157 | 158 | [Codinronan](https://github.com/codinronan) originally started this resource, [Andy Chase](https://github.com/andychase) has been maintaining since 2017. Special thanks to everyone who has submitted corrections and new sites. Also thanks to [Georges Kabbouchi](https://github.com/KABBOUCHI) who developed the website version based on a design from [Ovidiu Alexandrescu](https://github.com/owystyle). 159 | 160 | ## License 161 | None. Literally, why would I include a license in this. Copy, paste, skewer, go nuts. (Ok, officially, "The Unlicense") 162 | -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | sitemap: false 4 | --- 5 | 6 | 19 | 20 |
21 |

404

22 | 23 |

Page not found :(

24 |

The requested page could not be found.

25 |
26 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | theremotefreelancer.com -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem 'github-pages', group: :jekyll_plugins 4 | -------------------------------------------------------------------------------- /docs/Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | activesupport (6.0.4.6) 5 | concurrent-ruby (~> 1.0, >= 1.0.2) 6 | i18n (>= 0.7, < 2) 7 | minitest (~> 5.1) 8 | tzinfo (~> 1.1) 9 | zeitwerk (~> 2.2, >= 2.2.2) 10 | addressable (2.8.0) 11 | public_suffix (>= 2.0.2, < 5.0) 12 | coffee-script (2.4.1) 13 | coffee-script-source 14 | execjs 15 | coffee-script-source (1.11.1) 16 | colorator (1.1.0) 17 | commonmarker (0.17.13) 18 | ruby-enum (~> 0.5) 19 | concurrent-ruby (1.1.9) 20 | dnsruby (1.61.9) 21 | simpleidn (~> 0.1) 22 | em-websocket (0.5.3) 23 | eventmachine (>= 0.12.9) 24 | http_parser.rb (~> 0) 25 | ethon (0.15.0) 26 | ffi (>= 1.15.0) 27 | eventmachine (1.2.7) 28 | execjs (2.8.1) 29 | faraday (1.10.0) 30 | faraday-em_http (~> 1.0) 31 | faraday-em_synchrony (~> 1.0) 32 | faraday-excon (~> 1.1) 33 | faraday-httpclient (~> 1.0) 34 | faraday-multipart (~> 1.0) 35 | faraday-net_http (~> 1.0) 36 | faraday-net_http_persistent (~> 1.0) 37 | faraday-patron (~> 1.0) 38 | faraday-rack (~> 1.0) 39 | faraday-retry (~> 1.0) 40 | ruby2_keywords (>= 0.0.4) 41 | faraday-em_http (1.0.0) 42 | faraday-em_synchrony (1.0.0) 43 | faraday-excon (1.1.0) 44 | faraday-httpclient (1.0.1) 45 | faraday-multipart (1.0.3) 46 | multipart-post (>= 1.2, < 3) 47 | faraday-net_http (1.0.1) 48 | faraday-net_http_persistent (1.2.0) 49 | faraday-patron (1.0.0) 50 | faraday-rack (1.0.0) 51 | faraday-retry (1.0.3) 52 | ffi (1.15.5) 53 | forwardable-extended (2.6.0) 54 | gemoji (3.0.1) 55 | github-pages (223) 56 | github-pages-health-check (= 1.17.9) 57 | jekyll (= 3.9.0) 58 | jekyll-avatar (= 0.7.0) 59 | jekyll-coffeescript (= 1.1.1) 60 | jekyll-commonmark-ghpages (= 0.1.6) 61 | jekyll-default-layout (= 0.1.4) 62 | jekyll-feed (= 0.15.1) 63 | jekyll-gist (= 1.5.0) 64 | jekyll-github-metadata (= 2.13.0) 65 | jekyll-include-cache (= 0.2.1) 66 | jekyll-mentions (= 1.6.0) 67 | jekyll-optional-front-matter (= 0.3.2) 68 | jekyll-paginate (= 1.1.0) 69 | jekyll-readme-index (= 0.3.0) 70 | jekyll-redirect-from (= 0.16.0) 71 | jekyll-relative-links (= 0.6.1) 72 | jekyll-remote-theme (= 0.4.3) 73 | jekyll-sass-converter (= 1.5.2) 74 | jekyll-seo-tag (= 2.7.1) 75 | jekyll-sitemap (= 1.4.0) 76 | jekyll-swiss (= 1.0.0) 77 | jekyll-theme-architect (= 0.2.0) 78 | jekyll-theme-cayman (= 0.2.0) 79 | jekyll-theme-dinky (= 0.2.0) 80 | jekyll-theme-hacker (= 0.2.0) 81 | jekyll-theme-leap-day (= 0.2.0) 82 | jekyll-theme-merlot (= 0.2.0) 83 | jekyll-theme-midnight (= 0.2.0) 84 | jekyll-theme-minimal (= 0.2.0) 85 | jekyll-theme-modernist (= 0.2.0) 86 | jekyll-theme-primer (= 0.6.0) 87 | jekyll-theme-slate (= 0.2.0) 88 | jekyll-theme-tactile (= 0.2.0) 89 | jekyll-theme-time-machine (= 0.2.0) 90 | jekyll-titles-from-headings (= 0.5.3) 91 | jemoji (= 0.12.0) 92 | kramdown (= 2.3.1) 93 | kramdown-parser-gfm (= 1.1.0) 94 | liquid (= 4.0.3) 95 | mercenary (~> 0.3) 96 | minima (= 2.5.1) 97 | nokogiri (>= 1.12.5, < 2.0) 98 | rouge (= 3.26.0) 99 | terminal-table (~> 1.4) 100 | github-pages-health-check (1.17.9) 101 | addressable (~> 2.3) 102 | dnsruby (~> 1.60) 103 | octokit (~> 4.0) 104 | public_suffix (>= 3.0, < 5.0) 105 | typhoeus (~> 1.3) 106 | html-pipeline (2.14.0) 107 | activesupport (>= 2) 108 | nokogiri (>= 1.4) 109 | http_parser.rb (0.8.0) 110 | i18n (0.9.5) 111 | concurrent-ruby (~> 1.0) 112 | jekyll (3.9.0) 113 | addressable (~> 2.4) 114 | colorator (~> 1.0) 115 | em-websocket (~> 0.5) 116 | i18n (~> 0.7) 117 | jekyll-sass-converter (~> 1.0) 118 | jekyll-watch (~> 2.0) 119 | kramdown (>= 1.17, < 3) 120 | liquid (~> 4.0) 121 | mercenary (~> 0.3.3) 122 | pathutil (~> 0.9) 123 | rouge (>= 1.7, < 4) 124 | safe_yaml (~> 1.0) 125 | jekyll-avatar (0.7.0) 126 | jekyll (>= 3.0, < 5.0) 127 | jekyll-coffeescript (1.1.1) 128 | coffee-script (~> 2.2) 129 | coffee-script-source (~> 1.11.1) 130 | jekyll-commonmark (1.3.1) 131 | commonmarker (~> 0.14) 132 | jekyll (>= 3.7, < 5.0) 133 | jekyll-commonmark-ghpages (0.1.6) 134 | commonmarker (~> 0.17.6) 135 | jekyll-commonmark (~> 1.2) 136 | rouge (>= 2.0, < 4.0) 137 | jekyll-default-layout (0.1.4) 138 | jekyll (~> 3.0) 139 | jekyll-feed (0.15.1) 140 | jekyll (>= 3.7, < 5.0) 141 | jekyll-gist (1.5.0) 142 | octokit (~> 4.2) 143 | jekyll-github-metadata (2.13.0) 144 | jekyll (>= 3.4, < 5.0) 145 | octokit (~> 4.0, != 4.4.0) 146 | jekyll-include-cache (0.2.1) 147 | jekyll (>= 3.7, < 5.0) 148 | jekyll-mentions (1.6.0) 149 | html-pipeline (~> 2.3) 150 | jekyll (>= 3.7, < 5.0) 151 | jekyll-optional-front-matter (0.3.2) 152 | jekyll (>= 3.0, < 5.0) 153 | jekyll-paginate (1.1.0) 154 | jekyll-readme-index (0.3.0) 155 | jekyll (>= 3.0, < 5.0) 156 | jekyll-redirect-from (0.16.0) 157 | jekyll (>= 3.3, < 5.0) 158 | jekyll-relative-links (0.6.1) 159 | jekyll (>= 3.3, < 5.0) 160 | jekyll-remote-theme (0.4.3) 161 | addressable (~> 2.0) 162 | jekyll (>= 3.5, < 5.0) 163 | jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) 164 | rubyzip (>= 1.3.0, < 3.0) 165 | jekyll-sass-converter (1.5.2) 166 | sass (~> 3.4) 167 | jekyll-seo-tag (2.7.1) 168 | jekyll (>= 3.8, < 5.0) 169 | jekyll-sitemap (1.4.0) 170 | jekyll (>= 3.7, < 5.0) 171 | jekyll-swiss (1.0.0) 172 | jekyll-theme-architect (0.2.0) 173 | jekyll (> 3.5, < 5.0) 174 | jekyll-seo-tag (~> 2.0) 175 | jekyll-theme-cayman (0.2.0) 176 | jekyll (> 3.5, < 5.0) 177 | jekyll-seo-tag (~> 2.0) 178 | jekyll-theme-dinky (0.2.0) 179 | jekyll (> 3.5, < 5.0) 180 | jekyll-seo-tag (~> 2.0) 181 | jekyll-theme-hacker (0.2.0) 182 | jekyll (> 3.5, < 5.0) 183 | jekyll-seo-tag (~> 2.0) 184 | jekyll-theme-leap-day (0.2.0) 185 | jekyll (> 3.5, < 5.0) 186 | jekyll-seo-tag (~> 2.0) 187 | jekyll-theme-merlot (0.2.0) 188 | jekyll (> 3.5, < 5.0) 189 | jekyll-seo-tag (~> 2.0) 190 | jekyll-theme-midnight (0.2.0) 191 | jekyll (> 3.5, < 5.0) 192 | jekyll-seo-tag (~> 2.0) 193 | jekyll-theme-minimal (0.2.0) 194 | jekyll (> 3.5, < 5.0) 195 | jekyll-seo-tag (~> 2.0) 196 | jekyll-theme-modernist (0.2.0) 197 | jekyll (> 3.5, < 5.0) 198 | jekyll-seo-tag (~> 2.0) 199 | jekyll-theme-primer (0.6.0) 200 | jekyll (> 3.5, < 5.0) 201 | jekyll-github-metadata (~> 2.9) 202 | jekyll-seo-tag (~> 2.0) 203 | jekyll-theme-slate (0.2.0) 204 | jekyll (> 3.5, < 5.0) 205 | jekyll-seo-tag (~> 2.0) 206 | jekyll-theme-tactile (0.2.0) 207 | jekyll (> 3.5, < 5.0) 208 | jekyll-seo-tag (~> 2.0) 209 | jekyll-theme-time-machine (0.2.0) 210 | jekyll (> 3.5, < 5.0) 211 | jekyll-seo-tag (~> 2.0) 212 | jekyll-titles-from-headings (0.5.3) 213 | jekyll (>= 3.3, < 5.0) 214 | jekyll-watch (2.2.1) 215 | listen (~> 3.0) 216 | jemoji (0.12.0) 217 | gemoji (~> 3.0) 218 | html-pipeline (~> 2.2) 219 | jekyll (>= 3.0, < 5.0) 220 | kramdown (2.3.1) 221 | rexml 222 | kramdown-parser-gfm (1.1.0) 223 | kramdown (~> 2.0) 224 | liquid (4.0.3) 225 | listen (3.7.1) 226 | rb-fsevent (~> 0.10, >= 0.10.3) 227 | rb-inotify (~> 0.9, >= 0.9.10) 228 | mercenary (0.3.6) 229 | minima (2.5.1) 230 | jekyll (>= 3.5, < 5.0) 231 | jekyll-feed (~> 0.9) 232 | jekyll-seo-tag (~> 2.1) 233 | minitest (5.15.0) 234 | multipart-post (2.1.1) 235 | nokogiri (1.13.6-arm64-darwin) 236 | racc (~> 1.4) 237 | nokogiri (1.13.6-x86_64-darwin) 238 | racc (~> 1.4) 239 | nokogiri (1.13.6-x86_64-linux) 240 | racc (~> 1.4) 241 | octokit (4.22.0) 242 | faraday (>= 0.9) 243 | sawyer (~> 0.8.0, >= 0.5.3) 244 | pathutil (0.16.2) 245 | forwardable-extended (~> 2.6) 246 | public_suffix (4.0.6) 247 | racc (1.6.0) 248 | rb-fsevent (0.11.1) 249 | rb-inotify (0.10.1) 250 | ffi (~> 1.0) 251 | rexml (3.2.5) 252 | rouge (3.26.0) 253 | ruby-enum (0.9.0) 254 | i18n 255 | ruby2_keywords (0.0.5) 256 | rubyzip (2.3.2) 257 | safe_yaml (1.0.5) 258 | sass (3.7.4) 259 | sass-listen (~> 4.0.0) 260 | sass-listen (4.0.0) 261 | rb-fsevent (~> 0.9, >= 0.9.4) 262 | rb-inotify (~> 0.9, >= 0.9.7) 263 | sawyer (0.8.2) 264 | addressable (>= 2.3.5) 265 | faraday (> 0.8, < 2.0) 266 | simpleidn (0.2.1) 267 | unf (~> 0.1.4) 268 | terminal-table (1.8.0) 269 | unicode-display_width (~> 1.1, >= 1.1.1) 270 | thread_safe (0.3.6) 271 | typhoeus (1.4.0) 272 | ethon (>= 0.9.0) 273 | tzinfo (1.2.10) 274 | thread_safe (~> 0.1) 275 | unf (0.1.4) 276 | unf_ext 277 | unf_ext (0.0.8) 278 | unicode-display_width (1.8.0) 279 | zeitwerk (2.5.4) 280 | 281 | PLATFORMS 282 | universal-darwin-20 283 | x86_64-linux 284 | 285 | DEPENDENCIES 286 | github-pages 287 | 288 | BUNDLED WITH 289 | 2.2.10 290 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | # Welcome to Jekyll! 2 | # 3 | # This config file is meant for settings that affect your whole blog, values 4 | # which you are expected to set up once and rarely edit after that. If you find 5 | # yourself editing this file very often, consider using Jekyll's data files 6 | # feature for the data you need to update frequently. 7 | # 8 | # For technical reasons, this file is *NOT* reloaded automatically when you use 9 | # 'bundle exec jekyll serve'. If you change this file, please restart the server process. 10 | 11 | # Site settings 12 | # These are used to personalize your new site. If you look in the HTML files, 13 | # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. 14 | # You can create any custom variable you would like, and they will be accessible 15 | # in the templates via {{ site.myvariable }}. 16 | title: The Remote Freelancer 17 | author: Andy Chase 18 | email: hi@theremotefreelancer.com 19 | description: > # this means to ignore newlines until "baseurl:" 20 | List of community-curated resources to find topical remote freelance & contract work for software developers, web designers, and more! 21 | baseurl: "" # the subpath of your site, e.g. /blog 22 | url: "https://theremotefreelancer.com" # the base hostname & protocol for your site, e.g. http://example.com 23 | twitter_username: tr_freelancer 24 | github_username: andychase 25 | google_analytics: UA-105858060-1 26 | 27 | # Build settings 28 | markdown: kramdown 29 | plugins: 30 | - jekyll-sitemap 31 | - jekyll-seo-tag 32 | - jekyll-postcss 33 | 34 | # Exclude from processing. 35 | # The following items will not be processed, by default. Create a custom list 36 | # to override the default setting. 37 | # exclude: 38 | # - Gemfile 39 | # - Gemfile.lock 40 | # - node_modules 41 | # - vendor/bundle/ 42 | # - vendor/cache/ 43 | # - vendor/gems/ 44 | # - vendor/ruby/ 45 | exclude: 46 | - Gemfile 47 | - Gemfile.lock 48 | - node_modules 49 | - yarn.lock 50 | - package-lock.json 51 | - README.md 52 | - postcss.config.js 53 | - .gitignore -------------------------------------------------------------------------------- /docs/_data/sites.csv: -------------------------------------------------------------------------------- 1 | netloc,name,url,rank,section,type,opinions,affiliate_link,screening,sdescription,support,jobterm 2 | upwork.com,Upwork,https://upwork.com,200,Clients,Clients,[Why people hate Upwork](/2017/09/04/why-people-hate-upwork.html),,Open,"Fixed or hourly projects. Largest client listing. Lots of low-paid competition. Horrible Support. Guaranteed payment for hourly 20%/10%/5% depending on engagement length.
Why do people hate Upwork?",4,4 3 | freelancer.com,Freelancer,https://www.freelancer.com/,700,Clients,Clients,,https://www.freelancer.com/affiliates/andychase,Open,Much like upwork but their pricing is more around paying per listing/application. ,4,5 4 | www.peopleperhour.com,PeoplePerHour,https://www.peopleperhour.com,"2,000",Clients,Clients & Gigs,,,Open,Emphasis on shorter projects. Spec work also.,4,2 5 | www.guru.com,Guru,http://www.guru.com/,"5,000",Clients,Clients,,,Open,"Larger profile section for freelancers. Payment on completion with ""resolution process"" if client is unhappy.",3,4 6 | www.toptal.com,Toptal,https://www.toptal.com/,"6,000",Clients,Clients,,https://www.toptal.com/BLjoyn/worlds-top-talent,Screening,"Can be hard to actually get jobs. Big name clients. Hourly or weekly engagements. Recruiters sell you to clients. Some sense of ""community"".",2,4 7 | www.truelancer.com,Truelancer,https://www.truelancer.com,"9,000",Clients,Clients,,,,,4,4 8 | www.crossover.com,Crossover,https://www.crossover.com,"20,000",Clients,Clients,,,Screening,Emphasis on long term engagements.,2,3 9 | turing.com,Turing,https://turing.com,"20,000",Clients,Clients,,,,,4,4 10 | arc.dev,Arc,https://arc.dev/,"40,000",Clients,Clients,,https://www.codementor.io/i/2kz84aesbl,Screening,Get paid for short tutoring sessions or find clients. Bit of a vetting process. For client projects payments aren't guaranteed.,4,4 11 | storetasker.com,StoreTasker,https://www.storetasker.com/,"40,000",Clients,Clients,,,,,3,4 12 | www.scalablepath.com,Scalable Path,https://www.scalablepath.com,"90,000",Clients,Clients,,,,,4,4 13 | www.soshace.com,Soshace,https://www.soshace.com,"100,000",Clients,Clients,,,,,4,3 14 | adevait.com,Adeva,https://adevait.com/,"200,000",Clients,Clients,,,,,4,4 15 | speedlancer.com,Speedlancer,https://speedlancer.com,"600,000",Clients,Clients,,,,,4,4 16 | worksome.co.uk,Worksome,https://worksome.co.uk,"2,000,000",Clients,Clients,,,,,4,4 17 | codementor.io,CodeMentor,https://codementor.io/,"10,000",Tutoring,Tutoring,,https://www.codementor.io/i/2kz84aesbl,,,1,5 18 | www.fiverr.com,Fiverr,https://www.fiverr.com/,100,Other,Gigs,,http://track.fiverr.com/visit/?bta=15132&nci=5490,Open,,4,4 19 | jobdone.net,JobDone,https://jobdone.net/explore?,"1,000,000",Other,Gigs,,,,,5,4 20 | frontenddevelopers.org,#frontenddevelopers.org,http://frontenddevelopers.org/,"1,000,000",Other,Community,,,,,4,4 21 | remote.one,Remote One,https://remote.one/,"1,000,000",Other,Tools,,,,,4,4 22 | clarrow.com,Clarrow,https://clarrow.com/,"2,000,000",Other,Tools,,,,,4,4 23 | freelance.chat,#freelance,http://freelance.chat/,"6,000,000",Other,Community,,,,,4,4 24 | hellobonsai.com,Bonsai,https://www.hellobonsai.com/,"10,000,000",Other,Tools,,https://app.hellobonsai.com/users/sign_up?refer=8728021d,,,4,5 25 | hypelance.com,Hypelance,https://hypelance.com/,"10,000,000",Other,Community,,,,,4,4 26 | codeable.io,Codeable,https://codeable.io/,"40,000",Agency,Agency,,,,,4,4 27 | superside.com,Superside,https://www.superside.com/,"50,000",Agency,Agency,,,,,4,4 28 | workingnotworking.com,Working Not Working,https://workingnotworking.com/,"70,000",Agency,Agency,,,,,3,4 29 | x-team.com,X-Team,http://x-team.com,"70,000",Agency,Agency,,,,,4,4 30 | www.experfy.com,Experfy,https://www.experfy.com/,"80,000",Agency,Agency,,,,,4,4 31 | gun.io,Gun.io,https://gun.io/,"100,000",Agency,Agency,,,,,4,4 32 | gigster.com,Gigster,https://gigster.com,"200,000",Agency,Agency,,https://gigs.to/r/Dz2vevg,,,4,4 33 | pilot.co,Pilot,https://pilot.co/,"200,000",Agency,Agency,,,,,4,4 34 | www.doz.com,DOZ.com,https://www.doz.com,"500,000",Agency,Agency,,,,,4,4 35 | www.moonlightwork.com,Moonlight,https://www.moonlightwork.com,"1,000,000",Agency,Agency,,,,,4,4 36 | www.10xmanagement.com,10xmanagement,https://www.10xmanagement.com/,"1,000,000",Agency,Agency,,,,,4,4 37 | lightboard.io,Lightboard,https://lightboard.io,"2,000,000",Agency,Agency,,,,,4,4 38 | meteorops.com,MeteorOps,https://meteorops.com,"10,000,000",Agency,Agency,,,Open,"DevOps Engineering Projects",4,4 39 | dreamlance.io,Dreamlance,http://dreamlance.io/,"10,000,000",Agency,Agency,,,,,4,4 40 | codersclan.net,CodersClan.net,https://codersclan.net,"10,000,000",Agency,Agency,,,,,4,4 41 | careers.stackoverflow.com,Stack Overflow Careers,http://careers.stackoverflow.com/jobs/remote,60,Jobs,Jobs,,,,,4,4 42 | dribbble.com,Dribbble Jobs,https://dribbble.com/obs?utf8=%E2%9C%93&anywhere=true&location=Anywhere,"1,000",Jobs,Jobs,,,,,4,4 43 | angel.co,Angel List Jobs,https://angel.co/jobs#find/f!%7B%22remote%22%3Atrue%7D,"2,000",Jobs,Jobs,,,,,4,4 44 | www.flexjobs.com,FlexJobs,https://www.flexjobs.com,"7,000",Jobs,Jobs,,,,,4,4 45 | weworkremotely.com,We Work Remotely,https://weworkremotely.com/,"10,000",Jobs,Jobs,,,,,4,4 46 | hired.com,Hired,https://hired.com/,"20,000",Jobs,Jobs,,,,,4,4 47 | remoteok.io,RemoteOK,https://remoteok.io/,"80,000",Jobs,Jobs,,,,,4,4 48 | nofluffjobs.com,No Fluff Jobs,https://nofluffjobs.com/#criteria=remote,"200,000",Jobs,Jobs,,,,,4,4 49 | www.golangprojects.com,Golangprojects.com,https://www.golangprojects.com/golang-remote-jobs.html,"600,000",Jobs,Jobs,,,,,4,4 50 | jobhunt.ai,Jobhunt.ai,https://jobhunt.ai/machinelearning-remote-jobs.html,"8,000,000",Jobs,Jobs,,,,,4,4 51 | teamextension.io,Team Extension,https://teamextension.io/,"8,000,000",Jobs,Jobs,,,,,4,4 52 | -------------------------------------------------------------------------------- /docs/_includes/board_listing.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 25 | 26 | 39 |
40 | 41 |
42 |
43 | 46 |
47 | {% include board_listing_item_mobile.html section='Clients' %} 48 |
49 |
50 | 58 | 66 | 74 |
75 |
76 | 77 | 78 | -------------------------------------------------------------------------------- /docs/_includes/board_listing_item.html: -------------------------------------------------------------------------------- 1 | {{ section }} {% assign listings = site.data.sites | where:'section', 2 | include.section %} {% for listing in listings %} 3 |
4 |
5 |
6 |
7 | 12 | 13 | 17 | {{listing.name}} 18 | 19 |
20 |
21 | 24 | Alexa Rank 25 | 26 | 27 |
28 | 35 | 42 | 43 | 44 | {{listing.rank}} 45 |
46 |
47 |
48 |
49 |
50 |
SUMMARY
51 |
52 |
53 | {% if listing.sdescription == "" or listing.sdescription == nil %} 54 | - 55 | {% else %} 56 | {{listing.sdescription}} 57 | {% endif %} 58 |
59 |
60 | 61 |
62 |
63 | Type 67 | {{ listing.type }} 68 |
69 | 70 |
71 | SUPPORT 75 | {% assign support = listing.support | plus: 0 %} {% for i in (1..5) %} 76 | {% if i <= support and support <= 3 %} 77 |
78 | {% elsif i <= support and support > 3 %} 79 |
80 | {% else %} 81 |
84 | {% endif %} {% endfor %} 85 |
86 | 87 |
88 | JOB TERM 92 | {% assign jobterm = listing.jobterm | plus: 0 %} {% for i in (1..5) %} 93 | {% if i <= jobterm and jobterm <= 3 %} 94 |
95 | {% elsif i <= jobterm and jobterm > 3 %} 96 |
97 | {% else %} 98 |
101 | {% endif %} {% endfor %} 102 |
103 | 104 |
105 | SCREENING 109 | 110 | {% if listing.screening == 'Open' %} 111 | 118 | 124 | 125 | {% else %} 126 | 133 | 139 | 140 | {% endif %} 141 |
142 |
143 |
144 |
145 | {% endfor %} 146 | -------------------------------------------------------------------------------- /docs/_includes/board_listing_item_mobile.html: -------------------------------------------------------------------------------- 1 | {{ section }} {% assign listings = site.data.sites | where:'section', 2 | include.section %} {% for listing in listings %} 3 |
4 |
5 |
6 |
7 | 12 |
13 |
14 |
15 | 22 | 29 | 30 | 31 | {{listing.rank}} 32 |
33 | 34 | 37 | Alexa Rank 38 | 39 |
40 |
41 |
42 | 43 | 47 | {{listing.name}} 48 | 49 | 50 |
53 |
54 | Type 58 | {{ listing.type }} 59 |
60 | 61 |
62 | SUPPORT 66 |
{% assign support = listing.support | plus: 0 %} {% for i in (1..5) %} 67 | {% if i <= support and support <= 3 %} 68 |
71 | {% elsif i <= support and support > 3 %} 72 |
75 | {% else %} 76 |
79 | {% endif %} {% endfor %}
80 |
81 | 82 |
83 | JOB TERM 87 |
{% assign jobterm = listing.jobterm | plus: 0 %} {% for i in (1..5) %} 88 | {% if i <= jobterm and jobterm <= 3 %} 89 |
92 | {% elsif i <= jobterm and jobterm > 3 %} 93 |
96 | {% else %} 97 |
100 | {% endif %} {% endfor %}
101 |
102 | 103 |
104 | SCREENING 108 | 109 | {% if listing.screening == 'Open' %} 110 | 117 | 123 | 124 | {% else %} 125 | 132 | 138 | 139 | {% endif %} 140 |
141 |
142 |
143 |
144 |
145 |
SUMMARY
146 |
147 |
148 | {% if listing.sdescription == "" or listing.sdescription == nil %} - {% 149 | else %} {{listing.sdescription}} {% endif %} 150 |
151 |
152 |
153 |
154 | {% endfor %} 155 | -------------------------------------------------------------------------------- /docs/_includes/footer.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_includes/google-analytics.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {%- seo -%} 5 | 6 | 7 | 11 | 12 | {%- if jekyll.environment == 'production' and site.google_analytics -%} 13 | {%- include google-analytics.html -%} 14 | {%- endif -%} -------------------------------------------------------------------------------- /docs/_includes/header.html: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/_includes/logo.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | {{ site.title }} 7 | 8 | 35 | 36 | 37 | 38 | {{ content }} 39 | 40 | 41 | -------------------------------------------------------------------------------- /docs/_layouts/home.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 |
8 | 12 | 13 |
16 |
{% include logo.html %}
17 | 18 |
19 |
20 |

21 | Top Services
22 | For Freelancers 23 |

24 | 25 |

26 | {{ site.description }} 27 |

28 |
29 | 30 | 52 |
53 | 54 | 74 |
75 |
76 |
77 | 78 | {% include board_listing.html %} 79 | 80 |
81 |
82 |
83 | 84 |

Recent Articles

85 | 86 |
87 | {% for post in site.posts limit:3 %} 88 | 89 | {{ post.title }} 91 | {% endfor %} 92 |
93 | 94 |
95 | More Articles 96 |
97 |
98 | 99 | {% include footer.html %} 100 |
101 |
102 | -------------------------------------------------------------------------------- /docs/_layouts/post.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 |
8 | 28 |
29 | 30 |
31 |

{{ page.title }}

32 | 33 |
{{ content }}
34 |
35 | 36 | {% include footer.html %} 37 | 38 | 39 | -------------------------------------------------------------------------------- /docs/_layouts/posts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 |
8 | 28 |
29 | 30 |
31 |

{{ page.title }}

32 | 33 |
{{ content }}
34 |
35 | 36 | {% include footer.html %} 37 | 38 | 39 | -------------------------------------------------------------------------------- /docs/_posts/2017-09-04-difference-between-types.markdown: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "What's the difference between the different types of boards out there?" 4 | date: 2017-09-04 10:35:01 -0700 5 | published: true 6 | --- 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
 ClientsJobsAgency
Interaction with ClientsYou interaction is with clients directly, organization does little/no communication with clientsYou interact with employers directly, organization does little/no communication with clientsOrganization handles clients and just gives you work. You have little/no interaction with clients
Control over working environmentGenerally you can work however, using own tools, supplies, set own hours, etcEmployer controls how you work generally. Provides tools, sets hours, tasks, etc.Agency might direct you on what tasks to do but you have flexibility on how to accomplish them
PaymentClient pays you, but through the organization (which may takes its cut)Employer pays you salary (withholding taxes)Agency pays you
Choice of Client or ProjectComplete control of client/projectComplete control of job selectionLittle/no choice of project or client
Vetting/InterviewsClients vets youCompanies vet youOrganization vets you, Client wouldn’t really vet you individually
46 | -------------------------------------------------------------------------------- /docs/_posts/2017-09-05-why-people-hate-upwork.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: "Why do people hate Upwork?" 4 | date: 2017-09-04 10:35:01 -0700 5 | published: true 6 | --- 7 | 8 | My name is [Andy Chase][andychase]. I've been working as a freelance software engineer for about 5 years. When I started working I used Upwork (then called oDesk) to find clients. 9 | 10 | See my list of [alternatives to upwork here](/)! 11 | 12 | # Upwork is the Tinder of Freelance 13 | 14 | Of course you could go out and in person to networking events, build up a network of random people and tell everyone you are looking for work. 15 | 16 | The problem is, you're not going to do that . You're not a marketer or a networking expert. You just want work. So that's why you end up on Upwork. 17 | 18 | There's a lot of competition of Upwork, competing both on price and on quality. More than likely, clients who don't know a lot about software engineering are comparing you purely based on stereotypes and marketing hype. 19 | 20 | There's also a bit of a game to it, where putting a focused message out there to a wide range of people is more successful then only only applying to the few jobs that you're actually qualified for. 21 | 22 | In real life, when you cold-call your friend's dad who needs someone to do data entry for his small business, he's comparing you to absolutely no one. It's presumed you can do the job (otherwise you wouldn't have come to him), and social pressures and sheer convenience will likely sway him to your favor. 23 | 24 | That person doesn't have the feeling like they are choosing between 30 good options, they instead have the feeling like cosmic graces have smiled on them and the perfect choice has appeared in front them ready to go. 25 | 26 | # The biggest problem with Upwork in my opinion is their customer service 27 | 28 | Upwork is a glorified job board. 29 | 30 | Unlike Craigslist they don't have a benevolent attitude towards their purpose. 31 | 32 | They view customer service as a cost center and anything that can't be solved by a $5/hr wage support rep isn't going to be solved. 33 | 34 | Michelle wrote [Someone stole my identity on Upwork and all I got was this lousy blog post][stole-my-identity], while it sounds like an exception situation in general, for Upwork customer support that's about the level of support (little to none). 35 | 36 | # Upwork has some advantages 37 | 38 | Here's reasons Upwork can actually be a decent deal: 39 | 40 | * It's democratic 41 | * If you apply to a job, you are listed as a possibility. 42 | * Services like [Toptal][toptal] decides what you can work on and what you can't. While if a recruiter does like you they will try and sell you, if they don't then its a closed door. And recruiters will strongly type-cast you to a position based on your prior experience and what your profile looks like. You're full stack but mostly work on backend stuff? They're probably not going to list you for a front-end job. 43 | * Transparent pricing 44 | * Unlike an agency or a spread-based network, you have complete control over your rate. You can negotiate it client-by-client taking into many factors of each client. 45 | * They guarantee payment 46 | * By yourself, it can actually be hard to get clients to pay you. Personally, when I was on my own it was always a battle to have new clients to try get as much as they can before they ghosted (usually they ended up with a prototype and an estimate). 47 | * Upwork (if you follow the rules, hourly contracts, detailed memos, automatically tracked time, verified payment), they will pay you. I've had clients have "issues" with their method of Payment and Upwork paid me on time like always (they also told me to take a break from working until they could figure it out.) 48 | * Being paid on time no matter what is not something to be underestimated, it's something that turns freelancing from a hobby into a real job honestly. It's something you can depend on and plan your life around. 49 | * Upwork also pays fast. 10-17 days from the moment you log time each week. With [toptal][toptal] it's more like 4-6 weeks. 50 | * Popularity 51 | * More popular job boards means it can be easier to find interested clients looking for someone like you. 52 | * Upwork is the 50th most visited site in the world according to Alexa (based on data from people who have the Alexa toolbar installed). 53 | 54 | 55 | [andychase]: https://andychase.me 56 | 57 | [mrdfx]: https://www.reddit.com/r/freelance/comments/6y9gn3/burned_by_upwork_make_sure_to_submit_a_complaint/dmmchwu/?utm_content=permalink&utm_medium=front&utm_source=reddit&utm_name=freelance 58 | 59 | [stole-my-identity]: https://hackernoon.com/someone-stole-my-identity-on-upwork-and-all-i-got-was-this-lousy-blog-post-d63aab2b4c90 60 | 61 | [toptal]: https://www.toptal.com/#amass-nothing-but-top-notch-software-architects 62 | -------------------------------------------------------------------------------- /docs/assets/app.css: -------------------------------------------------------------------------------- 1 | /*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com */ 2 | 3 | /*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ 4 | 5 | /* 6 | Document 7 | ======== 8 | */ 9 | 10 | /** 11 | Use a better box model (opinionated). 12 | */ 13 | 14 | *, 15 | ::before, 16 | ::after { 17 | box-sizing: border-box; 18 | } 19 | 20 | /** 21 | Use a more readable tab size (opinionated). 22 | */ 23 | 24 | html { 25 | -moz-tab-size: 4; 26 | -o-tab-size: 4; 27 | tab-size: 4; 28 | } 29 | 30 | /** 31 | 1. Correct the line height in all browsers. 32 | 2. Prevent adjustments of font size after orientation changes in iOS. 33 | */ 34 | 35 | html { 36 | line-height: 1.15; /* 1 */ 37 | -webkit-text-size-adjust: 100%; /* 2 */ 38 | } 39 | 40 | /* 41 | Sections 42 | ======== 43 | */ 44 | 45 | /** 46 | Remove the margin in all browsers. 47 | */ 48 | 49 | body { 50 | margin: 0; 51 | } 52 | 53 | /** 54 | Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) 55 | */ 56 | 57 | body { 58 | font-family: 59 | system-ui, 60 | -apple-system, /* Firefox supports this but not yet `system-ui` */ 61 | 'Segoe UI', 62 | Roboto, 63 | Helvetica, 64 | Arial, 65 | sans-serif, 66 | 'Apple Color Emoji', 67 | 'Segoe UI Emoji'; 68 | } 69 | 70 | /* 71 | Grouping content 72 | ================ 73 | */ 74 | 75 | /** 76 | 1. Add the correct height in Firefox. 77 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 78 | */ 79 | 80 | hr { 81 | height: 0; /* 1 */ 82 | color: inherit; /* 2 */ 83 | } 84 | 85 | /* 86 | Text-level semantics 87 | ==================== 88 | */ 89 | 90 | /** 91 | Add the correct text decoration in Chrome, Edge, and Safari. 92 | */ 93 | 94 | abbr[title] { 95 | -webkit-text-decoration: underline dotted; 96 | text-decoration: underline dotted; 97 | } 98 | 99 | /** 100 | Add the correct font weight in Edge and Safari. 101 | */ 102 | 103 | b, 104 | strong { 105 | font-weight: bolder; 106 | } 107 | 108 | /** 109 | 1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) 110 | 2. Correct the odd 'em' font sizing in all browsers. 111 | */ 112 | 113 | code, 114 | kbd, 115 | samp, 116 | pre { 117 | font-family: 118 | ui-monospace, 119 | SFMono-Regular, 120 | Consolas, 121 | 'Liberation Mono', 122 | Menlo, 123 | monospace; /* 1 */ 124 | font-size: 1em; /* 2 */ 125 | } 126 | 127 | /** 128 | Add the correct font size in all browsers. 129 | */ 130 | 131 | small { 132 | font-size: 80%; 133 | } 134 | 135 | /** 136 | Prevent 'sub' and 'sup' elements from affecting the line height in all browsers. 137 | */ 138 | 139 | sub, 140 | sup { 141 | font-size: 75%; 142 | line-height: 0; 143 | position: relative; 144 | vertical-align: baseline; 145 | } 146 | 147 | sub { 148 | bottom: -0.25em; 149 | } 150 | 151 | sup { 152 | top: -0.5em; 153 | } 154 | 155 | /* 156 | Tabular data 157 | ============ 158 | */ 159 | 160 | /** 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | */ 164 | 165 | table { 166 | text-indent: 0; /* 1 */ 167 | border-color: inherit; /* 2 */ 168 | } 169 | 170 | /* 171 | Forms 172 | ===== 173 | */ 174 | 175 | /** 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | */ 179 | 180 | button, 181 | input, 182 | optgroup, 183 | select, 184 | textarea { 185 | font-family: inherit; /* 1 */ 186 | font-size: 100%; /* 1 */ 187 | line-height: 1.15; /* 1 */ 188 | margin: 0; /* 2 */ 189 | } 190 | 191 | /** 192 | Remove the inheritance of text transform in Edge and Firefox. 193 | 1. Remove the inheritance of text transform in Firefox. 194 | */ 195 | 196 | button, 197 | select { /* 1 */ 198 | text-transform: none; 199 | } 200 | 201 | /** 202 | Correct the inability to style clickable types in iOS and Safari. 203 | */ 204 | 205 | button, 206 | [type='button'] { 207 | -webkit-appearance: button; 208 | } 209 | 210 | /** 211 | Remove the inner border and padding in Firefox. 212 | */ 213 | 214 | ::-moz-focus-inner { 215 | border-style: none; 216 | padding: 0; 217 | } 218 | 219 | /** 220 | Restore the focus styles unset by the previous rule. 221 | */ 222 | 223 | /** 224 | Remove the additional ':invalid' styles in Firefox. 225 | See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737 226 | */ 227 | 228 | /** 229 | Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers. 230 | */ 231 | 232 | legend { 233 | padding: 0; 234 | } 235 | 236 | /** 237 | Add the correct vertical alignment in Chrome and Firefox. 238 | */ 239 | 240 | progress { 241 | vertical-align: baseline; 242 | } 243 | 244 | /** 245 | Correct the cursor style of increment and decrement buttons in Safari. 246 | */ 247 | 248 | ::-webkit-inner-spin-button, 249 | ::-webkit-outer-spin-button { 250 | height: auto; 251 | } 252 | 253 | /** 254 | 1. Correct the odd appearance in Chrome and Safari. 255 | 2. Correct the outline style in Safari. 256 | */ 257 | 258 | /** 259 | Remove the inner padding in Chrome and Safari on macOS. 260 | */ 261 | 262 | ::-webkit-search-decoration { 263 | -webkit-appearance: none; 264 | } 265 | 266 | /** 267 | 1. Correct the inability to style clickable types in iOS and Safari. 268 | 2. Change font properties to 'inherit' in Safari. 269 | */ 270 | 271 | ::-webkit-file-upload-button { 272 | -webkit-appearance: button; /* 1 */ 273 | font: inherit; /* 2 */ 274 | } 275 | 276 | /* 277 | Interactive 278 | =========== 279 | */ 280 | 281 | /* 282 | Add the correct display in Chrome and Safari. 283 | */ 284 | 285 | summary { 286 | display: list-item; 287 | } 288 | 289 | /** 290 | * Manually forked from SUIT CSS Base: https://github.com/suitcss/base 291 | * A thin layer on top of normalize.css that provides a starting point more 292 | * suitable for web applications. 293 | */ 294 | 295 | /** 296 | * Removes the default spacing and border for appropriate elements. 297 | */ 298 | 299 | blockquote, 300 | dl, 301 | dd, 302 | h1, 303 | h2, 304 | h3, 305 | h4, 306 | h5, 307 | h6, 308 | hr, 309 | figure, 310 | p, 311 | pre { 312 | margin: 0; 313 | } 314 | 315 | button { 316 | background-color: transparent; 317 | background-image: none; 318 | } 319 | 320 | fieldset { 321 | margin: 0; 322 | padding: 0; 323 | } 324 | 325 | ol, 326 | ul { 327 | list-style: none; 328 | margin: 0; 329 | padding: 0; 330 | } 331 | 332 | /** 333 | * Tailwind custom reset styles 334 | */ 335 | 336 | /** 337 | * 1. Use the user's configured `sans` font-family (with Tailwind's default 338 | * sans-serif font stack as a fallback) as a sane default. 339 | * 2. Use Tailwind's default "normal" line-height so the user isn't forced 340 | * to override it to ensure consistency even when using the default theme. 341 | */ 342 | 343 | html { 344 | font-family: Montserrat, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 1 */ 345 | line-height: 1.5; /* 2 */ 346 | } 347 | 348 | /** 349 | * Inherit font-family and line-height from `html` so users can set them as 350 | * a class directly on the `html` element. 351 | */ 352 | 353 | body { 354 | font-family: inherit; 355 | line-height: inherit; 356 | } 357 | 358 | /** 359 | * 1. Prevent padding and border from affecting element width. 360 | * 361 | * We used to set this in the html element and inherit from 362 | * the parent element for everything else. This caused issues 363 | * in shadow-dom-enhanced elements like
where the content 364 | * is wrapped by a div with box-sizing set to `content-box`. 365 | * 366 | * https://github.com/mozdevs/cssremedy/issues/4 367 | * 368 | * 369 | * 2. Allow adding a border to an element by just adding a border-width. 370 | * 371 | * By default, the way the browser specifies that an element should have no 372 | * border is by setting it's border-style to `none` in the user-agent 373 | * stylesheet. 374 | * 375 | * In order to easily add borders to elements by just setting the `border-width` 376 | * property, we change the default border-style for all elements to `solid`, and 377 | * use border-width to hide them instead. This way our `border` utilities only 378 | * need to set the `border-width` property instead of the entire `border` 379 | * shorthand, making our border utilities much more straightforward to compose. 380 | * 381 | * https://github.com/tailwindcss/tailwindcss/pull/116 382 | */ 383 | 384 | *, 385 | ::before, 386 | ::after { 387 | box-sizing: border-box; /* 1 */ 388 | border-width: 0; /* 2 */ 389 | border-style: solid; /* 2 */ 390 | border-color: currentColor; /* 2 */ 391 | } 392 | 393 | /* 394 | * Ensure horizontal rules are visible by default 395 | */ 396 | 397 | hr { 398 | border-top-width: 1px; 399 | } 400 | 401 | /** 402 | * Undo the `border-style: none` reset that Normalize applies to images so that 403 | * our `border-{width}` utilities have the expected effect. 404 | * 405 | * The Normalize reset is unnecessary for us since we default the border-width 406 | * to 0 on all elements. 407 | * 408 | * https://github.com/tailwindcss/tailwindcss/issues/362 409 | */ 410 | 411 | img { 412 | border-style: solid; 413 | } 414 | 415 | textarea { 416 | resize: vertical; 417 | } 418 | 419 | input::-moz-placeholder, textarea::-moz-placeholder { 420 | opacity: 1; 421 | color: #9ca3af; 422 | } 423 | 424 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 425 | opacity: 1; 426 | color: #9ca3af; 427 | } 428 | 429 | input::placeholder, 430 | textarea::placeholder { 431 | opacity: 1; 432 | color: #9ca3af; 433 | } 434 | 435 | button, 436 | [role="button"] { 437 | cursor: pointer; 438 | } 439 | 440 | /** 441 | * Override legacy focus reset from Normalize with modern Firefox focus styles. 442 | * 443 | * This is actually an improvement over the new defaults in Firefox in our testing, 444 | * as it triggers the better focus styles even for links, which still use a dotted 445 | * outline in Firefox by default. 446 | */ 447 | 448 | table { 449 | border-collapse: collapse; 450 | } 451 | 452 | h1, 453 | h2, 454 | h3, 455 | h4, 456 | h5, 457 | h6 { 458 | font-size: inherit; 459 | font-weight: inherit; 460 | } 461 | 462 | /** 463 | * Reset links to optimize for opt-in styling instead of 464 | * opt-out. 465 | */ 466 | 467 | a { 468 | color: inherit; 469 | text-decoration: inherit; 470 | } 471 | 472 | /** 473 | * Reset form element properties that are easy to forget to 474 | * style explicitly so you don't inadvertently introduce 475 | * styles that deviate from your design system. These styles 476 | * supplement a partial reset that is already applied by 477 | * normalize.css. 478 | */ 479 | 480 | button, 481 | input, 482 | optgroup, 483 | select, 484 | textarea { 485 | padding: 0; 486 | line-height: inherit; 487 | color: inherit; 488 | } 489 | 490 | /** 491 | * Use the configured 'mono' font family for elements that 492 | * are expected to be rendered with a monospace font, falling 493 | * back to the system monospace stack if there is no configured 494 | * 'mono' font family. 495 | */ 496 | 497 | pre, 498 | code, 499 | kbd, 500 | samp { 501 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 502 | } 503 | 504 | /** 505 | * 1. Make replaced elements `display: block` by default as that's 506 | * the behavior you want almost all of the time. Inspired by 507 | * CSS Remedy, with `svg` added as well. 508 | * 509 | * https://github.com/mozdevs/cssremedy/issues/14 510 | * 511 | * 2. Add `vertical-align: middle` to align replaced elements more 512 | * sensibly by default when overriding `display` by adding a 513 | * utility like `inline`. 514 | * 515 | * This can trigger a poorly considered linting error in some 516 | * tools but is included by design. 517 | * 518 | * https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210 519 | */ 520 | 521 | img, 522 | svg, 523 | video, 524 | canvas, 525 | audio, 526 | iframe, 527 | embed, 528 | object { 529 | display: block; /* 1 */ 530 | vertical-align: middle; /* 2 */ 531 | } 532 | 533 | /** 534 | * Constrain images and videos to the parent width and preserve 535 | * their intrinsic aspect ratio. 536 | * 537 | * https://github.com/mozdevs/cssremedy/issues/14 538 | */ 539 | 540 | img, 541 | video { 542 | max-width: 100%; 543 | height: auto; 544 | } 545 | 546 | /** 547 | * Ensure the default browser behavior of the `hidden` attribute. 548 | */ 549 | 550 | [hidden] { 551 | display: none; 552 | } 553 | 554 | *, ::before, ::after { 555 | --tw-border-opacity: 1; 556 | border-color: rgba(229, 231, 235, var(--tw-border-opacity)); 557 | } 558 | 559 | .container { 560 | width: 100%; 561 | } 562 | 563 | @media (min-width: 640px) { 564 | .container { 565 | max-width: 640px; 566 | } 567 | } 568 | 569 | @media (min-width: 768px) { 570 | .container { 571 | max-width: 768px; 572 | } 573 | } 574 | 575 | @media (min-width: 1024px) { 576 | .container { 577 | max-width: 1024px; 578 | } 579 | } 580 | 581 | @media (min-width: 1280px) { 582 | .container { 583 | max-width: 1280px; 584 | } 585 | } 586 | 587 | @media (min-width: 1536px) { 588 | .container { 589 | max-width: 1536px; 590 | } 591 | } 592 | 593 | .prose { 594 | color: #374151; 595 | max-width: 65ch; 596 | } 597 | 598 | .prose a { 599 | color: #111827; 600 | text-decoration: underline; 601 | font-weight: 500; 602 | } 603 | 604 | .prose strong { 605 | color: #111827; 606 | font-weight: 600; 607 | } 608 | 609 | .prose ol[type="a"] { 610 | --list-counter-style: lower-alpha; 611 | } 612 | 613 | .prose ol[type="a" s] { 614 | --list-counter-style: lower-alpha; 615 | } 616 | 617 | .prose ol[type="I"] { 618 | --list-counter-style: upper-roman; 619 | } 620 | 621 | .prose ol[type="i"] { 622 | --list-counter-style: lower-roman; 623 | } 624 | 625 | .prose ol[type="I" s] { 626 | --list-counter-style: upper-roman; 627 | } 628 | 629 | .prose ol[type="i" s] { 630 | --list-counter-style: lower-roman; 631 | } 632 | 633 | .prose ol[type="1"] { 634 | --list-counter-style: decimal; 635 | } 636 | 637 | .prose ol > li { 638 | position: relative; 639 | padding-left: 1.75em; 640 | } 641 | 642 | .prose ol > li::before { 643 | content: counter(list-item, var(--list-counter-style, decimal)) "."; 644 | position: absolute; 645 | font-weight: 400; 646 | color: #6b7280; 647 | left: 0; 648 | } 649 | 650 | .prose ul > li { 651 | position: relative; 652 | padding-left: 1.75em; 653 | } 654 | 655 | .prose ul > li::before { 656 | content: ""; 657 | position: absolute; 658 | background-color: #d1d5db; 659 | border-radius: 50%; 660 | width: 0.375em; 661 | height: 0.375em; 662 | top: calc(0.875em - 0.1875em); 663 | left: 0.25em; 664 | } 665 | 666 | .prose hr { 667 | border-color: #e5e7eb; 668 | border-top-width: 1px; 669 | margin-top: 3em; 670 | margin-bottom: 3em; 671 | } 672 | 673 | .prose blockquote { 674 | font-weight: 500; 675 | font-style: italic; 676 | color: #111827; 677 | border-left-width: 0.25rem; 678 | border-left-color: #e5e7eb; 679 | quotes: "\201C""\201D""\2018""\2019"; 680 | margin-top: 1.6em; 681 | margin-bottom: 1.6em; 682 | padding-left: 1em; 683 | } 684 | 685 | .prose blockquote p:first-of-type::before { 686 | content: open-quote; 687 | } 688 | 689 | .prose blockquote p:last-of-type::after { 690 | content: close-quote; 691 | } 692 | 693 | .prose h1 { 694 | color: #111827; 695 | font-weight: 800; 696 | font-size: 2.25em; 697 | margin-top: 0; 698 | margin-bottom: 0.8888889em; 699 | line-height: 1.1111111; 700 | } 701 | 702 | .prose h2 { 703 | color: #111827; 704 | font-weight: 700; 705 | font-size: 1.5em; 706 | margin-top: 2em; 707 | margin-bottom: 1em; 708 | line-height: 1.3333333; 709 | } 710 | 711 | .prose h3 { 712 | color: #111827; 713 | font-weight: 600; 714 | font-size: 1.25em; 715 | margin-top: 1.6em; 716 | margin-bottom: 0.6em; 717 | line-height: 1.6; 718 | } 719 | 720 | .prose h4 { 721 | color: #111827; 722 | font-weight: 600; 723 | margin-top: 1.5em; 724 | margin-bottom: 0.5em; 725 | line-height: 1.5; 726 | } 727 | 728 | .prose figure figcaption { 729 | color: #6b7280; 730 | font-size: 0.875em; 731 | line-height: 1.4285714; 732 | margin-top: 0.8571429em; 733 | } 734 | 735 | .prose code { 736 | color: #111827; 737 | font-weight: 600; 738 | font-size: 0.875em; 739 | } 740 | 741 | .prose code::before { 742 | content: "`"; 743 | } 744 | 745 | .prose code::after { 746 | content: "`"; 747 | } 748 | 749 | .prose a code { 750 | color: #111827; 751 | } 752 | 753 | .prose pre { 754 | color: #e5e7eb; 755 | background-color: #1f2937; 756 | overflow-x: auto; 757 | font-size: 0.875em; 758 | line-height: 1.7142857; 759 | margin-top: 1.7142857em; 760 | margin-bottom: 1.7142857em; 761 | border-radius: 0.375rem; 762 | padding-top: 0.8571429em; 763 | padding-right: 1.1428571em; 764 | padding-bottom: 0.8571429em; 765 | padding-left: 1.1428571em; 766 | } 767 | 768 | .prose pre code { 769 | background-color: transparent; 770 | border-width: 0; 771 | border-radius: 0; 772 | padding: 0; 773 | font-weight: 400; 774 | color: inherit; 775 | font-size: inherit; 776 | font-family: inherit; 777 | line-height: inherit; 778 | } 779 | 780 | .prose pre code::before { 781 | content: none; 782 | } 783 | 784 | .prose pre code::after { 785 | content: none; 786 | } 787 | 788 | .prose table { 789 | width: 100%; 790 | table-layout: auto; 791 | text-align: left; 792 | margin-top: 2em; 793 | margin-bottom: 2em; 794 | font-size: 0.875em; 795 | line-height: 1.7142857; 796 | } 797 | 798 | .prose thead { 799 | color: #111827; 800 | font-weight: 600; 801 | border-bottom-width: 1px; 802 | border-bottom-color: #d1d5db; 803 | } 804 | 805 | .prose thead th { 806 | vertical-align: bottom; 807 | padding-right: 0.5714286em; 808 | padding-bottom: 0.5714286em; 809 | padding-left: 0.5714286em; 810 | } 811 | 812 | .prose tbody tr { 813 | border-bottom-width: 1px; 814 | border-bottom-color: #e5e7eb; 815 | } 816 | 817 | .prose tbody tr:last-child { 818 | border-bottom-width: 0; 819 | } 820 | 821 | .prose tbody td { 822 | vertical-align: top; 823 | padding-top: 0.5714286em; 824 | padding-right: 0.5714286em; 825 | padding-bottom: 0.5714286em; 826 | padding-left: 0.5714286em; 827 | } 828 | 829 | .prose { 830 | font-size: 1rem; 831 | line-height: 1.75; 832 | } 833 | 834 | .prose p { 835 | margin-top: 1.25em; 836 | margin-bottom: 1.25em; 837 | } 838 | 839 | .prose img { 840 | margin-top: 2em; 841 | margin-bottom: 2em; 842 | } 843 | 844 | .prose video { 845 | margin-top: 2em; 846 | margin-bottom: 2em; 847 | } 848 | 849 | .prose figure { 850 | margin-top: 2em; 851 | margin-bottom: 2em; 852 | } 853 | 854 | .prose figure > * { 855 | margin-top: 0; 856 | margin-bottom: 0; 857 | } 858 | 859 | .prose h2 code { 860 | font-size: 0.875em; 861 | } 862 | 863 | .prose h3 code { 864 | font-size: 0.9em; 865 | } 866 | 867 | .prose ol { 868 | margin-top: 1.25em; 869 | margin-bottom: 1.25em; 870 | } 871 | 872 | .prose ul { 873 | margin-top: 1.25em; 874 | margin-bottom: 1.25em; 875 | } 876 | 877 | .prose li { 878 | margin-top: 0.5em; 879 | margin-bottom: 0.5em; 880 | } 881 | 882 | .prose > ul > li p { 883 | margin-top: 0.75em; 884 | margin-bottom: 0.75em; 885 | } 886 | 887 | .prose > ul > li > *:first-child { 888 | margin-top: 1.25em; 889 | } 890 | 891 | .prose > ul > li > *:last-child { 892 | margin-bottom: 1.25em; 893 | } 894 | 895 | .prose > ol > li > *:first-child { 896 | margin-top: 1.25em; 897 | } 898 | 899 | .prose > ol > li > *:last-child { 900 | margin-bottom: 1.25em; 901 | } 902 | 903 | .prose ul ul, .prose ul ol, .prose ol ul, .prose ol ol { 904 | margin-top: 0.75em; 905 | margin-bottom: 0.75em; 906 | } 907 | 908 | .prose hr + * { 909 | margin-top: 0; 910 | } 911 | 912 | .prose h2 + * { 913 | margin-top: 0; 914 | } 915 | 916 | .prose h3 + * { 917 | margin-top: 0; 918 | } 919 | 920 | .prose h4 + * { 921 | margin-top: 0; 922 | } 923 | 924 | .prose thead th:first-child { 925 | padding-left: 0; 926 | } 927 | 928 | .prose thead th:last-child { 929 | padding-right: 0; 930 | } 931 | 932 | .prose tbody td:first-child { 933 | padding-left: 0; 934 | } 935 | 936 | .prose tbody td:last-child { 937 | padding-right: 0; 938 | } 939 | 940 | .prose > :first-child { 941 | margin-top: 0; 942 | } 943 | 944 | .prose > :last-child { 945 | margin-bottom: 0; 946 | } 947 | 948 | .sr-only { 949 | position: absolute; 950 | width: 1px; 951 | height: 1px; 952 | padding: 0; 953 | margin: -1px; 954 | overflow: hidden; 955 | clip: rect(0, 0, 0, 0); 956 | white-space: nowrap; 957 | border-width: 0; 958 | } 959 | 960 | .absolute { 961 | position: absolute; 962 | } 963 | 964 | .relative { 965 | position: relative; 966 | } 967 | 968 | .mx-auto { 969 | margin-left: auto; 970 | margin-right: auto; 971 | } 972 | 973 | .mt-2 { 974 | margin-top: 0.5rem; 975 | } 976 | 977 | .mt-3 { 978 | margin-top: 0.75rem; 979 | } 980 | 981 | .mt-4 { 982 | margin-top: 1rem; 983 | } 984 | 985 | .mt-5 { 986 | margin-top: 1.25rem; 987 | } 988 | 989 | .mt-8 { 990 | margin-top: 2rem; 991 | } 992 | 993 | .mr-1 { 994 | margin-right: 0.25rem; 995 | } 996 | 997 | .mr-2 { 998 | margin-right: 0.5rem; 999 | } 1000 | 1001 | .block { 1002 | display: block; 1003 | } 1004 | 1005 | .inline-block { 1006 | display: inline-block; 1007 | } 1008 | 1009 | .flex { 1010 | display: flex; 1011 | } 1012 | 1013 | .table { 1014 | display: table; 1015 | } 1016 | 1017 | .grid { 1018 | display: grid; 1019 | } 1020 | 1021 | .hidden { 1022 | display: none; 1023 | } 1024 | 1025 | .h-1 { 1026 | height: 0.25rem; 1027 | } 1028 | 1029 | .h-2 { 1030 | height: 0.5rem; 1031 | } 1032 | 1033 | .h-5 { 1034 | height: 1.25rem; 1035 | } 1036 | 1037 | .h-6 { 1038 | height: 1.5rem; 1039 | } 1040 | 1041 | .h-12 { 1042 | height: 3rem; 1043 | } 1044 | 1045 | .h-16 { 1046 | height: 4rem; 1047 | } 1048 | 1049 | .h-2\.5 { 1050 | height: 0.625rem; 1051 | } 1052 | 1053 | .h-full { 1054 | height: 100%; 1055 | } 1056 | 1057 | .min-h-screen { 1058 | min-height: 100vh; 1059 | } 1060 | 1061 | .w-2 { 1062 | width: 0.5rem; 1063 | } 1064 | 1065 | .w-5 { 1066 | width: 1.25rem; 1067 | } 1068 | 1069 | .w-6 { 1070 | width: 1.5rem; 1071 | } 1072 | 1073 | .w-9 { 1074 | width: 2.25rem; 1075 | } 1076 | 1077 | .w-12 { 1078 | width: 3rem; 1079 | } 1080 | 1081 | .w-auto { 1082 | width: auto; 1083 | } 1084 | 1085 | .w-2\.5 { 1086 | width: 0.625rem; 1087 | } 1088 | 1089 | .w-full { 1090 | width: 100%; 1091 | } 1092 | 1093 | .max-w-5xl { 1094 | max-width: 64rem; 1095 | } 1096 | 1097 | .max-w-7xl { 1098 | max-width: 80rem; 1099 | } 1100 | 1101 | .flex-1 { 1102 | flex: 1 1 0%; 1103 | } 1104 | 1105 | .flex-shrink-0 { 1106 | flex-shrink: 0; 1107 | } 1108 | 1109 | .transform { 1110 | --tw-translate-x: 0; 1111 | --tw-translate-y: 0; 1112 | --tw-rotate: 0; 1113 | --tw-skew-x: 0; 1114 | --tw-skew-y: 0; 1115 | --tw-scale-x: 1; 1116 | --tw-scale-y: 1; 1117 | transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); 1118 | } 1119 | 1120 | @-webkit-keyframes spin { 1121 | to { 1122 | transform: rotate(360deg); 1123 | } 1124 | } 1125 | 1126 | @keyframes spin { 1127 | to { 1128 | transform: rotate(360deg); 1129 | } 1130 | } 1131 | 1132 | @-webkit-keyframes ping { 1133 | 75%, 100% { 1134 | transform: scale(2); 1135 | opacity: 0; 1136 | } 1137 | } 1138 | 1139 | @keyframes ping { 1140 | 75%, 100% { 1141 | transform: scale(2); 1142 | opacity: 0; 1143 | } 1144 | } 1145 | 1146 | @-webkit-keyframes pulse { 1147 | 50% { 1148 | opacity: .5; 1149 | } 1150 | } 1151 | 1152 | @keyframes pulse { 1153 | 50% { 1154 | opacity: .5; 1155 | } 1156 | } 1157 | 1158 | @-webkit-keyframes bounce { 1159 | 0%, 100% { 1160 | transform: translateY(-25%); 1161 | -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); 1162 | animation-timing-function: cubic-bezier(0.8,0,1,1); 1163 | } 1164 | 1165 | 50% { 1166 | transform: none; 1167 | -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); 1168 | animation-timing-function: cubic-bezier(0,0,0.2,1); 1169 | } 1170 | } 1171 | 1172 | @keyframes bounce { 1173 | 0%, 100% { 1174 | transform: translateY(-25%); 1175 | -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); 1176 | animation-timing-function: cubic-bezier(0.8,0,1,1); 1177 | } 1178 | 1179 | 50% { 1180 | transform: none; 1181 | -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); 1182 | animation-timing-function: cubic-bezier(0,0,0.2,1); 1183 | } 1184 | } 1185 | 1186 | .cursor-pointer { 1187 | cursor: pointer; 1188 | } 1189 | 1190 | .grid-cols-2 { 1191 | grid-template-columns: repeat(2, minmax(0, 1fr)); 1192 | } 1193 | 1194 | .flex-row-reverse { 1195 | flex-direction: row-reverse; 1196 | } 1197 | 1198 | .flex-col { 1199 | flex-direction: column; 1200 | } 1201 | 1202 | .items-center { 1203 | align-items: center; 1204 | } 1205 | 1206 | .justify-end { 1207 | justify-content: flex-end; 1208 | } 1209 | 1210 | .justify-center { 1211 | justify-content: center; 1212 | } 1213 | 1214 | .justify-between { 1215 | justify-content: space-between; 1216 | } 1217 | 1218 | .gap-2 { 1219 | gap: 0.5rem; 1220 | } 1221 | 1222 | .space-x-3 > :not([hidden]) ~ :not([hidden]) { 1223 | --tw-space-x-reverse: 0; 1224 | margin-right: calc(0.75rem * var(--tw-space-x-reverse)); 1225 | margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); 1226 | } 1227 | 1228 | .space-x-4 > :not([hidden]) ~ :not([hidden]) { 1229 | --tw-space-x-reverse: 0; 1230 | margin-right: calc(1rem * var(--tw-space-x-reverse)); 1231 | margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); 1232 | } 1233 | 1234 | .space-x-5 > :not([hidden]) ~ :not([hidden]) { 1235 | --tw-space-x-reverse: 0; 1236 | margin-right: calc(1.25rem * var(--tw-space-x-reverse)); 1237 | margin-left: calc(1.25rem * calc(1 - var(--tw-space-x-reverse))); 1238 | } 1239 | 1240 | .space-x-6 > :not([hidden]) ~ :not([hidden]) { 1241 | --tw-space-x-reverse: 0; 1242 | margin-right: calc(1.5rem * var(--tw-space-x-reverse)); 1243 | margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); 1244 | } 1245 | 1246 | .space-y-5 > :not([hidden]) ~ :not([hidden]) { 1247 | --tw-space-y-reverse: 0; 1248 | margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse))); 1249 | margin-bottom: calc(1.25rem * var(--tw-space-y-reverse)); 1250 | } 1251 | 1252 | .overflow-hidden { 1253 | overflow: hidden; 1254 | } 1255 | 1256 | .truncate { 1257 | overflow: hidden; 1258 | text-overflow: ellipsis; 1259 | white-space: nowrap; 1260 | } 1261 | 1262 | .rounded-md { 1263 | border-radius: 0.375rem; 1264 | } 1265 | 1266 | .rounded-full { 1267 | border-radius: 9999px; 1268 | } 1269 | 1270 | .border { 1271 | border-width: 1px; 1272 | } 1273 | 1274 | .border-r { 1275 | border-right-width: 1px; 1276 | } 1277 | 1278 | .border-b-2 { 1279 | border-bottom-width: 2px; 1280 | } 1281 | 1282 | .border-b { 1283 | border-bottom-width: 1px; 1284 | } 1285 | 1286 | .border-transparent { 1287 | border-color: transparent; 1288 | } 1289 | 1290 | .border-gray-200 { 1291 | --tw-border-opacity: 1; 1292 | border-color: rgba(229, 231, 235, var(--tw-border-opacity)); 1293 | } 1294 | 1295 | .border-gray-300 { 1296 | --tw-border-opacity: 1; 1297 | border-color: rgba(209, 213, 219, var(--tw-border-opacity)); 1298 | } 1299 | 1300 | .border-brand { 1301 | --tw-border-opacity: 1; 1302 | border-color: rgba(242, 182, 50, var(--tw-border-opacity)); 1303 | } 1304 | 1305 | .border-brand-gray-2 { 1306 | --tw-border-opacity: 1; 1307 | border-color: rgba(235, 238, 241, var(--tw-border-opacity)); 1308 | } 1309 | 1310 | .bg-white { 1311 | --tw-bg-opacity: 1; 1312 | background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); 1313 | } 1314 | 1315 | .bg-gray-800 { 1316 | --tw-bg-opacity: 1; 1317 | background-color: rgba(31, 41, 55, var(--tw-bg-opacity)); 1318 | } 1319 | 1320 | .bg-brand { 1321 | --tw-bg-opacity: 1; 1322 | background-color: rgba(242, 182, 50, var(--tw-bg-opacity)); 1323 | } 1324 | 1325 | .bg-brand-light { 1326 | --tw-bg-opacity: 1; 1327 | background-color: rgba(255, 198, 1, var(--tw-bg-opacity)); 1328 | } 1329 | 1330 | .bg-brand-gray-1 { 1331 | --tw-bg-opacity: 1; 1332 | background-color: rgba(249, 250, 250, var(--tw-bg-opacity)); 1333 | } 1334 | 1335 | .bg-brand-gray-2 { 1336 | --tw-bg-opacity: 1; 1337 | background-color: rgba(235, 238, 241, var(--tw-bg-opacity)); 1338 | } 1339 | 1340 | .bg-brand-gray-10 { 1341 | --tw-bg-opacity: 1; 1342 | background-color: rgba(37, 40, 57, var(--tw-bg-opacity)); 1343 | } 1344 | 1345 | .bg-brand-green { 1346 | --tw-bg-opacity: 1; 1347 | background-color: rgba(91, 188, 46, var(--tw-bg-opacity)); 1348 | } 1349 | 1350 | .object-cover { 1351 | -o-object-fit: cover; 1352 | object-fit: cover; 1353 | } 1354 | 1355 | .object-center { 1356 | -o-object-position: center; 1357 | object-position: center; 1358 | } 1359 | 1360 | .p-1 { 1361 | padding: 0.25rem; 1362 | } 1363 | 1364 | .p-6 { 1365 | padding: 1.5rem; 1366 | } 1367 | 1368 | .p-12 { 1369 | padding: 3rem; 1370 | } 1371 | 1372 | .px-4 { 1373 | padding-left: 1rem; 1374 | padding-right: 1rem; 1375 | } 1376 | 1377 | .px-6 { 1378 | padding-left: 1.5rem; 1379 | padding-right: 1.5rem; 1380 | } 1381 | 1382 | .px-8 { 1383 | padding-left: 2rem; 1384 | padding-right: 2rem; 1385 | } 1386 | 1387 | .py-2 { 1388 | padding-top: 0.5rem; 1389 | padding-bottom: 0.5rem; 1390 | } 1391 | 1392 | .py-3 { 1393 | padding-top: 0.75rem; 1394 | padding-bottom: 0.75rem; 1395 | } 1396 | 1397 | .py-6 { 1398 | padding-top: 1.5rem; 1399 | padding-bottom: 1.5rem; 1400 | } 1401 | 1402 | .py-8 { 1403 | padding-top: 2rem; 1404 | padding-bottom: 2rem; 1405 | } 1406 | 1407 | .py-10 { 1408 | padding-top: 2.5rem; 1409 | padding-bottom: 2.5rem; 1410 | } 1411 | 1412 | .py-12 { 1413 | padding-top: 3rem; 1414 | padding-bottom: 3rem; 1415 | } 1416 | 1417 | .py-14 { 1418 | padding-top: 3.5rem; 1419 | padding-bottom: 3.5rem; 1420 | } 1421 | 1422 | .py-20 { 1423 | padding-top: 5rem; 1424 | padding-bottom: 5rem; 1425 | } 1426 | 1427 | .text-center { 1428 | text-align: center; 1429 | } 1430 | 1431 | .font-sans { 1432 | font-family: Montserrat, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 1433 | } 1434 | 1435 | .text-xs { 1436 | font-size: 0.75rem; 1437 | line-height: 1rem; 1438 | } 1439 | 1440 | .text-sm { 1441 | font-size: 0.875rem; 1442 | line-height: 1.25rem; 1443 | } 1444 | 1445 | .text-base { 1446 | font-size: 1rem; 1447 | line-height: 1.5rem; 1448 | } 1449 | 1450 | .text-lg { 1451 | font-size: 1.125rem; 1452 | line-height: 1.75rem; 1453 | } 1454 | 1455 | .text-xl { 1456 | font-size: 1.25rem; 1457 | line-height: 1.75rem; 1458 | } 1459 | 1460 | .text-3xl { 1461 | font-size: 1.875rem; 1462 | line-height: 2.25rem; 1463 | } 1464 | 1465 | .font-extralight { 1466 | font-weight: 200; 1467 | } 1468 | 1469 | .font-light { 1470 | font-weight: 300; 1471 | } 1472 | 1473 | .font-medium { 1474 | font-weight: 500; 1475 | } 1476 | 1477 | .font-semibold { 1478 | font-weight: 600; 1479 | } 1480 | 1481 | .uppercase { 1482 | text-transform: uppercase; 1483 | } 1484 | 1485 | .tracking-wide { 1486 | letter-spacing: 0.025em; 1487 | } 1488 | 1489 | .text-white { 1490 | --tw-text-opacity: 1; 1491 | color: rgba(255, 255, 255, var(--tw-text-opacity)); 1492 | } 1493 | 1494 | .text-gray-100 { 1495 | --tw-text-opacity: 1; 1496 | color: rgba(243, 244, 246, var(--tw-text-opacity)); 1497 | } 1498 | 1499 | .text-gray-300 { 1500 | --tw-text-opacity: 1; 1501 | color: rgba(209, 213, 219, var(--tw-text-opacity)); 1502 | } 1503 | 1504 | .text-gray-400 { 1505 | --tw-text-opacity: 1; 1506 | color: rgba(156, 163, 175, var(--tw-text-opacity)); 1507 | } 1508 | 1509 | .text-brand { 1510 | --tw-text-opacity: 1; 1511 | color: rgba(242, 182, 50, var(--tw-text-opacity)); 1512 | } 1513 | 1514 | .text-brand-light { 1515 | --tw-text-opacity: 1; 1516 | color: rgba(255, 198, 1, var(--tw-text-opacity)); 1517 | } 1518 | 1519 | .text-brand-gray-3 { 1520 | --tw-text-opacity: 1; 1521 | color: rgba(114, 128, 141, var(--tw-text-opacity)); 1522 | } 1523 | 1524 | .text-brand-gray-4 { 1525 | --tw-text-opacity: 1; 1526 | color: rgba(164, 174, 183, var(--tw-text-opacity)); 1527 | } 1528 | 1529 | .text-brand-gray-9 { 1530 | --tw-text-opacity: 1; 1531 | color: rgba(35, 45, 54, var(--tw-text-opacity)); 1532 | } 1533 | 1534 | .text-brand-green { 1535 | --tw-text-opacity: 1; 1536 | color: rgba(91, 188, 46, var(--tw-text-opacity)); 1537 | } 1538 | 1539 | .hover\:text-gray-500:hover { 1540 | --tw-text-opacity: 1; 1541 | color: rgba(107, 114, 128, var(--tw-text-opacity)); 1542 | } 1543 | 1544 | .underline { 1545 | text-decoration: underline; 1546 | } 1547 | 1548 | .hover\:underline:hover { 1549 | text-decoration: underline; 1550 | } 1551 | 1552 | .antialiased { 1553 | -webkit-font-smoothing: antialiased; 1554 | -moz-osx-font-smoothing: grayscale; 1555 | } 1556 | 1557 | .hover\:opacity-75:hover { 1558 | opacity: 0.75; 1559 | } 1560 | 1561 | *, ::before, ::after { 1562 | --tw-shadow: 0 0 #0000; 1563 | } 1564 | 1565 | .shadow { 1566 | --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); 1567 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 1568 | } 1569 | 1570 | .shadow-md { 1571 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); 1572 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 1573 | } 1574 | 1575 | *, ::before, ::after { 1576 | --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 1577 | --tw-ring-offset-width: 0px; 1578 | --tw-ring-offset-color: #fff; 1579 | --tw-ring-color: rgba(59, 130, 246, 0.5); 1580 | --tw-ring-offset-shadow: 0 0 #0000; 1581 | --tw-ring-shadow: 0 0 #0000; 1582 | } 1583 | 1584 | @media (min-width: 640px) { 1585 | .sm\:px-6 { 1586 | padding-left: 1.5rem; 1587 | padding-right: 1.5rem; 1588 | } 1589 | } 1590 | 1591 | @media (min-width: 768px) { 1592 | .md\:flex { 1593 | display: flex; 1594 | } 1595 | 1596 | .md\:w-1\/4 { 1597 | width: 25%; 1598 | } 1599 | 1600 | .md\:flex-row { 1601 | flex-direction: row; 1602 | } 1603 | 1604 | .md\:flex-col { 1605 | flex-direction: column; 1606 | } 1607 | 1608 | .md\:justify-start { 1609 | justify-content: flex-start; 1610 | } 1611 | 1612 | .md\:justify-between { 1613 | justify-content: space-between; 1614 | } 1615 | 1616 | .md\:px-4 { 1617 | padding-left: 1rem; 1618 | padding-right: 1rem; 1619 | } 1620 | 1621 | .md\:text-lg { 1622 | font-size: 1.125rem; 1623 | line-height: 1.75rem; 1624 | } 1625 | } 1626 | 1627 | @media (min-width: 1024px) { 1628 | .lg\:mx-0 { 1629 | margin-left: 0px; 1630 | margin-right: 0px; 1631 | } 1632 | 1633 | .lg\:mt-0 { 1634 | margin-top: 0px; 1635 | } 1636 | 1637 | .lg\:block { 1638 | display: block; 1639 | } 1640 | 1641 | .lg\:inline-block { 1642 | display: inline-block; 1643 | } 1644 | 1645 | .lg\:flex { 1646 | display: flex; 1647 | } 1648 | 1649 | .lg\:hidden { 1650 | display: none; 1651 | } 1652 | 1653 | .lg\:h-screen { 1654 | height: 100vh; 1655 | } 1656 | 1657 | .lg\:w-auto { 1658 | width: auto; 1659 | } 1660 | 1661 | .lg\:w-1\/3 { 1662 | width: 33.333333%; 1663 | } 1664 | 1665 | .lg\:w-2\/3 { 1666 | width: 66.666667%; 1667 | } 1668 | 1669 | .lg\:max-w-md { 1670 | max-width: 28rem; 1671 | } 1672 | 1673 | .lg\:items-center { 1674 | align-items: center; 1675 | } 1676 | 1677 | .lg\:justify-between { 1678 | justify-content: space-between; 1679 | } 1680 | 1681 | .lg\:space-x-6 > :not([hidden]) ~ :not([hidden]) { 1682 | --tw-space-x-reverse: 0; 1683 | margin-right: calc(1.5rem * var(--tw-space-x-reverse)); 1684 | margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); 1685 | } 1686 | 1687 | .lg\:overflow-scroll { 1688 | overflow: scroll; 1689 | } 1690 | 1691 | .lg\:p-6 { 1692 | padding: 1.5rem; 1693 | } 1694 | 1695 | .lg\:px-8 { 1696 | padding-left: 2rem; 1697 | padding-right: 2rem; 1698 | } 1699 | 1700 | .lg\:py-0 { 1701 | padding-top: 0px; 1702 | padding-bottom: 0px; 1703 | } 1704 | 1705 | .lg\:py-1 { 1706 | padding-top: 0.25rem; 1707 | padding-bottom: 0.25rem; 1708 | } 1709 | 1710 | .lg\:text-left { 1711 | text-align: left; 1712 | } 1713 | } 1714 | 1715 | @media (min-width: 1280px) { 1716 | .xl\:w-2\/5 { 1717 | width: 40%; 1718 | } 1719 | 1720 | .xl\:w-3\/5 { 1721 | width: 60%; 1722 | } 1723 | 1724 | .xl\:gap-4 { 1725 | gap: 1rem; 1726 | } 1727 | } 1728 | 1729 | @media (min-width: 1536px) { 1730 | .\32xl\:mt-6 { 1731 | margin-top: 1.5rem; 1732 | } 1733 | 1734 | .\32xl\:mt-10 { 1735 | margin-top: 2.5rem; 1736 | } 1737 | 1738 | .\32xl\:mt-16 { 1739 | margin-top: 4rem; 1740 | } 1741 | 1742 | .\32xl\:w-1\/2 { 1743 | width: 50%; 1744 | } 1745 | 1746 | .\32xl\:p-10 { 1747 | padding: 2.5rem; 1748 | } 1749 | 1750 | .\32xl\:text-lg { 1751 | font-size: 1.125rem; 1752 | line-height: 1.75rem; 1753 | } 1754 | 1755 | .\32xl\:text-2xl { 1756 | font-size: 1.5rem; 1757 | line-height: 2rem; 1758 | } 1759 | 1760 | .\32xl\:text-5xl { 1761 | font-size: 3rem; 1762 | line-height: 1; 1763 | } 1764 | } -------------------------------------------------------------------------------- /docs/assets/app.source.css: -------------------------------------------------------------------------------- 1 | @import "tailwindcss/base"; 2 | 3 | @import "tailwindcss/components"; 4 | 5 | @import "tailwindcss/utilities"; -------------------------------------------------------------------------------- /docs/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | NODE_ENV=production ./node_modules/.bin/postcss ./assets/app.source.css -o ./assets/app.css 4 | bundle exec jekyll build 5 | -------------------------------------------------------------------------------- /docs/dev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | bundle exec jekyll serve --livereload --drafts --future --port 5000 --livereload_port 35729 "$@" -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/favicon.ico -------------------------------------------------------------------------------- /docs/icons/99designs.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/99designs.com.ico -------------------------------------------------------------------------------- /docs/icons/angel.co.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/angel.co.ico -------------------------------------------------------------------------------- /docs/icons/arc.dev.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/arc.dev.ico -------------------------------------------------------------------------------- /docs/icons/careers.stackoverflow.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/careers.stackoverflow.com.ico -------------------------------------------------------------------------------- /docs/icons/codeable.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/codeable.io.ico -------------------------------------------------------------------------------- /docs/icons/codementor.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/codementor.io.ico -------------------------------------------------------------------------------- /docs/icons/codersclan.net.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/codersclan.net.ico -------------------------------------------------------------------------------- /docs/icons/coworks.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/coworks.com.ico -------------------------------------------------------------------------------- /docs/icons/crew.co.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/crew.co.ico -------------------------------------------------------------------------------- /docs/icons/curatedjobs.spirofloropoulos.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/curatedjobs.spirofloropoulos.com.ico -------------------------------------------------------------------------------- /docs/icons/dreamlance.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/dreamlance.io.ico -------------------------------------------------------------------------------- /docs/icons/dribbble.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/dribbble.com.ico -------------------------------------------------------------------------------- /docs/icons/freelance.chat.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/freelance.chat.ico -------------------------------------------------------------------------------- /docs/icons/freelancedevleads.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/freelancedevleads.com.ico -------------------------------------------------------------------------------- /docs/icons/freelancer.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/freelancer.com.ico -------------------------------------------------------------------------------- /docs/icons/frontenddevelopers.org.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/frontenddevelopers.org.ico -------------------------------------------------------------------------------- /docs/icons/gigster.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/gigster.com.ico -------------------------------------------------------------------------------- /docs/icons/gun.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/gun.io.ico -------------------------------------------------------------------------------- /docs/icons/hackhands.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/hackhands.com.ico -------------------------------------------------------------------------------- /docs/icons/hellobonsai.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/hellobonsai.com.ico -------------------------------------------------------------------------------- /docs/icons/hire.codementor.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/hire.codementor.io.ico -------------------------------------------------------------------------------- /docs/icons/hired.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/hired.com.ico -------------------------------------------------------------------------------- /docs/icons/jobhunt.ai.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/jobhunt.ai.ico -------------------------------------------------------------------------------- /docs/icons/jobmote.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/jobmote.com.ico -------------------------------------------------------------------------------- /docs/icons/jobscri.be.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/jobscri.be.ico -------------------------------------------------------------------------------- /docs/icons/lightboard.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/lightboard.io.ico -------------------------------------------------------------------------------- /docs/icons/nofluffjobs.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/nofluffjobs.com.ico -------------------------------------------------------------------------------- /docs/icons/pilot.co.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/pilot.co.ico -------------------------------------------------------------------------------- /docs/icons/remotebase.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/remotebase.io.ico -------------------------------------------------------------------------------- /docs/icons/remotefriendly.work.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/remotefriendly.work.ico -------------------------------------------------------------------------------- /docs/icons/remoteok.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/remoteok.io.ico -------------------------------------------------------------------------------- /docs/icons/speedlancer.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/speedlancer.com.ico -------------------------------------------------------------------------------- /docs/icons/teamextension.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/teamextension.io.ico -------------------------------------------------------------------------------- /docs/icons/thumbtack.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/thumbtack.com.ico -------------------------------------------------------------------------------- /docs/icons/turing.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/turing.com.ico -------------------------------------------------------------------------------- /docs/icons/upwork.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/upwork.com.ico -------------------------------------------------------------------------------- /docs/icons/weworkremotely.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/weworkremotely.com.ico -------------------------------------------------------------------------------- /docs/icons/workingnotworking.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/workingnotworking.com.ico -------------------------------------------------------------------------------- /docs/icons/worksome.co.uk.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/worksome.co.uk.ico -------------------------------------------------------------------------------- /docs/icons/www.10xmanagement.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.10xmanagement.com.ico -------------------------------------------------------------------------------- /docs/icons/www.asklorem.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.asklorem.com.ico -------------------------------------------------------------------------------- /docs/icons/www.authenticjobs.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.authenticjobs.com.ico -------------------------------------------------------------------------------- /docs/icons/www.certace.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.certace.com.ico -------------------------------------------------------------------------------- /docs/icons/www.crossover.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.crossover.com.ico -------------------------------------------------------------------------------- /docs/icons/www.doz.co.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.doz.co.ico -------------------------------------------------------------------------------- /docs/icons/www.doz.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.doz.com.ico -------------------------------------------------------------------------------- /docs/icons/www.experfy.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.experfy.com.ico -------------------------------------------------------------------------------- /docs/icons/www.fiverr.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.fiverr.com.ico -------------------------------------------------------------------------------- /docs/icons/www.flexjobs.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.flexjobs.com.ico -------------------------------------------------------------------------------- /docs/icons/www.folyo.me.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.folyo.me.ico -------------------------------------------------------------------------------- /docs/icons/www.golangprojects.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.golangprojects.com.ico -------------------------------------------------------------------------------- /docs/icons/www.guru.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.guru.com.ico -------------------------------------------------------------------------------- /docs/icons/www.jobbox.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.jobbox.io.ico -------------------------------------------------------------------------------- /docs/icons/www.joinloom.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.joinloom.com.ico -------------------------------------------------------------------------------- /docs/icons/www.konsus.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.konsus.com.ico -------------------------------------------------------------------------------- /docs/icons/www.moonlightwork.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.moonlightwork.com.ico -------------------------------------------------------------------------------- /docs/icons/www.peopleperhour.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.peopleperhour.com.ico -------------------------------------------------------------------------------- /docs/icons/www.remotelyawesomejobs.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.remotelyawesomejobs.com.ico -------------------------------------------------------------------------------- /docs/icons/www.scalablepath.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.scalablepath.com.ico -------------------------------------------------------------------------------- /docs/icons/www.sevendays.co.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.sevendays.co.ico -------------------------------------------------------------------------------- /docs/icons/www.soshace.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.soshace.com.ico -------------------------------------------------------------------------------- /docs/icons/www.toptal.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.toptal.com.ico -------------------------------------------------------------------------------- /docs/icons/www.truelancer.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.truelancer.com.ico -------------------------------------------------------------------------------- /docs/icons/www.wearedomino.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.wearedomino.com.ico -------------------------------------------------------------------------------- /docs/icons/www.wfh.io.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.wfh.io.ico -------------------------------------------------------------------------------- /docs/icons/www.workingnomads.co.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/www.workingnomads.co.ico -------------------------------------------------------------------------------- /docs/icons/x-team.com.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/icons/x-team.com.ico -------------------------------------------------------------------------------- /docs/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/images/bg.jpg -------------------------------------------------------------------------------- /docs/images/chevron-down.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 8 | -------------------------------------------------------------------------------- /docs/images/chevron-up.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 8 | -------------------------------------------------------------------------------- /docs/images/trf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/engineerapart/TheRemoteFreelancer/849f6c6c3b080bfbf9cd0722e72a8cfcf5aee407/docs/images/trf.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | --- -------------------------------------------------------------------------------- /docs/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "version": "1.0.0", 4 | "devDependencies": { 5 | "@fullhuman/postcss-purgecss": "^4.0.2", 6 | "@tailwindcss/line-clamp": "^0.2.0", 7 | "@tailwindcss/typography": "^0.4.0", 8 | "autoprefixer": "^10.2.5", 9 | "cssnano": "^4.1.10", 10 | "postcss": "^8.2.10", 11 | "postcss-cli": "^8.3.1", 12 | "postcss-import": "^14.0.0", 13 | "tailwindcss": "^2.0.3" 14 | }, 15 | "dependencies": { 16 | "yarn": "^1.22.17" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /docs/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | 'postcss-import': {}, 4 | tailwindcss: {}, 5 | autoprefixer: {}, 6 | } 7 | } -------------------------------------------------------------------------------- /docs/posts.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: posts 3 | --- 4 | 5 |
6 | 7 |

Posts

8 | 9 |
    10 | {% for post in site.posts %} 11 |
  • 12 | {% assign date_format = site.minima.date_format | default: "%b %-d, %Y" %} 13 | 14 | 15 |

    16 | {{ post.title | escape }} 17 |

    18 |
  • 19 | {% endfor %} 20 |
21 |
22 | -------------------------------------------------------------------------------- /docs/scripts/alexa.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import collections 3 | import hashlib 4 | import hmac 5 | import os 6 | import re 7 | import urllib.error 8 | import urllib.parse 9 | import xml.etree.ElementTree as ET 10 | 11 | import requests 12 | from aws_requests_auth.aws_auth import AWSRequestsAuth 13 | 14 | rank_search = re.compile("(.*?)") 15 | 16 | 17 | def get_awi_url_info(url): 18 | access_key = os.environ.get("AWS_ACCESS_KEY_ID") 19 | secret_key = os.environ.get("AWS_SECRET_ACCESS_KEY") 20 | params = { 21 | 'Action': 'UrlInfo', 22 | 'ResponseGroup': "Rank", 23 | 'Url': url 24 | } 25 | 26 | ordered_params = collections.OrderedDict(sorted(params.items())) 27 | 28 | query_params = "&".join( 29 | ["%s=%s" % (k, urllib.parse.quote(v, '[^A-Za-z0-9\-_.~]')) for k, v in ordered_params.items()]) 30 | 31 | auth = AWSRequestsAuth(access_key, secret_key, "awis.us-west-1.amazonaws.com", 'us-west-1', 'awis') 32 | 33 | query_url = f"https://awis.us-west-1.amazonaws.com/api?{query_params}" 34 | 35 | result = requests.get(url=query_url, auth=auth) 36 | return ET.fromstring(result.content) 37 | 38 | 39 | def download_aws_rank(url): 40 | result = get_awi_url_info(url).findtext(".//{http://awis.amazonaws.com/doc/2005-07-11}Rank") 41 | if result: 42 | return int(result) 43 | else: 44 | return 10_000_000 45 | 46 | 47 | def get_rank(url): 48 | url_without = url.replace("www.", "") 49 | if "www." in url: 50 | return min(download_aws_rank(url_without), download_aws_rank(url)) 51 | else: 52 | return download_aws_rank(url) 53 | -------------------------------------------------------------------------------- /docs/scripts/download_favicons.py: -------------------------------------------------------------------------------- 1 | #!python3 2 | """ 3 | This script downloads the favicons 4 | Usage: 5 | 6 | python3 update_alexa path/to/data.csv 7 | """ 8 | 9 | import os 10 | import requests 11 | 12 | favicon_path = os.path.join(os.path.dirname(__file__), "..", "icons") 13 | 14 | 15 | def download_favicons(links): 16 | for link in links: 17 | netloc = link['netloc'] 18 | url = 'http://' + netloc 19 | new_favicon_path = os.path.join(favicon_path, netloc + ".ico") 20 | if not os.path.exists(new_favicon_path): 21 | try: 22 | print(url) 23 | response = requests.get( 24 | "https://realfavicongenerator.p.rapidapi.com/favicon/icon", 25 | params={'platform': 'desktop', "site": url}, 26 | headers={'X-Mashape-Key': os.environ.get("mashape_key")} 27 | ) 28 | except: 29 | pass 30 | else: 31 | if response: 32 | with open(new_favicon_path, 'wb') as f: 33 | f.write(response.content) 34 | -------------------------------------------------------------------------------- /docs/scripts/sites_history_script.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | import pandas 4 | import pydriller 5 | from git import Repo 6 | import io 7 | 8 | repo_path = Path(__file__).parent.parent.parent 9 | site_data = repo_path / "docs" / "_data" / "sites.csv" 10 | repo = Repo(str(repo_path)) 11 | df = None 12 | 13 | 14 | def get_change_hashes(): 15 | for commit in pydriller.RepositoryMining(str(repo_path), filepath='docs/_data/sites.csv').traverse_commits(): 16 | yield commit.hash, commit.author_date 17 | 18 | 19 | for hash, date in get_change_hashes(): 20 | commit = repo.commit(hash) 21 | try: 22 | target_file = commit.tree / "docs" / "_data" / "sites.csv" 23 | except KeyError: 24 | continue 25 | with io.BytesIO(target_file.data_stream.read()) as f: 26 | new_df = pandas.read_csv(f) 27 | new_df['date'] = date 28 | if df is None: 29 | df = new_df 30 | else: 31 | df = pandas.concat([df, new_df]) 32 | 33 | df.to_csv("ranking_history.csv") 34 | -------------------------------------------------------------------------------- /docs/scripts/update.py: -------------------------------------------------------------------------------- 1 | #!python3 2 | """ 3 | This script updates the alexa rankings and sort the csv file. 4 | Usage: 5 | 6 | python3 update.py 7 | """ 8 | 9 | import csv 10 | import sys 11 | import os 12 | import itertools 13 | import math 14 | 15 | import alexa 16 | from download_favicons import download_favicons 17 | 18 | sites_path = os.path.join(os.path.dirname(__file__), "..", "_data", "sites.csv") 19 | 20 | update_blank_only = os.environ.get("update_blank_only", "false") == "true" 21 | 22 | 23 | def add_commas_to_rank(number): 24 | if number: 25 | if isinstance(number, str): 26 | number = remove_commas(number) 27 | return "{:,}".format(number) 28 | 29 | 30 | def round_rank(rank: int): 31 | return round(rank, 1 - (1 + int(math.log10(abs(rank))))) 32 | 33 | 34 | def remove_commas(string_number): 35 | return int(string_number.replace(",", "")) 36 | 37 | 38 | def update_alexa(links): 39 | for link in links: 40 | link['rank'] = add_commas_to_rank(link['rank']) 41 | if link['rank'] and update_blank_only: 42 | continue 43 | print("Updating {}.. ".format(link['netloc']), end="") 44 | sys.stdout.flush() 45 | rank = alexa.get_rank(link['netloc']) 46 | if rank: 47 | link['rank'] = add_commas_to_rank(round_rank(rank)) 48 | print(link['rank']) 49 | return links 50 | 51 | 52 | def get_groups(links): 53 | links.sort(key=lambda _: _['section']) 54 | for group_name, group_data in itertools.groupby(links, lambda _: _['section']): 55 | group_data = list(group_data) 56 | group_data.sort(key=lambda _: remove_commas(_['rank'])) 57 | yield group_name, group_data 58 | 59 | 60 | def get_groups_in_order(links): 61 | rank_sorted_groups = dict(get_groups(links)) 62 | for group in ["Clients", "Tutoring", "Other", "Agency", "Jobs"]: 63 | yield from rank_sorted_groups[group] 64 | 65 | 66 | def sort(links): 67 | return list(get_groups_in_order(links)) 68 | 69 | 70 | def main(func): 71 | with open(sites_path, 'r') as csvfile: 72 | links = list(csv.DictReader(csvfile)) 73 | links = func(links) 74 | if not links: 75 | return 76 | with open(sites_path, 'w') as csvfile: 77 | fieldnames = list(links[0].keys()) 78 | writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 79 | writer.writeheader() 80 | writer.writerows(links) 81 | 82 | 83 | if __name__ == "__main__": 84 | main(update_alexa) 85 | main(sort) 86 | main(download_favicons) 87 | -------------------------------------------------------------------------------- /docs/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const defaultTheme = require("tailwindcss/defaultTheme"); 2 | 3 | module.exports = { 4 | purge: [ 5 | './_includes/**/*.html', 6 | './_layouts/**/*.html', 7 | './_posts/*.md', 8 | './*.html', 9 | ], 10 | darkMode: false, 11 | theme: { 12 | extend: { 13 | colors :{ 14 | 'brand' : '#F2B632', 15 | 'brand-light' : '#FFC601', 16 | 'brand-gray' : { 17 | 1 : '#F9FAFA', 18 | 2 : '#EBEEF1', 19 | 3 : '#72808D', 20 | 4 : '#A4AEB7', 21 | 9 : '#232D36', 22 | 10 : '#252839', 23 | }, 24 | 'brand-green' : '#5BBC2E' 25 | }, 26 | fontFamily: { 27 | sans: ["Montserrat", ...defaultTheme.fontFamily.sans] 28 | } 29 | }, 30 | }, 31 | variants: {}, 32 | plugins: [ 33 | require('@tailwindcss/typography'), 34 | require('@tailwindcss/line-clamp'), 35 | ], 36 | } -------------------------------------------------------------------------------- /docs/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.16.7" 7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" 8 | dependencies: 9 | "@babel/highlight" "^7.16.7" 10 | 11 | "@babel/helper-validator-identifier@^7.16.7": 12 | version "7.16.7" 13 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" 14 | 15 | "@babel/highlight@^7.16.7": 16 | version "7.16.10" 17 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz" 18 | dependencies: 19 | "@babel/helper-validator-identifier" "^7.16.7" 20 | chalk "^2.0.0" 21 | js-tokens "^4.0.0" 22 | 23 | "@fullhuman/postcss-purgecss@^4.0.2": 24 | version "4.1.3" 25 | resolved "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.1.3.tgz" 26 | dependencies: 27 | purgecss "^4.1.3" 28 | 29 | "@nodelib/fs.scandir@2.1.5": 30 | version "2.1.5" 31 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 32 | dependencies: 33 | "@nodelib/fs.stat" "2.0.5" 34 | run-parallel "^1.1.9" 35 | 36 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 37 | version "2.0.5" 38 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 39 | 40 | "@nodelib/fs.walk@^1.2.3": 41 | version "1.2.8" 42 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 43 | dependencies: 44 | "@nodelib/fs.scandir" "2.1.5" 45 | fastq "^1.6.0" 46 | 47 | "@tailwindcss/line-clamp@^0.2.0": 48 | version "0.2.2" 49 | resolved "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.2.2.tgz" 50 | 51 | "@tailwindcss/typography@^0.4.0": 52 | version "0.4.1" 53 | resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz" 54 | dependencies: 55 | lodash.castarray "^4.4.0" 56 | lodash.isplainobject "^4.0.6" 57 | lodash.merge "^4.6.2" 58 | lodash.uniq "^4.5.0" 59 | 60 | "@types/parse-json@^4.0.0": 61 | version "4.0.0" 62 | resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" 63 | 64 | "@types/q@^1.5.1": 65 | version "1.5.5" 66 | resolved "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz" 67 | 68 | acorn-node@^1.6.1: 69 | version "1.8.2" 70 | resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" 71 | dependencies: 72 | acorn "^7.0.0" 73 | acorn-walk "^7.0.0" 74 | xtend "^4.0.2" 75 | 76 | acorn-walk@^7.0.0: 77 | version "7.2.0" 78 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" 79 | 80 | acorn@^7.0.0: 81 | version "7.4.1" 82 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" 83 | 84 | alphanum-sort@^1.0.0: 85 | version "1.0.2" 86 | resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" 87 | 88 | ansi-regex@^5.0.1: 89 | version "5.0.1" 90 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 91 | 92 | ansi-styles@^3.2.1: 93 | version "3.2.1" 94 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 95 | dependencies: 96 | color-convert "^1.9.0" 97 | 98 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 99 | version "4.3.0" 100 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 101 | dependencies: 102 | color-convert "^2.0.1" 103 | 104 | anymatch@~3.1.2: 105 | version "3.1.2" 106 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" 107 | dependencies: 108 | normalize-path "^3.0.0" 109 | picomatch "^2.0.4" 110 | 111 | arg@^5.0.1: 112 | version "5.0.1" 113 | resolved "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz" 114 | 115 | argparse@^1.0.7: 116 | version "1.0.10" 117 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" 118 | dependencies: 119 | sprintf-js "~1.0.2" 120 | 121 | array-union@^2.1.0: 122 | version "2.1.0" 123 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 124 | 125 | at-least-node@^1.0.0: 126 | version "1.0.0" 127 | resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" 128 | 129 | autoprefixer@^10.2.5: 130 | version "10.4.2" 131 | resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz" 132 | dependencies: 133 | browserslist "^4.19.1" 134 | caniuse-lite "^1.0.30001297" 135 | fraction.js "^4.1.2" 136 | normalize-range "^0.1.2" 137 | picocolors "^1.0.0" 138 | postcss-value-parser "^4.2.0" 139 | 140 | balanced-match@^1.0.0: 141 | version "1.0.2" 142 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 143 | 144 | binary-extensions@^2.0.0: 145 | version "2.2.0" 146 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" 147 | 148 | boolbase@^1.0.0, boolbase@~1.0.0: 149 | version "1.0.0" 150 | resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" 151 | 152 | brace-expansion@^1.1.7: 153 | version "1.1.11" 154 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 155 | dependencies: 156 | balanced-match "^1.0.0" 157 | concat-map "0.0.1" 158 | 159 | braces@^3.0.1, braces@~3.0.2: 160 | version "3.0.2" 161 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 162 | dependencies: 163 | fill-range "^7.0.1" 164 | 165 | browserslist@^4.0.0, browserslist@^4.19.1: 166 | version "4.19.3" 167 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.19.3.tgz" 168 | dependencies: 169 | caniuse-lite "^1.0.30001312" 170 | electron-to-chromium "^1.4.71" 171 | escalade "^3.1.1" 172 | node-releases "^2.0.2" 173 | picocolors "^1.0.0" 174 | 175 | bytes@^3.0.0: 176 | version "3.1.2" 177 | resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" 178 | 179 | call-bind@^1.0.0, call-bind@^1.0.2: 180 | version "1.0.2" 181 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 182 | dependencies: 183 | function-bind "^1.1.1" 184 | get-intrinsic "^1.0.2" 185 | 186 | caller-callsite@^2.0.0: 187 | version "2.0.0" 188 | resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" 189 | dependencies: 190 | callsites "^2.0.0" 191 | 192 | caller-path@^2.0.0: 193 | version "2.0.0" 194 | resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" 195 | dependencies: 196 | caller-callsite "^2.0.0" 197 | 198 | callsites@^2.0.0: 199 | version "2.0.0" 200 | resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" 201 | 202 | callsites@^3.0.0: 203 | version "3.1.0" 204 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 205 | 206 | camelcase-css@^2.0.1: 207 | version "2.0.1" 208 | resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" 209 | 210 | caniuse-api@^3.0.0: 211 | version "3.0.0" 212 | resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" 213 | dependencies: 214 | browserslist "^4.0.0" 215 | caniuse-lite "^1.0.0" 216 | lodash.memoize "^4.1.2" 217 | lodash.uniq "^4.5.0" 218 | 219 | caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001297, caniuse-lite@^1.0.30001312: 220 | version "1.0.30001312" 221 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz" 222 | 223 | chalk@^2.0.0, chalk@^2.4.1: 224 | version "2.4.2" 225 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 226 | dependencies: 227 | ansi-styles "^3.2.1" 228 | escape-string-regexp "^1.0.5" 229 | supports-color "^5.3.0" 230 | 231 | chalk@^4.0.0, chalk@^4.1.2: 232 | version "4.1.2" 233 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 234 | dependencies: 235 | ansi-styles "^4.1.0" 236 | supports-color "^7.1.0" 237 | 238 | chokidar@^3.3.0, chokidar@^3.5.2: 239 | version "3.5.3" 240 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 241 | dependencies: 242 | anymatch "~3.1.2" 243 | braces "~3.0.2" 244 | glob-parent "~5.1.2" 245 | is-binary-path "~2.1.0" 246 | is-glob "~4.0.1" 247 | normalize-path "~3.0.0" 248 | readdirp "~3.6.0" 249 | optionalDependencies: 250 | fsevents "~2.3.2" 251 | 252 | cliui@^7.0.2: 253 | version "7.0.4" 254 | resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" 255 | dependencies: 256 | string-width "^4.2.0" 257 | strip-ansi "^6.0.0" 258 | wrap-ansi "^7.0.0" 259 | 260 | coa@^2.0.2: 261 | version "2.0.2" 262 | resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" 263 | dependencies: 264 | "@types/q" "^1.5.1" 265 | chalk "^2.4.1" 266 | q "^1.1.2" 267 | 268 | color-convert@^1.9.0, color-convert@^1.9.3: 269 | version "1.9.3" 270 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 271 | dependencies: 272 | color-name "1.1.3" 273 | 274 | color-convert@^2.0.1: 275 | version "2.0.1" 276 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 277 | dependencies: 278 | color-name "~1.1.4" 279 | 280 | color-name@1.1.3: 281 | version "1.1.3" 282 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 283 | 284 | color-name@^1.0.0, color-name@~1.1.4: 285 | version "1.1.4" 286 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 287 | 288 | color-string@^1.6.0, color-string@^1.9.0: 289 | version "1.9.0" 290 | resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz" 291 | dependencies: 292 | color-name "^1.0.0" 293 | simple-swizzle "^0.2.2" 294 | 295 | color@^3.0.0: 296 | version "3.2.1" 297 | resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" 298 | dependencies: 299 | color-convert "^1.9.3" 300 | color-string "^1.6.0" 301 | 302 | color@^4.0.1: 303 | version "4.2.1" 304 | resolved "https://registry.npmjs.org/color/-/color-4.2.1.tgz" 305 | dependencies: 306 | color-convert "^2.0.1" 307 | color-string "^1.9.0" 308 | 309 | commander@^8.0.0: 310 | version "8.3.0" 311 | resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" 312 | 313 | concat-map@0.0.1: 314 | version "0.0.1" 315 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 316 | 317 | cosmiconfig@^5.0.0: 318 | version "5.2.1" 319 | resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" 320 | dependencies: 321 | import-fresh "^2.0.0" 322 | is-directory "^0.3.1" 323 | js-yaml "^3.13.1" 324 | parse-json "^4.0.0" 325 | 326 | cosmiconfig@^7.0.1: 327 | version "7.0.1" 328 | resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" 329 | dependencies: 330 | "@types/parse-json" "^4.0.0" 331 | import-fresh "^3.2.1" 332 | parse-json "^5.0.0" 333 | path-type "^4.0.0" 334 | yaml "^1.10.0" 335 | 336 | css-color-names@0.0.4, css-color-names@^0.0.4: 337 | version "0.0.4" 338 | resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" 339 | 340 | css-declaration-sorter@^4.0.1: 341 | version "4.0.1" 342 | resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" 343 | dependencies: 344 | postcss "^7.0.1" 345 | timsort "^0.3.0" 346 | 347 | css-select-base-adapter@^0.1.1: 348 | version "0.1.1" 349 | resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" 350 | 351 | css-select@^2.0.0: 352 | version "2.1.0" 353 | resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" 354 | dependencies: 355 | boolbase "^1.0.0" 356 | css-what "^3.2.1" 357 | domutils "^1.7.0" 358 | nth-check "^1.0.2" 359 | 360 | css-tree@1.0.0-alpha.37: 361 | version "1.0.0-alpha.37" 362 | resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" 363 | dependencies: 364 | mdn-data "2.0.4" 365 | source-map "^0.6.1" 366 | 367 | css-tree@^1.1.2: 368 | version "1.1.3" 369 | resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" 370 | dependencies: 371 | mdn-data "2.0.14" 372 | source-map "^0.6.1" 373 | 374 | css-unit-converter@^1.1.1: 375 | version "1.1.2" 376 | resolved "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz" 377 | 378 | css-what@^3.2.1: 379 | version "3.4.2" 380 | resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" 381 | 382 | cssesc@^3.0.0: 383 | version "3.0.0" 384 | resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" 385 | 386 | cssnano-preset-default@^4.0.8: 387 | version "4.0.8" 388 | resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz" 389 | dependencies: 390 | css-declaration-sorter "^4.0.1" 391 | cssnano-util-raw-cache "^4.0.1" 392 | postcss "^7.0.0" 393 | postcss-calc "^7.0.1" 394 | postcss-colormin "^4.0.3" 395 | postcss-convert-values "^4.0.1" 396 | postcss-discard-comments "^4.0.2" 397 | postcss-discard-duplicates "^4.0.2" 398 | postcss-discard-empty "^4.0.1" 399 | postcss-discard-overridden "^4.0.1" 400 | postcss-merge-longhand "^4.0.11" 401 | postcss-merge-rules "^4.0.3" 402 | postcss-minify-font-values "^4.0.2" 403 | postcss-minify-gradients "^4.0.2" 404 | postcss-minify-params "^4.0.2" 405 | postcss-minify-selectors "^4.0.2" 406 | postcss-normalize-charset "^4.0.1" 407 | postcss-normalize-display-values "^4.0.2" 408 | postcss-normalize-positions "^4.0.2" 409 | postcss-normalize-repeat-style "^4.0.2" 410 | postcss-normalize-string "^4.0.2" 411 | postcss-normalize-timing-functions "^4.0.2" 412 | postcss-normalize-unicode "^4.0.1" 413 | postcss-normalize-url "^4.0.1" 414 | postcss-normalize-whitespace "^4.0.2" 415 | postcss-ordered-values "^4.1.2" 416 | postcss-reduce-initial "^4.0.3" 417 | postcss-reduce-transforms "^4.0.2" 418 | postcss-svgo "^4.0.3" 419 | postcss-unique-selectors "^4.0.1" 420 | 421 | cssnano-util-get-arguments@^4.0.0: 422 | version "4.0.0" 423 | resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" 424 | 425 | cssnano-util-get-match@^4.0.0: 426 | version "4.0.0" 427 | resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" 428 | 429 | cssnano-util-raw-cache@^4.0.1: 430 | version "4.0.1" 431 | resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" 432 | dependencies: 433 | postcss "^7.0.0" 434 | 435 | cssnano-util-same-parent@^4.0.0: 436 | version "4.0.1" 437 | resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" 438 | 439 | cssnano@^4.1.10: 440 | version "4.1.11" 441 | resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz" 442 | dependencies: 443 | cosmiconfig "^5.0.0" 444 | cssnano-preset-default "^4.0.8" 445 | is-resolvable "^1.0.0" 446 | postcss "^7.0.0" 447 | 448 | csso@^4.0.2: 449 | version "4.2.0" 450 | resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" 451 | dependencies: 452 | css-tree "^1.1.2" 453 | 454 | define-properties@^1.1.3: 455 | version "1.1.3" 456 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" 457 | dependencies: 458 | object-keys "^1.0.12" 459 | 460 | defined@^1.0.0: 461 | version "1.0.0" 462 | resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" 463 | 464 | dependency-graph@^0.9.0: 465 | version "0.9.0" 466 | resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz" 467 | 468 | detective@^5.2.0: 469 | version "5.2.0" 470 | resolved "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz" 471 | dependencies: 472 | acorn-node "^1.6.1" 473 | defined "^1.0.0" 474 | minimist "^1.1.1" 475 | 476 | didyoumean@^1.2.2: 477 | version "1.2.2" 478 | resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" 479 | 480 | dir-glob@^3.0.1: 481 | version "3.0.1" 482 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 483 | dependencies: 484 | path-type "^4.0.0" 485 | 486 | dlv@^1.1.3: 487 | version "1.1.3" 488 | resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" 489 | 490 | dom-serializer@0: 491 | version "0.2.2" 492 | resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" 493 | dependencies: 494 | domelementtype "^2.0.1" 495 | entities "^2.0.0" 496 | 497 | domelementtype@1: 498 | version "1.3.1" 499 | resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" 500 | 501 | domelementtype@^2.0.1: 502 | version "2.2.0" 503 | resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" 504 | 505 | domutils@^1.7.0: 506 | version "1.7.0" 507 | resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" 508 | dependencies: 509 | dom-serializer "0" 510 | domelementtype "1" 511 | 512 | dot-prop@^5.2.0: 513 | version "5.3.0" 514 | resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" 515 | dependencies: 516 | is-obj "^2.0.0" 517 | 518 | electron-to-chromium@^1.4.71: 519 | version "1.4.75" 520 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz" 521 | 522 | emoji-regex@^8.0.0: 523 | version "8.0.0" 524 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 525 | 526 | entities@^2.0.0: 527 | version "2.2.0" 528 | resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" 529 | 530 | error-ex@^1.3.1: 531 | version "1.3.2" 532 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" 533 | dependencies: 534 | is-arrayish "^0.2.1" 535 | 536 | es-abstract@^1.17.2, es-abstract@^1.19.1: 537 | version "1.19.1" 538 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz" 539 | dependencies: 540 | call-bind "^1.0.2" 541 | es-to-primitive "^1.2.1" 542 | function-bind "^1.1.1" 543 | get-intrinsic "^1.1.1" 544 | get-symbol-description "^1.0.0" 545 | has "^1.0.3" 546 | has-symbols "^1.0.2" 547 | internal-slot "^1.0.3" 548 | is-callable "^1.2.4" 549 | is-negative-zero "^2.0.1" 550 | is-regex "^1.1.4" 551 | is-shared-array-buffer "^1.0.1" 552 | is-string "^1.0.7" 553 | is-weakref "^1.0.1" 554 | object-inspect "^1.11.0" 555 | object-keys "^1.1.1" 556 | object.assign "^4.1.2" 557 | string.prototype.trimend "^1.0.4" 558 | string.prototype.trimstart "^1.0.4" 559 | unbox-primitive "^1.0.1" 560 | 561 | es-to-primitive@^1.2.1: 562 | version "1.2.1" 563 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 564 | dependencies: 565 | is-callable "^1.1.4" 566 | is-date-object "^1.0.1" 567 | is-symbol "^1.0.2" 568 | 569 | escalade@^3.1.1: 570 | version "3.1.1" 571 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 572 | 573 | escape-string-regexp@^1.0.5: 574 | version "1.0.5" 575 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 576 | 577 | esprima@^4.0.0: 578 | version "4.0.1" 579 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" 580 | 581 | fast-glob@^3.2.7, fast-glob@^3.2.9: 582 | version "3.2.11" 583 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" 584 | dependencies: 585 | "@nodelib/fs.stat" "^2.0.2" 586 | "@nodelib/fs.walk" "^1.2.3" 587 | glob-parent "^5.1.2" 588 | merge2 "^1.3.0" 589 | micromatch "^4.0.4" 590 | 591 | fastq@^1.6.0: 592 | version "1.13.0" 593 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 594 | dependencies: 595 | reusify "^1.0.4" 596 | 597 | fill-range@^7.0.1: 598 | version "7.0.1" 599 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 600 | dependencies: 601 | to-regex-range "^5.0.1" 602 | 603 | fraction.js@^4.1.2: 604 | version "4.1.3" 605 | resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz" 606 | 607 | fs-extra@^10.0.0: 608 | version "10.0.1" 609 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz" 610 | dependencies: 611 | graceful-fs "^4.2.0" 612 | jsonfile "^6.0.1" 613 | universalify "^2.0.0" 614 | 615 | fs-extra@^9.0.0: 616 | version "9.1.0" 617 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" 618 | dependencies: 619 | at-least-node "^1.0.0" 620 | graceful-fs "^4.2.0" 621 | jsonfile "^6.0.1" 622 | universalify "^2.0.0" 623 | 624 | fs.realpath@^1.0.0: 625 | version "1.0.0" 626 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 627 | 628 | fsevents@~2.3.2: 629 | version "2.3.2" 630 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" 631 | 632 | function-bind@^1.1.1: 633 | version "1.1.1" 634 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 635 | 636 | get-caller-file@^2.0.5: 637 | version "2.0.5" 638 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 639 | 640 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 641 | version "1.1.1" 642 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" 643 | dependencies: 644 | function-bind "^1.1.1" 645 | has "^1.0.3" 646 | has-symbols "^1.0.1" 647 | 648 | get-stdin@^8.0.0: 649 | version "8.0.0" 650 | resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" 651 | 652 | get-symbol-description@^1.0.0: 653 | version "1.0.0" 654 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 655 | dependencies: 656 | call-bind "^1.0.2" 657 | get-intrinsic "^1.1.1" 658 | 659 | glob-parent@^5.1.2, glob-parent@~5.1.2: 660 | version "5.1.2" 661 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 662 | dependencies: 663 | is-glob "^4.0.1" 664 | 665 | glob-parent@^6.0.1: 666 | version "6.0.2" 667 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 668 | dependencies: 669 | is-glob "^4.0.3" 670 | 671 | glob@^7.1.3, glob@^7.1.7: 672 | version "7.2.0" 673 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 674 | dependencies: 675 | fs.realpath "^1.0.0" 676 | inflight "^1.0.4" 677 | inherits "2" 678 | minimatch "^3.0.4" 679 | once "^1.3.0" 680 | path-is-absolute "^1.0.0" 681 | 682 | globby@^11.0.0: 683 | version "11.1.0" 684 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 685 | dependencies: 686 | array-union "^2.1.0" 687 | dir-glob "^3.0.1" 688 | fast-glob "^3.2.9" 689 | ignore "^5.2.0" 690 | merge2 "^1.4.1" 691 | slash "^3.0.0" 692 | 693 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 694 | version "4.2.9" 695 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz" 696 | 697 | has-bigints@^1.0.1: 698 | version "1.0.1" 699 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" 700 | 701 | has-flag@^3.0.0: 702 | version "3.0.0" 703 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 704 | 705 | has-flag@^4.0.0: 706 | version "4.0.0" 707 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 708 | 709 | has-symbols@^1.0.1, has-symbols@^1.0.2: 710 | version "1.0.3" 711 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 712 | 713 | has-tostringtag@^1.0.0: 714 | version "1.0.0" 715 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 716 | dependencies: 717 | has-symbols "^1.0.2" 718 | 719 | has@^1.0.0, has@^1.0.3: 720 | version "1.0.3" 721 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 722 | dependencies: 723 | function-bind "^1.1.1" 724 | 725 | hex-color-regex@^1.1.0: 726 | version "1.1.0" 727 | resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" 728 | 729 | hsl-regex@^1.0.0: 730 | version "1.0.0" 731 | resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" 732 | 733 | hsla-regex@^1.0.0: 734 | version "1.0.0" 735 | resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" 736 | 737 | html-tags@^3.1.0: 738 | version "3.1.0" 739 | resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" 740 | 741 | ignore@^5.2.0: 742 | version "5.2.0" 743 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" 744 | 745 | import-fresh@^2.0.0: 746 | version "2.0.0" 747 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" 748 | dependencies: 749 | caller-path "^2.0.0" 750 | resolve-from "^3.0.0" 751 | 752 | import-fresh@^3.2.1: 753 | version "3.3.0" 754 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 755 | dependencies: 756 | parent-module "^1.0.0" 757 | resolve-from "^4.0.0" 758 | 759 | indexes-of@^1.0.1: 760 | version "1.0.1" 761 | resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" 762 | 763 | inflight@^1.0.4: 764 | version "1.0.6" 765 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 766 | dependencies: 767 | once "^1.3.0" 768 | wrappy "1" 769 | 770 | inherits@2: 771 | version "2.0.4" 772 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 773 | 774 | internal-slot@^1.0.3: 775 | version "1.0.3" 776 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" 777 | dependencies: 778 | get-intrinsic "^1.1.0" 779 | has "^1.0.3" 780 | side-channel "^1.0.4" 781 | 782 | is-absolute-url@^2.0.0: 783 | version "2.1.0" 784 | resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" 785 | 786 | is-arrayish@^0.2.1: 787 | version "0.2.1" 788 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" 789 | 790 | is-arrayish@^0.3.1: 791 | version "0.3.2" 792 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" 793 | 794 | is-bigint@^1.0.1: 795 | version "1.0.4" 796 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 797 | dependencies: 798 | has-bigints "^1.0.1" 799 | 800 | is-binary-path@~2.1.0: 801 | version "2.1.0" 802 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 803 | dependencies: 804 | binary-extensions "^2.0.0" 805 | 806 | is-boolean-object@^1.1.0: 807 | version "1.1.2" 808 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 809 | dependencies: 810 | call-bind "^1.0.2" 811 | has-tostringtag "^1.0.0" 812 | 813 | is-callable@^1.1.4, is-callable@^1.2.4: 814 | version "1.2.4" 815 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" 816 | 817 | is-color-stop@^1.0.0, is-color-stop@^1.1.0: 818 | version "1.1.0" 819 | resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" 820 | dependencies: 821 | css-color-names "^0.0.4" 822 | hex-color-regex "^1.1.0" 823 | hsl-regex "^1.0.0" 824 | hsla-regex "^1.0.0" 825 | rgb-regex "^1.0.1" 826 | rgba-regex "^1.0.0" 827 | 828 | is-core-module@^2.8.1: 829 | version "2.8.1" 830 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz" 831 | dependencies: 832 | has "^1.0.3" 833 | 834 | is-date-object@^1.0.1: 835 | version "1.0.5" 836 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 837 | dependencies: 838 | has-tostringtag "^1.0.0" 839 | 840 | is-directory@^0.3.1: 841 | version "0.3.1" 842 | resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" 843 | 844 | is-extglob@^2.1.1: 845 | version "2.1.1" 846 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 847 | 848 | is-fullwidth-code-point@^3.0.0: 849 | version "3.0.0" 850 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 851 | 852 | is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 853 | version "4.0.3" 854 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 855 | dependencies: 856 | is-extglob "^2.1.1" 857 | 858 | is-negative-zero@^2.0.1: 859 | version "2.0.2" 860 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 861 | 862 | is-number-object@^1.0.4: 863 | version "1.0.6" 864 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz" 865 | dependencies: 866 | has-tostringtag "^1.0.0" 867 | 868 | is-number@^7.0.0: 869 | version "7.0.0" 870 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 871 | 872 | is-obj@^2.0.0: 873 | version "2.0.0" 874 | resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" 875 | 876 | is-regex@^1.1.4: 877 | version "1.1.4" 878 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 879 | dependencies: 880 | call-bind "^1.0.2" 881 | has-tostringtag "^1.0.0" 882 | 883 | is-resolvable@^1.0.0: 884 | version "1.1.0" 885 | resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" 886 | 887 | is-shared-array-buffer@^1.0.1: 888 | version "1.0.1" 889 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz" 890 | 891 | is-string@^1.0.5, is-string@^1.0.7: 892 | version "1.0.7" 893 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 894 | dependencies: 895 | has-tostringtag "^1.0.0" 896 | 897 | is-symbol@^1.0.2, is-symbol@^1.0.3: 898 | version "1.0.4" 899 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 900 | dependencies: 901 | has-symbols "^1.0.2" 902 | 903 | is-weakref@^1.0.1: 904 | version "1.0.2" 905 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 906 | dependencies: 907 | call-bind "^1.0.2" 908 | 909 | js-tokens@^4.0.0: 910 | version "4.0.0" 911 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 912 | 913 | js-yaml@^3.13.1: 914 | version "3.14.1" 915 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" 916 | dependencies: 917 | argparse "^1.0.7" 918 | esprima "^4.0.0" 919 | 920 | json-parse-better-errors@^1.0.1: 921 | version "1.0.2" 922 | resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" 923 | 924 | json-parse-even-better-errors@^2.3.0: 925 | version "2.3.1" 926 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" 927 | 928 | jsonfile@^6.0.1: 929 | version "6.1.0" 930 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" 931 | dependencies: 932 | universalify "^2.0.0" 933 | optionalDependencies: 934 | graceful-fs "^4.1.6" 935 | 936 | lilconfig@^2.0.4: 937 | version "2.0.4" 938 | resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz" 939 | 940 | lines-and-columns@^1.1.6: 941 | version "1.2.4" 942 | resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" 943 | 944 | lodash.castarray@^4.4.0: 945 | version "4.4.0" 946 | resolved "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz" 947 | 948 | lodash.isplainobject@^4.0.6: 949 | version "4.0.6" 950 | resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" 951 | 952 | lodash.memoize@^4.1.2: 953 | version "4.1.2" 954 | resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" 955 | 956 | lodash.merge@^4.6.2: 957 | version "4.6.2" 958 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 959 | 960 | lodash.topath@^4.5.2: 961 | version "4.5.2" 962 | resolved "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz" 963 | 964 | lodash.uniq@^4.5.0: 965 | version "4.5.0" 966 | resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" 967 | 968 | lodash@^4.17.21: 969 | version "4.17.21" 970 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 971 | 972 | mdn-data@2.0.14: 973 | version "2.0.14" 974 | resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" 975 | 976 | mdn-data@2.0.4: 977 | version "2.0.4" 978 | resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" 979 | 980 | merge2@^1.3.0, merge2@^1.4.1: 981 | version "1.4.1" 982 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 983 | 984 | micromatch@^4.0.4: 985 | version "4.0.4" 986 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" 987 | dependencies: 988 | braces "^3.0.1" 989 | picomatch "^2.2.3" 990 | 991 | minimatch@^3.0.4: 992 | version "3.1.2" 993 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 994 | dependencies: 995 | brace-expansion "^1.1.7" 996 | 997 | minimist@^1.1.1, minimist@^1.2.5: 998 | version "1.2.6" 999 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 1000 | 1001 | mkdirp@~0.5.1: 1002 | version "0.5.5" 1003 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" 1004 | dependencies: 1005 | minimist "^1.2.5" 1006 | 1007 | modern-normalize@^1.1.0: 1008 | version "1.1.0" 1009 | resolved "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz" 1010 | 1011 | nanoid@^3.3.1: 1012 | version "3.3.1" 1013 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" 1014 | 1015 | node-emoji@^1.11.0: 1016 | version "1.11.0" 1017 | resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" 1018 | dependencies: 1019 | lodash "^4.17.21" 1020 | 1021 | node-releases@^2.0.2: 1022 | version "2.0.2" 1023 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz" 1024 | 1025 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1026 | version "3.0.0" 1027 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 1028 | 1029 | normalize-range@^0.1.2: 1030 | version "0.1.2" 1031 | resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" 1032 | 1033 | normalize-url@^3.0.0: 1034 | version "3.3.0" 1035 | resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" 1036 | 1037 | nth-check@^1.0.2: 1038 | version "1.0.2" 1039 | resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" 1040 | dependencies: 1041 | boolbase "~1.0.0" 1042 | 1043 | object-hash@^2.2.0: 1044 | version "2.2.0" 1045 | resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz" 1046 | 1047 | object-inspect@^1.11.0, object-inspect@^1.9.0: 1048 | version "1.12.0" 1049 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz" 1050 | 1051 | object-keys@^1.0.12, object-keys@^1.1.1: 1052 | version "1.1.1" 1053 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1054 | 1055 | object.assign@^4.1.2: 1056 | version "4.1.2" 1057 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" 1058 | dependencies: 1059 | call-bind "^1.0.0" 1060 | define-properties "^1.1.3" 1061 | has-symbols "^1.0.1" 1062 | object-keys "^1.1.1" 1063 | 1064 | object.getownpropertydescriptors@^2.1.0: 1065 | version "2.1.3" 1066 | resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz" 1067 | dependencies: 1068 | call-bind "^1.0.2" 1069 | define-properties "^1.1.3" 1070 | es-abstract "^1.19.1" 1071 | 1072 | object.values@^1.1.0: 1073 | version "1.1.5" 1074 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" 1075 | dependencies: 1076 | call-bind "^1.0.2" 1077 | define-properties "^1.1.3" 1078 | es-abstract "^1.19.1" 1079 | 1080 | once@^1.3.0: 1081 | version "1.4.0" 1082 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1083 | dependencies: 1084 | wrappy "1" 1085 | 1086 | parent-module@^1.0.0: 1087 | version "1.0.1" 1088 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1089 | dependencies: 1090 | callsites "^3.0.0" 1091 | 1092 | parse-json@^4.0.0: 1093 | version "4.0.0" 1094 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" 1095 | dependencies: 1096 | error-ex "^1.3.1" 1097 | json-parse-better-errors "^1.0.1" 1098 | 1099 | parse-json@^5.0.0: 1100 | version "5.2.0" 1101 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" 1102 | dependencies: 1103 | "@babel/code-frame" "^7.0.0" 1104 | error-ex "^1.3.1" 1105 | json-parse-even-better-errors "^2.3.0" 1106 | lines-and-columns "^1.1.6" 1107 | 1108 | path-is-absolute@^1.0.0: 1109 | version "1.0.1" 1110 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1111 | 1112 | path-parse@^1.0.7: 1113 | version "1.0.7" 1114 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1115 | 1116 | path-type@^4.0.0: 1117 | version "4.0.0" 1118 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1119 | 1120 | picocolors@^0.2.1: 1121 | version "0.2.1" 1122 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" 1123 | 1124 | picocolors@^1.0.0: 1125 | version "1.0.0" 1126 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" 1127 | 1128 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: 1129 | version "2.3.1" 1130 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1131 | 1132 | pify@^2.3.0: 1133 | version "2.3.0" 1134 | resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" 1135 | 1136 | postcss-calc@^7.0.1: 1137 | version "7.0.5" 1138 | resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz" 1139 | dependencies: 1140 | postcss "^7.0.27" 1141 | postcss-selector-parser "^6.0.2" 1142 | postcss-value-parser "^4.0.2" 1143 | 1144 | postcss-cli@^8.3.1: 1145 | version "8.3.1" 1146 | resolved "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.3.1.tgz" 1147 | dependencies: 1148 | chalk "^4.0.0" 1149 | chokidar "^3.3.0" 1150 | dependency-graph "^0.9.0" 1151 | fs-extra "^9.0.0" 1152 | get-stdin "^8.0.0" 1153 | globby "^11.0.0" 1154 | postcss-load-config "^3.0.0" 1155 | postcss-reporter "^7.0.0" 1156 | pretty-hrtime "^1.0.3" 1157 | read-cache "^1.0.0" 1158 | slash "^3.0.0" 1159 | yargs "^16.0.0" 1160 | 1161 | postcss-colormin@^4.0.3: 1162 | version "4.0.3" 1163 | resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" 1164 | dependencies: 1165 | browserslist "^4.0.0" 1166 | color "^3.0.0" 1167 | has "^1.0.0" 1168 | postcss "^7.0.0" 1169 | postcss-value-parser "^3.0.0" 1170 | 1171 | postcss-convert-values@^4.0.1: 1172 | version "4.0.1" 1173 | resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" 1174 | dependencies: 1175 | postcss "^7.0.0" 1176 | postcss-value-parser "^3.0.0" 1177 | 1178 | postcss-discard-comments@^4.0.2: 1179 | version "4.0.2" 1180 | resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" 1181 | dependencies: 1182 | postcss "^7.0.0" 1183 | 1184 | postcss-discard-duplicates@^4.0.2: 1185 | version "4.0.2" 1186 | resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" 1187 | dependencies: 1188 | postcss "^7.0.0" 1189 | 1190 | postcss-discard-empty@^4.0.1: 1191 | version "4.0.1" 1192 | resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" 1193 | dependencies: 1194 | postcss "^7.0.0" 1195 | 1196 | postcss-discard-overridden@^4.0.1: 1197 | version "4.0.1" 1198 | resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" 1199 | dependencies: 1200 | postcss "^7.0.0" 1201 | 1202 | postcss-import@^14.0.0: 1203 | version "14.0.2" 1204 | resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz" 1205 | dependencies: 1206 | postcss-value-parser "^4.0.0" 1207 | read-cache "^1.0.0" 1208 | resolve "^1.1.7" 1209 | 1210 | postcss-js@^3.0.3: 1211 | version "3.0.3" 1212 | resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz" 1213 | dependencies: 1214 | camelcase-css "^2.0.1" 1215 | postcss "^8.1.6" 1216 | 1217 | postcss-load-config@^3.0.0, postcss-load-config@^3.1.0: 1218 | version "3.1.3" 1219 | resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz" 1220 | dependencies: 1221 | lilconfig "^2.0.4" 1222 | yaml "^1.10.2" 1223 | 1224 | postcss-merge-longhand@^4.0.11: 1225 | version "4.0.11" 1226 | resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" 1227 | dependencies: 1228 | css-color-names "0.0.4" 1229 | postcss "^7.0.0" 1230 | postcss-value-parser "^3.0.0" 1231 | stylehacks "^4.0.0" 1232 | 1233 | postcss-merge-rules@^4.0.3: 1234 | version "4.0.3" 1235 | resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" 1236 | dependencies: 1237 | browserslist "^4.0.0" 1238 | caniuse-api "^3.0.0" 1239 | cssnano-util-same-parent "^4.0.0" 1240 | postcss "^7.0.0" 1241 | postcss-selector-parser "^3.0.0" 1242 | vendors "^1.0.0" 1243 | 1244 | postcss-minify-font-values@^4.0.2: 1245 | version "4.0.2" 1246 | resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" 1247 | dependencies: 1248 | postcss "^7.0.0" 1249 | postcss-value-parser "^3.0.0" 1250 | 1251 | postcss-minify-gradients@^4.0.2: 1252 | version "4.0.2" 1253 | resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" 1254 | dependencies: 1255 | cssnano-util-get-arguments "^4.0.0" 1256 | is-color-stop "^1.0.0" 1257 | postcss "^7.0.0" 1258 | postcss-value-parser "^3.0.0" 1259 | 1260 | postcss-minify-params@^4.0.2: 1261 | version "4.0.2" 1262 | resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" 1263 | dependencies: 1264 | alphanum-sort "^1.0.0" 1265 | browserslist "^4.0.0" 1266 | cssnano-util-get-arguments "^4.0.0" 1267 | postcss "^7.0.0" 1268 | postcss-value-parser "^3.0.0" 1269 | uniqs "^2.0.0" 1270 | 1271 | postcss-minify-selectors@^4.0.2: 1272 | version "4.0.2" 1273 | resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" 1274 | dependencies: 1275 | alphanum-sort "^1.0.0" 1276 | has "^1.0.0" 1277 | postcss "^7.0.0" 1278 | postcss-selector-parser "^3.0.0" 1279 | 1280 | postcss-nested@5.0.6: 1281 | version "5.0.6" 1282 | resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz" 1283 | dependencies: 1284 | postcss-selector-parser "^6.0.6" 1285 | 1286 | postcss-normalize-charset@^4.0.1: 1287 | version "4.0.1" 1288 | resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" 1289 | dependencies: 1290 | postcss "^7.0.0" 1291 | 1292 | postcss-normalize-display-values@^4.0.2: 1293 | version "4.0.2" 1294 | resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" 1295 | dependencies: 1296 | cssnano-util-get-match "^4.0.0" 1297 | postcss "^7.0.0" 1298 | postcss-value-parser "^3.0.0" 1299 | 1300 | postcss-normalize-positions@^4.0.2: 1301 | version "4.0.2" 1302 | resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" 1303 | dependencies: 1304 | cssnano-util-get-arguments "^4.0.0" 1305 | has "^1.0.0" 1306 | postcss "^7.0.0" 1307 | postcss-value-parser "^3.0.0" 1308 | 1309 | postcss-normalize-repeat-style@^4.0.2: 1310 | version "4.0.2" 1311 | resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" 1312 | dependencies: 1313 | cssnano-util-get-arguments "^4.0.0" 1314 | cssnano-util-get-match "^4.0.0" 1315 | postcss "^7.0.0" 1316 | postcss-value-parser "^3.0.0" 1317 | 1318 | postcss-normalize-string@^4.0.2: 1319 | version "4.0.2" 1320 | resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" 1321 | dependencies: 1322 | has "^1.0.0" 1323 | postcss "^7.0.0" 1324 | postcss-value-parser "^3.0.0" 1325 | 1326 | postcss-normalize-timing-functions@^4.0.2: 1327 | version "4.0.2" 1328 | resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" 1329 | dependencies: 1330 | cssnano-util-get-match "^4.0.0" 1331 | postcss "^7.0.0" 1332 | postcss-value-parser "^3.0.0" 1333 | 1334 | postcss-normalize-unicode@^4.0.1: 1335 | version "4.0.1" 1336 | resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" 1337 | dependencies: 1338 | browserslist "^4.0.0" 1339 | postcss "^7.0.0" 1340 | postcss-value-parser "^3.0.0" 1341 | 1342 | postcss-normalize-url@^4.0.1: 1343 | version "4.0.1" 1344 | resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" 1345 | dependencies: 1346 | is-absolute-url "^2.0.0" 1347 | normalize-url "^3.0.0" 1348 | postcss "^7.0.0" 1349 | postcss-value-parser "^3.0.0" 1350 | 1351 | postcss-normalize-whitespace@^4.0.2: 1352 | version "4.0.2" 1353 | resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" 1354 | dependencies: 1355 | postcss "^7.0.0" 1356 | postcss-value-parser "^3.0.0" 1357 | 1358 | postcss-ordered-values@^4.1.2: 1359 | version "4.1.2" 1360 | resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" 1361 | dependencies: 1362 | cssnano-util-get-arguments "^4.0.0" 1363 | postcss "^7.0.0" 1364 | postcss-value-parser "^3.0.0" 1365 | 1366 | postcss-reduce-initial@^4.0.3: 1367 | version "4.0.3" 1368 | resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" 1369 | dependencies: 1370 | browserslist "^4.0.0" 1371 | caniuse-api "^3.0.0" 1372 | has "^1.0.0" 1373 | postcss "^7.0.0" 1374 | 1375 | postcss-reduce-transforms@^4.0.2: 1376 | version "4.0.2" 1377 | resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" 1378 | dependencies: 1379 | cssnano-util-get-match "^4.0.0" 1380 | has "^1.0.0" 1381 | postcss "^7.0.0" 1382 | postcss-value-parser "^3.0.0" 1383 | 1384 | postcss-reporter@^7.0.0: 1385 | version "7.0.5" 1386 | resolved "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz" 1387 | dependencies: 1388 | picocolors "^1.0.0" 1389 | thenby "^1.3.4" 1390 | 1391 | postcss-selector-parser@^3.0.0: 1392 | version "3.1.2" 1393 | resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" 1394 | dependencies: 1395 | dot-prop "^5.2.0" 1396 | indexes-of "^1.0.1" 1397 | uniq "^1.0.1" 1398 | 1399 | postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.6: 1400 | version "6.0.9" 1401 | resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz" 1402 | dependencies: 1403 | cssesc "^3.0.0" 1404 | util-deprecate "^1.0.2" 1405 | 1406 | postcss-svgo@^4.0.3: 1407 | version "4.0.3" 1408 | resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz" 1409 | dependencies: 1410 | postcss "^7.0.0" 1411 | postcss-value-parser "^3.0.0" 1412 | svgo "^1.0.0" 1413 | 1414 | postcss-unique-selectors@^4.0.1: 1415 | version "4.0.1" 1416 | resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" 1417 | dependencies: 1418 | alphanum-sort "^1.0.0" 1419 | postcss "^7.0.0" 1420 | uniqs "^2.0.0" 1421 | 1422 | postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: 1423 | version "3.3.1" 1424 | resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" 1425 | 1426 | postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: 1427 | version "4.2.0" 1428 | resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" 1429 | 1430 | postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27: 1431 | version "7.0.39" 1432 | resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" 1433 | dependencies: 1434 | picocolors "^0.2.1" 1435 | source-map "^0.6.1" 1436 | 1437 | postcss@^8.1.6, postcss@^8.2.10, postcss@^8.3.5: 1438 | version "8.4.7" 1439 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.7.tgz" 1440 | dependencies: 1441 | nanoid "^3.3.1" 1442 | picocolors "^1.0.0" 1443 | source-map-js "^1.0.2" 1444 | 1445 | pretty-hrtime@^1.0.3: 1446 | version "1.0.3" 1447 | resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" 1448 | 1449 | purgecss@^4.0.3, purgecss@^4.1.3: 1450 | version "4.1.3" 1451 | resolved "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz" 1452 | dependencies: 1453 | commander "^8.0.0" 1454 | glob "^7.1.7" 1455 | postcss "^8.3.5" 1456 | postcss-selector-parser "^6.0.6" 1457 | 1458 | q@^1.1.2: 1459 | version "1.5.1" 1460 | resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" 1461 | 1462 | queue-microtask@^1.2.2: 1463 | version "1.2.3" 1464 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1465 | 1466 | quick-lru@^5.1.1: 1467 | version "5.1.1" 1468 | resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" 1469 | 1470 | read-cache@^1.0.0: 1471 | version "1.0.0" 1472 | resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" 1473 | dependencies: 1474 | pify "^2.3.0" 1475 | 1476 | readdirp@~3.6.0: 1477 | version "3.6.0" 1478 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 1479 | dependencies: 1480 | picomatch "^2.2.1" 1481 | 1482 | reduce-css-calc@^2.1.8: 1483 | version "2.1.8" 1484 | resolved "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz" 1485 | dependencies: 1486 | css-unit-converter "^1.1.1" 1487 | postcss-value-parser "^3.3.0" 1488 | 1489 | require-directory@^2.1.1: 1490 | version "2.1.1" 1491 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 1492 | 1493 | resolve-from@^3.0.0: 1494 | version "3.0.0" 1495 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" 1496 | 1497 | resolve-from@^4.0.0: 1498 | version "4.0.0" 1499 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1500 | 1501 | resolve@^1.1.7, resolve@^1.20.0: 1502 | version "1.22.0" 1503 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" 1504 | dependencies: 1505 | is-core-module "^2.8.1" 1506 | path-parse "^1.0.7" 1507 | supports-preserve-symlinks-flag "^1.0.0" 1508 | 1509 | reusify@^1.0.4: 1510 | version "1.0.4" 1511 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1512 | 1513 | rgb-regex@^1.0.1: 1514 | version "1.0.1" 1515 | resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" 1516 | 1517 | rgba-regex@^1.0.0: 1518 | version "1.0.0" 1519 | resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" 1520 | 1521 | rimraf@^3.0.0: 1522 | version "3.0.2" 1523 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1524 | dependencies: 1525 | glob "^7.1.3" 1526 | 1527 | run-parallel@^1.1.9: 1528 | version "1.2.0" 1529 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1530 | dependencies: 1531 | queue-microtask "^1.2.2" 1532 | 1533 | sax@~1.2.4: 1534 | version "1.2.4" 1535 | resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" 1536 | 1537 | side-channel@^1.0.4: 1538 | version "1.0.4" 1539 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1540 | dependencies: 1541 | call-bind "^1.0.0" 1542 | get-intrinsic "^1.0.2" 1543 | object-inspect "^1.9.0" 1544 | 1545 | simple-swizzle@^0.2.2: 1546 | version "0.2.2" 1547 | resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" 1548 | dependencies: 1549 | is-arrayish "^0.3.1" 1550 | 1551 | slash@^3.0.0: 1552 | version "3.0.0" 1553 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1554 | 1555 | source-map-js@^1.0.2: 1556 | version "1.0.2" 1557 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" 1558 | 1559 | source-map@^0.6.1: 1560 | version "0.6.1" 1561 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 1562 | 1563 | sprintf-js@~1.0.2: 1564 | version "1.0.3" 1565 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" 1566 | 1567 | stable@^0.1.8: 1568 | version "0.1.8" 1569 | resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" 1570 | 1571 | string-width@^4.1.0, string-width@^4.2.0: 1572 | version "4.2.3" 1573 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1574 | dependencies: 1575 | emoji-regex "^8.0.0" 1576 | is-fullwidth-code-point "^3.0.0" 1577 | strip-ansi "^6.0.1" 1578 | 1579 | string.prototype.trimend@^1.0.4: 1580 | version "1.0.4" 1581 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" 1582 | dependencies: 1583 | call-bind "^1.0.2" 1584 | define-properties "^1.1.3" 1585 | 1586 | string.prototype.trimstart@^1.0.4: 1587 | version "1.0.4" 1588 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" 1589 | dependencies: 1590 | call-bind "^1.0.2" 1591 | define-properties "^1.1.3" 1592 | 1593 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1594 | version "6.0.1" 1595 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1596 | dependencies: 1597 | ansi-regex "^5.0.1" 1598 | 1599 | stylehacks@^4.0.0: 1600 | version "4.0.3" 1601 | resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" 1602 | dependencies: 1603 | browserslist "^4.0.0" 1604 | postcss "^7.0.0" 1605 | postcss-selector-parser "^3.0.0" 1606 | 1607 | supports-color@^5.3.0: 1608 | version "5.5.0" 1609 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 1610 | dependencies: 1611 | has-flag "^3.0.0" 1612 | 1613 | supports-color@^7.1.0: 1614 | version "7.2.0" 1615 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1616 | dependencies: 1617 | has-flag "^4.0.0" 1618 | 1619 | supports-preserve-symlinks-flag@^1.0.0: 1620 | version "1.0.0" 1621 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1622 | 1623 | svgo@^1.0.0: 1624 | version "1.3.2" 1625 | resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" 1626 | dependencies: 1627 | chalk "^2.4.1" 1628 | coa "^2.0.2" 1629 | css-select "^2.0.0" 1630 | css-select-base-adapter "^0.1.1" 1631 | css-tree "1.0.0-alpha.37" 1632 | csso "^4.0.2" 1633 | js-yaml "^3.13.1" 1634 | mkdirp "~0.5.1" 1635 | object.values "^1.1.0" 1636 | sax "~1.2.4" 1637 | stable "^0.1.8" 1638 | unquote "~1.1.1" 1639 | util.promisify "~1.0.0" 1640 | 1641 | tailwindcss@^2.0.3: 1642 | version "2.2.19" 1643 | resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.19.tgz" 1644 | dependencies: 1645 | arg "^5.0.1" 1646 | bytes "^3.0.0" 1647 | chalk "^4.1.2" 1648 | chokidar "^3.5.2" 1649 | color "^4.0.1" 1650 | cosmiconfig "^7.0.1" 1651 | detective "^5.2.0" 1652 | didyoumean "^1.2.2" 1653 | dlv "^1.1.3" 1654 | fast-glob "^3.2.7" 1655 | fs-extra "^10.0.0" 1656 | glob-parent "^6.0.1" 1657 | html-tags "^3.1.0" 1658 | is-color-stop "^1.1.0" 1659 | is-glob "^4.0.1" 1660 | lodash "^4.17.21" 1661 | lodash.topath "^4.5.2" 1662 | modern-normalize "^1.1.0" 1663 | node-emoji "^1.11.0" 1664 | normalize-path "^3.0.0" 1665 | object-hash "^2.2.0" 1666 | postcss-js "^3.0.3" 1667 | postcss-load-config "^3.1.0" 1668 | postcss-nested "5.0.6" 1669 | postcss-selector-parser "^6.0.6" 1670 | postcss-value-parser "^4.1.0" 1671 | pretty-hrtime "^1.0.3" 1672 | purgecss "^4.0.3" 1673 | quick-lru "^5.1.1" 1674 | reduce-css-calc "^2.1.8" 1675 | resolve "^1.20.0" 1676 | tmp "^0.2.1" 1677 | 1678 | thenby@^1.3.4: 1679 | version "1.3.4" 1680 | resolved "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz" 1681 | 1682 | timsort@^0.3.0: 1683 | version "0.3.0" 1684 | resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" 1685 | 1686 | tmp@^0.2.1: 1687 | version "0.2.1" 1688 | resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" 1689 | dependencies: 1690 | rimraf "^3.0.0" 1691 | 1692 | to-regex-range@^5.0.1: 1693 | version "5.0.1" 1694 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1695 | dependencies: 1696 | is-number "^7.0.0" 1697 | 1698 | unbox-primitive@^1.0.1: 1699 | version "1.0.1" 1700 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" 1701 | dependencies: 1702 | function-bind "^1.1.1" 1703 | has-bigints "^1.0.1" 1704 | has-symbols "^1.0.2" 1705 | which-boxed-primitive "^1.0.2" 1706 | 1707 | uniq@^1.0.1: 1708 | version "1.0.1" 1709 | resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" 1710 | 1711 | uniqs@^2.0.0: 1712 | version "2.0.0" 1713 | resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" 1714 | 1715 | universalify@^2.0.0: 1716 | version "2.0.0" 1717 | resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" 1718 | 1719 | unquote@~1.1.1: 1720 | version "1.1.1" 1721 | resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" 1722 | 1723 | util-deprecate@^1.0.2: 1724 | version "1.0.2" 1725 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1726 | 1727 | util.promisify@~1.0.0: 1728 | version "1.0.1" 1729 | resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" 1730 | dependencies: 1731 | define-properties "^1.1.3" 1732 | es-abstract "^1.17.2" 1733 | has-symbols "^1.0.1" 1734 | object.getownpropertydescriptors "^2.1.0" 1735 | 1736 | vendors@^1.0.0: 1737 | version "1.0.4" 1738 | resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" 1739 | 1740 | which-boxed-primitive@^1.0.2: 1741 | version "1.0.2" 1742 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1743 | dependencies: 1744 | is-bigint "^1.0.1" 1745 | is-boolean-object "^1.1.0" 1746 | is-number-object "^1.0.4" 1747 | is-string "^1.0.5" 1748 | is-symbol "^1.0.3" 1749 | 1750 | wrap-ansi@^7.0.0: 1751 | version "7.0.0" 1752 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1753 | dependencies: 1754 | ansi-styles "^4.0.0" 1755 | string-width "^4.1.0" 1756 | strip-ansi "^6.0.0" 1757 | 1758 | wrappy@1: 1759 | version "1.0.2" 1760 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1761 | 1762 | xtend@^4.0.2: 1763 | version "4.0.2" 1764 | resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" 1765 | 1766 | y18n@^5.0.5: 1767 | version "5.0.8" 1768 | resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1769 | 1770 | yaml@^1.10.0, yaml@^1.10.2: 1771 | version "1.10.2" 1772 | resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" 1773 | 1774 | yargs-parser@^20.2.2: 1775 | version "20.2.9" 1776 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" 1777 | 1778 | yargs@^16.0.0: 1779 | version "16.2.0" 1780 | resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" 1781 | dependencies: 1782 | cliui "^7.0.2" 1783 | escalade "^3.1.1" 1784 | get-caller-file "^2.0.5" 1785 | require-directory "^2.1.1" 1786 | string-width "^4.2.0" 1787 | y18n "^5.0.5" 1788 | yargs-parser "^20.2.2" 1789 | 1790 | yarn@^1.22.17: 1791 | version "1.22.17" 1792 | resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.17.tgz" 1793 | --------------------------------------------------------------------------------