diff --git a/sites/postcss-preset-env/.gitignore b/sites/postcss-preset-env/.gitignore new file mode 100644 index 000000000..46e7689af --- /dev/null +++ b/sites/postcss-preset-env/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +node_modules +public +package-lock.json diff --git a/sites/postcss-preset-env/README.md b/sites/postcss-preset-env/README.md new file mode 100644 index 000000000..963c71a3e --- /dev/null +++ b/sites/postcss-preset-env/README.md @@ -0,0 +1,16 @@ +# postcss_preset_env + +The official website for [PostCSS Preset Env](https://github.com/csstools/postcss-preset-env) + +## Setup + +- make sure [node.js](http://nodejs.org) is at version >= `6` +- `npm i spike -g` +- clone this repo down and `cd` into the folder +- run `npm install` +- run `spike watch` or `spike compile` + +## Testing +Tests are located in `test/**` and are powered by [ava](https://github.com/sindresorhus/ava) +- `npm install` to ensure devDeps are installed +- `npm test` to run test suite diff --git a/sites/postcss-preset-env/SPIKE.md b/sites/postcss-preset-env/SPIKE.md new file mode 100644 index 000000000..32707039d --- /dev/null +++ b/sites/postcss-preset-env/SPIKE.md @@ -0,0 +1,16 @@ +# + + + +## Setup + +- make sure [node.js](http://nodejs.org) is at version >= `6` +- `npm i spike -g` +- clone this repo down and `cd` into the folder +- run `npm install` +- run `spike watch` or `spike compile` + +## Testing +Tests are located in `test/**` and are powered by [ava](https://github.com/sindresorhus/ava) +- `npm install` to ensure devDeps are installed +- `npm test` to run test suite diff --git a/sites/postcss-preset-env/app.js b/sites/postcss-preset-env/app.js new file mode 100644 index 000000000..7ec06c93a --- /dev/null +++ b/sites/postcss-preset-env/app.js @@ -0,0 +1,19 @@ +const htmlStandards = require('reshape-standard') +const cssStandards = require('spike-css-standards') +const jsStandards = require('spike-js-standards') +const pageId = require('spike-page-id') +const env = process.env.SPIKE_ENV + +module.exports = { + devtool: 'source-map', + ignore: ['**/layout.html', '**/_*', '**/.*', 'readme.md', 'yarn.lock', 'package-lock.json'], + reshape: htmlStandards({ + locals: (ctx) => { return { pageId: pageId(ctx), foo: 'bar' } }, + minify: env === 'production' + }), + postcss: cssStandards({ + minify: env === 'production', + warnForDuplicates: env !== 'production' + }), + babel: jsStandards() +} diff --git a/sites/postcss-preset-env/app.production.js b/sites/postcss-preset-env/app.production.js new file mode 100644 index 000000000..29d241003 --- /dev/null +++ b/sites/postcss-preset-env/app.production.js @@ -0,0 +1,10 @@ +const optimize = require('spike-optimize') + +module.exports = { + devtool: false, + afterSpikePlugins: [...optimize({ + scopeHoisting: true, + aggressiveSplitting: true, + minify: true + })] +} diff --git a/sites/postcss-preset-env/assets/css/_global.css b/sites/postcss-preset-env/assets/css/_global.css new file mode 100644 index 000000000..b8c053799 --- /dev/null +++ b/sites/postcss-preset-env/assets/css/_global.css @@ -0,0 +1,230 @@ +* { + box-sizing: border-box; + transition: all .3s cubic-bezier(0.250, 0.460, 0.450, 0.940) +} + +html { + font: 300 100%/1.5 "Roboto", "Helvetica Neue", sans-serif +} + +body { + margin: 0 +} + +.g-code { + font: 300 100%/1.5 "Roboto Mono", monospace; + background: #282C34; + border-radius: 3px; + padding: 16px +} + + +#social { + position: absolute; + top: 0; + right: 30px; + grid-template-columns: repeat(2, 1fr); + grid-gap: 0px; + @media (max-width: 920px) { + display: none; + } +} + +header { + display: flex; + align-items: center; + flex-direction: column; + min-height: 60vh; + justify-content: center; + padding: 15px 15px 30px; + text-align: center; + animation: rolling 30s ease infinite; + background-image: linear-gradient(238deg, #9952c8, #318edf); + background-size: 200% 200%; + color: #ffffff +} + +header h1 { + font-size: 300%; + font-weight: 300; + margin: 0 +} + + + +header h1 { + @media (max-width: 480px) { + font-size: 175% + } +} + +header p { + font-size: 150%; + opacity: 0.875; + margin: 15px 0 0 +} + + + +header p { + @media (max-width: 480px) { + font-size: 100%; + margin: 0 + } +} + +header nav { + display: grid; + grid-gap: 20px; + justify-content: center; + grid-template-columns: repeat(4, 1fr); + margin-top: 30px +} + + + +header nav { + @media (max-width: 920px) { + grid-gap: 15px; + grid-template-columns: 1fr 1fr + } +} + +header nav a { + align-items: center; + background-color: rgba(0, 0, 0, .2); + border-radius: 5px; + color: #ffffff; + display: inline-flex; + flex-direction: column; + height: 180px; + justify-content: center; + text-decoration: none; + transition: all .3s cubic-bezier(0.250, 0.460, 0.450, 0.940), color 0s; + width: 180px +} + + + +header nav a { + @media (max-width: 920px) { + height: 120px; + width: 120px + } +} + +header nav a svg { + fill: #ffffff; + height: 100px; + width: 100px +} + + + +header nav a svg { + @media (max-width: 920px) { + height: 60px; + width: 60px + } +} + +header nav a:hover, + header nav a:focus { + background-color: rgba(255, 255, 255, 1); + box-shadow: 0 20px 40px rgba(0, 0, 0, .3), 0 15px 12px rgba(0, 0, 0, .22); + color: #f527e0; + transform: scale(1.1) +} + +header nav a:hover svg, header nav a:focus svg { + fill: url(#linear) +} + +/* when you nest with sugarSS is it the same as using a ">"? */ + +body > p { + font-weight: 400; + letter-spacing: 0.025em; + margin: 50px auto 20px; + max-width: 35em; + padding: 0 1em; + text-align: center +} + + + +body > p { + @media (max-width: 920px) { + margin: 20px auto + } +} + +body > p > a { + box-shadow: 0 1px 0 0 transparent; + color: #3095ff; + text-decoration: none +} + +body > p > a:hover, body > p > a:focus { + box-shadow: 0 1px 0 0 +} + +body > div { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + margin: 0 0 20px; + justify-content: center +} + +body > div > code { + background-color: #2e2e2e; + border-radius: 5px; + border-width: 0; + color: #ffffff; + font: 400 100%/1.5 "Roboto Mono", monospace, monospace; + margin: 0 15px; + padding: 5px 20px +} + +body > div > code > span { + display: inline-block +} + +body > div > code:hover, +body > div > code:focus { + background-color: #1e73be +} + +/* dunno if this is the right way to write this */ +@keyframes rolling { + 0% { + background-position: 0% 50% + } + 50% { + background-position: 100% 50% + } + 100% { + background-position: 0% 50% + } +} + +#description { + display: grid; + justify-content: center; + align-items: center; + text-align: center; + height: 10em; + & h3, + & code { + width: 40%; + justify-self: center; + @media (max-width: 920px) { + width: 70%; + } + } + & code { + color: white; + background: #2E2E2E; + } +} diff --git a/sites/postcss-preset-env/assets/css/_global.sss b/sites/postcss-preset-env/assets/css/_global.sss new file mode 100644 index 000000000..c05f01a26 --- /dev/null +++ b/sites/postcss-preset-env/assets/css/_global.sss @@ -0,0 +1,127 @@ +* + box-sizing: border-box + transition: all .3s cubic-bezier(0.250, 0.460, 0.450, 0.940) + +html + font: 300 100%/1.5 "Roboto", "Helvetica Neue", sans-serif + +body + margin: 0 + +header + display: flex + align-items: center + flex-direction: column + min-height: 60vh + justify-content: center + padding: 15px 15px 30px + text-align: center + animation: rolling 30s ease infinite + background-image: linear-gradient(238deg, #9952c8, #318edf) + background-size: 200% 200% + color: #ffffff + + & h1 + font-size: 300% + font-weight: 300 + margin: 0 + @media (max-width: 480px) + font-size: 175% + + & p + font-size: 150% + opacity: 0.875 + margin: 15px 0 0 + @media (max-width: 480px) + font-size: 100% + margin: 0 + + & nav + display: grid + grid-gap: 20px + justify-content: center + grid-template-columns: repeat(4, 1fr) + margin-top: 30px + @media (max-width: 920px) + grid-gap: 15px + grid-template-columns: 1fr 1fr + & a + align-items: center + background-color: rgba(0, 0, 0, .2) + border-radius: 5px + color: #ffffff + display: inline-flex + flex-direction: column + height: 180px + justify-content: center + text-decoration: none + transition: all .3s cubic-bezier(0.250, 0.460, 0.450, 0.940), color 0s + width: 180px + @media (max-width: 920px) + height: 120px + width: 120px + & svg + fill: #ffffff + height: 100px + width: 100px + @media (max-width: 920px) + height: 60px + width: 60px + & a:hover, + & a:focus + background-color: rgba(255,255,255,1) + box-shadow: 0 20px 40px rgba(0, 0, 0, .3), 0 15px 12px rgba(0, 0, 0, .22) + color: #f527e0 + transform: scale(1.1) + & svg + fill: url(#linear) + +/* when you nest with sugarSS is it the same as using a ">"? */ + +body > p + font-weight: 400 + letter-spacing: 0.025em + margin: 50px auto 20px + max-width: 35em + padding: 0 1em + text-align: center + @media (max-width: 920px) + margin: 20px auto + +body > p > a + box-shadow: 0 1px 0 0 transparent + color: #3095ff + text-decoration: none + +body > p > a:hover, body > p > a:focus + box-shadow: 0 1px 0 0 + +body > div + display: flex + margin: 0 0 20px + justify-content: center + +body > div > code + background-color: #2e2e2e + border-radius: 5px + border-width: 0 + color: #ffffff + font: 400 100%/1.5 "Roboto Mono", monospace, monospace + margin: 0 15px + padding: 5px 20px + +body > div > code > span + display: inline-block + +body > div > code:hover, +body > div > code:focus + background-color: #1e73be + +/* dunno if this is the right way to write this */ +@keyframes rolling + 0% + background-position: 0% 50% + 50% + background-position: 100% 50% + 100% + background-position: 0% 50% diff --git a/sites/postcss-preset-env/assets/css/index.css b/sites/postcss-preset-env/assets/css/index.css new file mode 100644 index 000000000..48f880d35 --- /dev/null +++ b/sites/postcss-preset-env/assets/css/index.css @@ -0,0 +1,3 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono'); + +@import '_global'; diff --git a/sites/postcss-preset-env/assets/css/index.sss b/sites/postcss-preset-env/assets/css/index.sss new file mode 100644 index 000000000..9141e21ef --- /dev/null +++ b/sites/postcss-preset-env/assets/css/index.sss @@ -0,0 +1,3 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto') + +@import '_global.sss' diff --git a/sites/postcss-preset-env/assets/img/.gitkeep b/sites/postcss-preset-env/assets/img/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/sites/postcss-preset-env/assets/js/index.js b/sites/postcss-preset-env/assets/js/index.js new file mode 100644 index 000000000..b9cad1ffb --- /dev/null +++ b/sites/postcss-preset-env/assets/js/index.js @@ -0,0 +1,62 @@ +export const simpleSir = [ + "./////////-:///+//+osyyhhhhhhyys+////::::+///////////////////////////////////////////`", + "./////////-://oshhddmmmmmmddhhhdhhhyso/::+///////////////////////////////////////////`", + "./////////-/ydmmNNNddddhdhddmdyhdddddddy++///////////////////////////////////////////`", + ".////////+ymNmmmmddddmmNmmdmmmmddhhhddddddh+/////////////////////////////////////////`", + "`///////smNNNNNmmmmdddmmddmdmNmdmmddmddmNNmd++///////////////////////////////////////`", + "`:::::/ymNNNNNmNmdNNdmddhhhhhddhhddddddhhhmmhs///////////////////////////////////////`", + ".:-://ymNNNNNNNmddddhhhysso+ooooooooo++ohhmNNmy//////////////////////////////////////`", + "` :oNNNNNmmdhyssoooo+/::---------:::/+ydmmNmdh/////////////////////////////////////`", + ".` -NNNNdhyo+///:::----........------/ohdmhmhdo::::::::::::::::::::::::::::::::::::`", + ".. mNNmhso++/::::----..........------+hhddhyhs::::::::::::::::::::::::::::::::::::`", + ".: .mNNdyso++//:::----..........------/hhhhyyyy/:::::::::::::::::::::::::::::::::::`", + "./` .mNNhssoo+//:::-----...........----/yyssyyyy////////////////////////////////////`", + "./. .mNmhssso++//::------.........-----/yhhyhyho////////////////////////////////////`", + "./- dmNhysso++//::-------........-----/yddyyyy+////////////////////////////////////`", + "./- omNhyyyso++///:::--::::/:::-------:sdhhddh/////////////////////////////////////`", + ".//.` .dNdhhyyyyysoo/::-::/++o+/:--::---:/hdhy+/:::::::::::::::::::::::::::::::::::::`", + "`///::+hNhyhhyhhysyyy/:--:/+oosso++:----::os+--:/-:::::::::::::::::::::::::::::::::::`", + "./////hhmyyhhssoo+oss/:----/+++/:--------:+:-..-:-:::::::::::::::::::::::::::::::::::`", + "./////hhdyssssooo+os+::------::----..----::::-:-:::::::::::::::::::::::::::::::::::::`", + "./////syyys+////++ss/:-.----------...---::..-:---::::::::::::::::::::::::::::::::::::`", + "`//////yyys++///+oyo/--.----:::---...------..---:::::::::::::::::::::::::::::::::::::`", + "`::::::/yyso+++ossys/:-.-::---///:---------..-:::::::::::::::::::::::::::::::::::::::`", + ".////////sysoosyyyyys+/::------/oo/::----/:://:::::::::::::::::::::::-:-::-:/:-------`", + "./////////yyssyhyyyyso+/---.----/os/-----:/+o++///////////////::::/::-:-::-:/:-------`", + "./////////oyo+syhhyso/:::----:++/:o:------::++////////////////::::/::-:-::-:/:-------`", + ".//////////sy++syhmhss++:----::---+:---:--:::++o//////////////::::/::-:-::-:/:-------`", + "`:::::::::::osoosyyyso+//:--------:--::-.----/hd+:::::::::::::::::/::-:-::-:/:-------`", + "`::::::::::::/osssyyyo+//:::::-----:::-..----:+/--::::::::::::::::/::-:-::-:/:-------`", + "`::::::::::::::/sssyyyso+//:::----:::-------:/---:-:::::::::::::::/::-:-::-:/:-------`", + "`::::::::::::::::+ssso++/::------:/:------:/:--::--:-:::::::::::::/::-:-::-:/:-------`", + ".///////:....` `+yso+/::::--:://:------:/---/--::--/::::::::::::/::-:-::-:/:-------`", + ".////:.` `+ddyysoo+++++++/::----:::--::-:/---::+/::::::::::/::-:-::-:/:-------`", + ".//:. `sddmhyyyyyyso+/::::--::/:::/--::.-:::-://:::::::::/::-:-::-:/:-------`", + ".//. `sdhmmdyysssoo//::::::/:/:-::--/--:/:+/+:/+:::::::::/::-:-::-:/:-------`", + "./. `odhhmNmhyyo++///////++//:-::-::--//:+::+:///:::/:::::::-:-::-:/:-------`", + ".` -ohyyhdmNmyyys++++++o+//:-:/:-:-:::-:+::+++///::/:/:::/::::-::-:/:-------`", + "-ossssyyymmNhyyyyssss+///-:/:--::-/:-:+////////:/:/::/::::::::::-:/:-------`", + "-syhos++sssddNmyyyyyys+sss+//--//::/--:/+///+:///+/:+//://::::::::::/:-------`", + "/hhhhdyosoossshNdyyyy+oyyhhhdyos/-::::/:++//+//+:////:/+//:::::/::::::-:::::::`", + "/yhhhhdmmdds++o+shyysoyyydyhdhddhhys/:/-:+//+/////://:+/:///::::-:/:/:/::-:::::`", + "/yhhhhhhdddddhsooossysshsyhhhhhhhhhhyys+///+///:+//+/:+::/::///--:-:--:---::::::`", + ":hyhhhhhhhhhhhhhysosooyysssyssyssoossysos+/o//+/++/+//+::+:/+::+-:+--/-:::-:-:-::`", + "shhhhyyyyyyyyyyy++--/ososooo+o+o++o+++/o//o//+://///+//+/::+-/:-/--/::--/-:-::-::`", + ".hhyyyyyyysyssss++/:-/o+o+oo+o+++/+//+/++/+/+//+//+++++/+://::/://--+--/-:---::-/-`", + "/dhyysssssssssss///o+o+++++/o/++/+/++/+//+/+//s//o/:o:/+/++:o:-+/-/:/-:+--/-:-:-::`", + "/ysyyyssssssosy/o/o//oo+/+/+/++/+//+/+//o//+/+//+//+/++::o/::+::y-/:-:::--/-:-:-::`", + "/yhhyysosss+oso+:+o/++soo/+//o/+//+/+//+:/+:/+//+/+///:/o/+:/+::+:/:-+:-/:/--/:::-`", + "shhyysssss+sss++/oo+/+oso+//+/+++o/o//+:/+:/+:///o/:+::o:+:+:/+:o:/--+-.+--:-/-::-`", + "shyssssyssoyoos+oos////sos/+//o/o/+++o/+/://:///++/+::+/++/:o/-o+:+-:+-:+--/-/-:--`", + ".yyssyssooso++++oos+//++so+//+/+++s+o+++/o/://:///+-:+/+++:/+:/+o-/.:/-:/--/-:----`", + "`..+sysyssoss+o+o+oosoo////sos+o//o/+//o+s/:soo+//////:/::oo:s/:o:+o:/:/://:/:/-::-/:`", + "./+sysssossoosoo++oo+so///++ooo+/o/+++s//o//-/ooos+:+-/:/o+++++/:o++-://-//:+/::-/::-`", + "./osysoooooo/soo+oos+soo////o+s+o//o/+//o//o:-o/+yos:://o:+o/+o/+o/o:-o/-+:-+--:-/::-`", + ".+yysssoooo++os/:/s+oos+/+/o++o+o/o//s+/++o///://oss+-/+/+//++/s/s:+:-s/-o:-o--/-/:/-.", + ".syyyssss+o/o/s+:+o+soy+o//+/o+s++o+o//o::s/:s::s:oyo/s+::++/yo+y+/o--o--o--o.-/-/.:-.", + ".yhysssoso++s+sosyooosoo/:o+o++o/s//o+/+++/++:/://:yss+so/:o:ssos//+::o-:o-:o--/:/-/-`", + ".yhyysssos/+y+ssosss+yss+o:/o/o++o+s//s::s::s::o:/o/ss:yh+::+ysoy///-:/-/o::+.-/-:-:- ", + ".sysssss+o//ysoyoshs+sss++/o++o+s//o//o+++++o+-/:-+/+s++dss::soho++:///+++//+-:+:://-" +].join("\n") + +console.log(simpleSir) diff --git a/sites/postcss-preset-env/dist/codepen.css b/sites/postcss-preset-env/dist/codepen.css new file mode 100644 index 000000000..f7594ab24 --- /dev/null +++ b/sites/postcss-preset-env/dist/codepen.css @@ -0,0 +1,11 @@ +.ppe-codepen { + background-color: #1b2b34; + bottom: 0; + height: calc(100% - var(--heading-size)); + left: 0; + position: fixed; + right: 0; + top: var(--heading-size); + width: 100%; +} + diff --git a/sites/postcss-preset-env/dist/favicon.ico b/sites/postcss-preset-env/dist/favicon.ico new file mode 100644 index 000000000..9da27f682 Binary files /dev/null and b/sites/postcss-preset-env/dist/favicon.ico differ diff --git a/sites/postcss-preset-env/dist/features.css b/sites/postcss-preset-env/dist/features.css new file mode 100644 index 000000000..9492a5afd --- /dev/null +++ b/sites/postcss-preset-env/dist/features.css @@ -0,0 +1,240 @@ +.ppe-features { + display: flex; + flex-direction: row-reverse; +} + +@media (max-width: 859px) { + .ppe-features { + flex-direction: column; + } +} + +.ppe-404 { + padding: var(--heading-size) 40px; +} + +.ppe-navigation { + background-color: #f7f7f7; + bottom: 0; + left: 0; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + overflow-y: hidden; + overflow-y: overlay; + padding: calc(25px + var(--heading-size)) 35px 25px; + position: fixed; + top: 0; + width: 300px; +} + +@media (max-width: 1023px) { + .ppe-navigation { + padding: calc(25px + var(--heading-size)) 20px 25px; + width: 200px; + } +} + +@media (max-width: 859px) { + .ppe-navigation { + padding: 25px; + position: static; + width: auto; + } +} + +.ppe-navigation:hover { + overflow-y: auto; + overflow-y: overlay; +} + +@media (hover: none) { + .ppe-navigation { + overflow-y: auto; + overflow-y: overlay; + } +} + +.ppe-navigation-select { + display: block; + margin: 0 0 20px; + width: 100%; +} + +.ppe-menu-link { + color: #727272; + display: block; + font-style: normal; + font-size: 14px; + line-height: 1.285; + padding: 7px 0; +} + +.ppe-menu-link:hover, .ppe-menu-link:focus, .ppe-menu-link[aria-current] { + color: #000000; +} + +.ppe-features-list { + flex-grow: 1; + margin-left: 300px; + padding: 0 75px calc(var(--heading-size) * 1.25 + 50px); +} + +@media (max-width: 1023px) { + .ppe-features-list { + margin-left: 200px; + padding-left: 20px; + padding-right: 20px; + } +} + +@media (max-width: 859px) { + .ppe-features-list { + margin-left: 0; + } +} + +.ppe-sidebar-menu { + box-shadow: 0 -1px 0 0 #dddddd; + margin-top: 15px; + padding-top: 15px; +} + +.ppe-feature { + margin: 0 0 calc(var(--heading-size) * -1); +} + +.ppe-feature-heading { + align-items: center; + display: flex; + padding: calc(var(--heading-size) + 50px) 0 0; +} + +@media (max-width: 959px) { + .ppe-feature-heading { + flex-wrap: wrap; + } +} + +.ppe-feature-title { + color: #3c3c3c; + font-size: 32px; + font-weight: 500; + letter-spacing: -0.02em; + line-height: 1.25; + margin: 0 auto 0 0; +} + +@media (max-width: 959px) { + .ppe-feature-title { + flex-basis: 100%; + margin-bottom: 10px; + } +} + +.ppe-feature-heading-stage, .ppe-feature-heading-specLink, .ppe-feature-heading-pluginLink { + border-radius: 2px; + font-size: 10px; + font-weight: 600; + letter-spacing: 0.08em; + margin-left: 10px; + padding: 5px 10px; + text-transform: uppercase; +} + +@media (max-width: 959px) { + .ppe-feature-heading-stage { + margin-left: 0; + } +} + +.ppe-feature-heading-stage { + color: #ffffff; +} + +.ppe-feature-heading-stage[data-stage="0"] { + background-color: #414141; +} + +.ppe-feature-heading-stage[data-stage="1"] { + background-color: #ed782a; +} + +.ppe-feature-heading-stage[data-stage="2"] { + background-color: #899c1f; +} + +.ppe-feature-heading-stage[data-stage="3"] { + background-color: #3e7817; +} + +.ppe-feature-heading-stage[data-stage="4"] { + background-color: #005a9c; +} + +.ppe-feature-heading-specLink, .ppe-feature-heading-pluginLink { + background-color: #eeeeee; + color: #6c6c6c; +} + +.ppe-feature-heading:target, .ppe-feature-heading a:not(.ppe-feature-heading-stage):hover, .ppe-feature-heading a:not(.ppe-feature-heading-stage):focus { + color: #3095ff; +} + +.ppe-feature-description { + font-weight: 300; +} + +.ppe-feature-example { + background-color: #282c34; + border-radius: 3px; + color: #cdd3de; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + overflow-x: hidden; + overflow-x: overlay; + padding: 15px 30px; +} + +.ppe-feature-example:hover { + overflow-x: auto; + overflow-x: overlay; +} + +@media (hover: none) { + .ppe-feature-example { + overflow-x: auto; + overflow-x: overlay; + } +} + +.css-atrule-name { + color: #f99157; +} + +.css-atrule-params, .css-selector { + color: #c594c5; +} + +.css-comment { + color: #65737e; +} + +.css-property { + color: #99c794; +} + +.css-value { + color: #c594c5; +} + +.css-var { + color: #e16f78; +} + +.css-function { + color: #6699cc; +} + +.css-string { + color: #fac863; +} diff --git a/sites/postcss-preset-env/dist/features/index.html b/sites/postcss-preset-env/dist/features/index.html new file mode 100644 index 000000000..c61e6fdef --- /dev/null +++ b/sites/postcss-preset-env/dist/features/index.html @@ -0,0 +1,685 @@ + + + postcss-preset-env + + + + + + + + + + + + + + + + +

+ postcss-preset-env +

+ +
+ +
+
+ +
+
+

+ + all property + +

+ Stage 3 + Specification + Plugin +
+

A property for defining the reset of all properties of an element

+
a {
+  all: initial;
+}
+
+ +

A pseudo-class for matching anchor elements independent of whether they have been visited

+
nav :any-link > span {
+  background-color: yellow;
+}
+
+
+

+ + :blank empty-value pseudo-class + +

+ Stage 1 + Specification + Plugin +
+

A pseudo-class for matching form elements when they are empty

+
input:blank {
+  background-color: yellow;
+}
+
+
+

+ + break properties + +

+ Stage 3 + Specification + Plugin +
+

Properties for defining the break behavior between and within boxes

+
a {
+  break-inside: avoid;
+  break-before: avoid-column;
+  break-after: always;
+}
+
+
+

+ + case-insensitive attributes + +

+ Stage 2 + Specification + Plugin +
+

An attribute selector matching attribute values case-insensitively

+
[frame=hsides i] {
+  border-style: solid none;
+}
+
+
+

+ + functional color notation + +

+ Stage 1 + Specification + Plugin +
+

A space and slash separated notation for specifying colors

+
em {
+  background-color: hsl(120deg 100% 25%);
+  box-shadow: 0 0 0 10px hwb(120deg 100% 25% / 80%);
+  color: rgb(0 255 0);
+}
+
+
+

+ + custom media queries + +

+ Stage 1 + Specification + Plugin +
+

An at-rule for defining aliases that represent media queries

+
@custom-media --narrow-window (max-width: 30em);
+
+@media (--narrow-window) {}
+
+
+

+ + custom properties + +

+ Stage 3 + Specification + Plugin +
+

A syntax for defining custom values accepted by all CSS properties

+
img {
+  --some-length: 32px;
+
+  height: var(--some-length);
+  width: var(--some-length);
+}
+
+
+

+ + custom selectors + +

+ Stage 1 + Specification + Plugin +
+

An at-rule for defining aliases that represent selectors

+
@custom-selector :--heading h1, h2, h3, h4, h5, h6;
+
+article :--heading + p {}
+
+
+

+ + :dir pseudo-class + +

+ Stage 2 + Specification + Plugin +
+

A pseudo-class for matching elements based on their directionality

+
blockquote:dir(rtl) {
+  margin-right: 10px;
+}
+
+blockquote:dir(ltr) {
+  margin-left: 10px;
+}
+
+
+

+ + double position gradients + +

+ Stage 2 + Specification + Plugin +
+

A syntax for using two positions in a gradient.

+
.pie_chart {
+  background-image: conic-gradient(yellowgreen 40%, gold 0deg 75%, #f06 0deg);
+}
+
+
+

+ + custom environment variables + +

+ Stage 0 + Specification + Plugin +
+

A syntax for using custom values accepted by CSS globally

+
@media (max-width: env(--brand-small)) {
+  body {
+    padding: env(--brand-spacing);
+  }
+}
+
+
+

+ + :focus-visible pseudo-class + +

+ Stage 2 + Specification + Plugin +
+

A pseudo-class for matching focused elements that indicate that focus to a user

+
:focus:not(:focus-visible) {
+  outline: 0;
+}
+
+
+

+ + :focus-within pseudo-class + +

+ Stage 2 + Specification + Plugin +
+

A pseudo-class for matching elements that are either focused or that have focused descendants

+
form:focus-within {
+  background: rgba(0, 0, 0, 0.3);
+}
+
+
+

+ + font-variant property + +

+ Stage 3 + Specification + Plugin +
+

A property for defining the usage of alternate glyphs in a font

+
h2 {
+  font-variant: small-caps;
+}
+
+
+

+ + gap properties + +

+ Stage 3 + Specification + Plugin +
+

Properties for defining gutters within a layout

+
.grid-1 {
+  gap: 20px;
+}
+
+.grid-2 {
+  column-gap: 40px;
+  row-gap: 20px;
+}
+
+
+

+ + gray() function + +

+ Stage 2 + Specification + Plugin +
+

A function for specifying fully desaturated colors

+
p {
+  color: gray(50);
+}
+
+
+

+ + alpha hex colors + +

+ Stage 2 + Specification + Plugin +
+

A 4 & 8 character hex color notation for specifying the opacity level

+
section {
+  background-color: #f3f3f3f3;
+  color: #0003;
+}
+
+
+

+ + hwb() function + +

+ Stage 2 + Specification + Plugin +
+

A function for specifying colors by hue and then a degree of whiteness and blackness to mix into it

+
p {
+  color: hwb(120 44% 50%);
+}
+
+
+

+ + image-set() function + +

+ Stage 2 + Specification + Plugin +
+

A function for specifying image sources based on the user’s resolution

+
p {
+  background-image: image-set(
+    "foo.png" 1x,
+    "foo-2x.png" 2x,
+    "foo-print.png" 600dpi
+  );
+}
+
+
+

+ + lab() function + +

+ Stage 2 + Specification + Plugin +
+

A function for specifying colors expressed in the CIE Lab color space

+
body {
+  color: lab(240 50 20);
+}
+
+
+

+ + lch() function + +

+ Stage 2 + Specification + Plugin +
+

A function for specifying colors expressed in the CIE Lab color space with chroma and hue

+
body {
+  color: lch(53 105 40);
+}
+
+
+

+ + logical properties and values + +

+ Stage 2 + Specification + Plugin +
+

Flow-relative (left-to-right or right-to-left) properties and values

+
span:first-child {
+  float: inline-start;
+  margin-inline-start: 10px;
+}
+
+
+

+ + :matches pseudo-class + +

+ Stage 2 + Specification + Plugin +
+

A pseudo-class for matching elements in a selector list

+
p:matches(:first-child, .special) {
+  margin-top: 1em;
+}
+
+
+

+ + media query ranges + +

+ Stage 3 + Specification + Plugin +
+

A syntax for defining media query ranges using ordinary comparison operators

+
@media (width < 480px) {}
+
+@media (480px <= width < 768px) {}
+
+@media (width >= 768px) {}
+
+
+

+ + nesting rules + +

+ Stage 1 + Specification + Plugin +
+

A syntax for nesting relative rules within rules

+
article {
+  & p {
+    color: #333;
+  }
+}
+
+
+

+ + :not pseudo-class + +

+ Stage 2 + Specification + Plugin +
+

A pseudo-class for ignoring elements in a selector list

+
p:not(:first-child, .special) {
+  margin-top: 1em;
+}
+
+
+

+ + overflow shorthand property + +

+ Stage 2 + Specification + Plugin +
+

A property for defining `overflow-x` and `overflow-y`

+
html {
+  overflow: hidden auto;
+}
+
+
+

+ + overflow-wrap property + +

+ Stage 2 + Specification + Plugin +
+

A property for defining whether to insert line breaks within words to prevent overflowing

+
p {
+  overflow-wrap: break-word;
+}
+
+
+

+ + place properties + +

+ Stage 2 + Specification + Plugin +
+

Properties for defining alignment within a layout

+
.example {
+  place-content: flex-end;
+  place-items: center / space-between;
+  place-self: flex-start / center;
+}
+
+
+

+ + prefers-color-scheme media query + +

+ Stage 1 + Specification + Plugin +
+

A media query to detect if the user has requested the system use a light or dark color theme

+
body {
+  background-color: white;
+  color: black;
+}
+
+@media (prefers-color-scheme: dark) {
+  body {
+    background-color: black;
+    color: white;
+  }
+}
+
+
+

+ + rebeccapurple color + +

+ Stage 2 + Specification + Plugin +
+

A particularly lovely shade of purple in memory of Rebecca Alison Meyer

+
html {
+  color: rebeccapurple;
+}
+
+
+

+ + system-ui font family + +

+ Stage 2 + Specification + Plugin +
+

A generic font used to match the user’s interface

+
body {
+  font-family: system-ui;
+}
+
+
+ + + +
+ + + diff --git a/sites/postcss-preset-env/dist/heading.css b/sites/postcss-preset-env/dist/heading.css new file mode 100644 index 000000000..62a4cd1b7 --- /dev/null +++ b/sites/postcss-preset-env/dist/heading.css @@ -0,0 +1,91 @@ +.ppe-heading { + align-items: center; + background-color: #1874d5; + background-image: linear-gradient(90deg, #9952c8, #1874d5); + color: #ffffff; + display: flex; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1; +} + +.ppe-heading-title { + font-size: 26px; + font-weight: 400; + letter-spacing: -0.02em; + margin: 0; + padding: 0 40px; + white-space: nowrap; +} + +@media (max-width: 1023px) { + .ppe-heading-title { + padding: 0 20px; + } +} + +@media (max-width: 859px) { + .ppe-heading-title { + font-size: 20px; + margin-right: auto; + } +} + +@media (max-width: 369px) { + .ppe-heading-title { + font-size: 18px; + padding: 0 10px; + } +} + +.ppe-heading-menu-list { + display: flex; + margin: 0; + padding: 0; +} + +.ppe-heading-menu-link { + align-items: center; + display: flex; + padding: 20px 25px; +} + +@media (max-width: 859px) { + .ppe-heading-menu-link { + padding: 8px 15px; + } +} + +@media (max-width: 639px) { + .ppe-heading-menu-link span { + clip: rect(0 0 0 0); + position: absolute; + } +} + +.ppe-heading-menu-link[aria-current="page"] { + background-color: rgba(0,0,0,0.4); +} + +.ppe-heading-menu-link svg { + display: block; + fill: currentColor; + height: 40px; + margin-right: 20px; + width: 40px; +} + +@media (max-width: 859px) { + .ppe-heading-menu-link svg { + height: 24px; + width: 24px; + } +} + +@media (max-width: 639px) { + .ppe-heading-menu-link svg { + margin-right: 0; + } +} diff --git a/sites/postcss-preset-env/dist/index.html b/sites/postcss-preset-env/dist/index.html new file mode 100644 index 000000000..a493f602c --- /dev/null +++ b/sites/postcss-preset-env/dist/index.html @@ -0,0 +1,79 @@ + + + postcss-preset-env + + + + + + + + + + + + + + + +
+

postcss-preset-env

+

Use tomorrow’s CSS today.

+ +
+
+

PostCSS Preset Env lets you convert modern CSS into something most browsers can understand, determining the polyfills you need based on your targeted browsers or runtime environments, using cssdb.

+

+ + npm install postcss-preset-env + +

+ +

+ +

+
+ + + diff --git a/sites/postcss-preset-env/dist/landing.css b/sites/postcss-preset-env/dist/landing.css new file mode 100644 index 000000000..562b6af63 --- /dev/null +++ b/sites/postcss-preset-env/dist/landing.css @@ -0,0 +1,176 @@ +.ppe-landing-header { + align-items: center; + animation: rolling 30s ease infinite; + background-image: linear-gradient(238deg, #9952c8, #1874d5); + background-size: 300% 300%; + color: #ffffff; + display: flex; + flex-direction: column; + justify-content: center; + min-height: 60vh; + padding: 15px 15px 70px; + text-align: center; +} + +.ppe-landing-title { + font-size: 300%; + font-weight: 100; + margin: 12px 0 0; +} + +@media (max-width: 480px) { + .ppe-landing-title { + font-size: 175%; + } +} + +.ppe-landing-tag { + font-weight: 300; + opacity: 0.7; + margin: 0 0 12px 0; +} + +@media (max-width: 480px) { + .ppe-landing-tag { + font-size: 75%; + } +} + +.ppe-landing-menu { + display: grid; + grid-gap: 20px; + justify-content: center; + grid-template-columns: repeat(4, 1fr); + margin-top: 30px; +} + +@media (max-width: 959px) { + .ppe-landing-menu { + grid-gap: 15px; + grid-template-columns: repeat(2, 1fr); + } +} + +.ppe-landing-menu-link { + align-items: center; + background-color: rgba(0, 0, 0, .2); + border-radius: 5px; + color: #ffffff; + display: inline-flex; + flex-direction: column; + height: 180px; + justify-content: center; + text-decoration: none; + transition: all .3s cubic-bezier(0.250, 0.460, 0.450, 0.940), color 0s; + width: 180px; +} + +@media (max-width: 959px) { + .ppe-landing-menu-link { + height: 120px; + width: 120px; + } +} + +.ppe-landing-menu-link:hover, .ppe-landing-menu-link:focus { + background-color: black; + background-color: rgba(255,255,255,1); + box-shadow: 0 20px 40px rgba(0, 0, 0, .3), 0 15px 12px rgba(0, 0, 0, .22); + color: #f527e0; + transform: scale(1.1); +} + +.ppe-landing-menu-link svg { + fill: currentColor; + height: 65px; + width: 65px; +} + +.ppe-landing-menu-link span { + font-size: 14px; + font-weight: 400; + margin: 12px 0 0; +} + +.ppe-landing-menu-link:hover svg { + fill: url(#linear); +} + +.ppe-landing-content { + font-weight: 400; + margin: 50px auto 20px; + max-width: 37em; + padding: 0 1em; + text-align: center; +} + +.ppe-landing-content a { + box-shadow: 0 1px 0 0 transparent; + color: #0078d6; + text-decoration: none; +} + +.ppe-landing-content a:hover, .ppe-landing-content a:focus { + box-shadow: 0 1px 0 0; +} + +.ppe-landing-action { + display: flex; + justify-content: center; + margin: 0 15px 20px; +} + +.ppe-landing-clipboard { + background-color: #2e2e2e; + border-radius: 5px; + border-width: 0; + align-items: center; + color: #ffffff; + display: flex; + font: 400 100%/1.5 var(--font-code); + margin: 12px 0 30px; + padding: 10px 20px; + text-align: center; +} + +.ppe-landing-clipboard span { + display: inline-block; +} + +.ppe-landing-clipboard-action { + fill: currentColor; +} + +.ppe-landing-clipboard-button { + appearance: none; + background-color: transparent; + border-width: 0; + color: inherit; + display: block; + font: inherit; + height: 20px; + line-height: inherit; + margin: 0 0 0 4px; + padding: 2px; + width: 20px; +} + +.ppe-landing-clipboard-text span { + display: inline-block; +} + +.ppe-landing-clipboard-action { + display: block; + height: 16px; + width: 16px; +} + +@keyframes rolling { + 0% { background-position: 0% 50% } + 50% { background-position: 100% 50% } + 100% { background-position: 0% 50% } +} + +.ppe-deploys { + text-align: center; +} diff --git a/sites/postcss-preset-env/dist/playground/index.html b/sites/postcss-preset-env/dist/playground/index.html new file mode 100644 index 000000000..70f840a28 --- /dev/null +++ b/sites/postcss-preset-env/dist/playground/index.html @@ -0,0 +1,70 @@ + + + postcss-preset-env + + + + + + + + + + + + + + + + +

+ postcss-preset-env +

+ +
+ + + + + + diff --git a/sites/postcss-preset-env/dist/script.js b/sites/postcss-preset-env/dist/script.js new file mode 100644 index 000000000..ced0861cc --- /dev/null +++ b/sites/postcss-preset-env/dist/script.js @@ -0,0 +1,168 @@ +function onParsed() { + initFeatureNav(); + onHashChange(); + onCopyClipboard(); +} + +!function d() { + /c/.test(document.readyState) && document.body + ? document.removeEventListener('readystatechange', d) | onParsed() + : document.addEventListener('readystatechange', d) +}() + +window.addEventListener('hashchange', onHashChange); + +const hashElements = []; +const omittedElements = []; +const stages = [0, 1, 2, 3]; +let stageSelect = null; + +function onCopyClipboard() { + Array.prototype.forEach.call( + document.querySelectorAll('[data-clipboard]'), + $target => { + const $parent = $target.parentNode; + const $input = document.createElement('input'); + $input.value = $target.textContent || $target.innerText; + const $button = document.createElement('button'); + $button.className = 'ppe-landing-clipboard-button'; + $button.title = 'copy to clipboard'; + $button.innerHTML = '' + + ''; + $button.addEventListener('click', () => { + document.body.appendChild($input); + $input.select(); + document.execCommand('copy'); + document.body.removeChild($input); + }); + $parent.insertBefore($button, $target.nextElementSibling); + } + ); +} + +function onHashChange() { + hashElements.forEach(element => { + element.removeAttribute('aria-current'); + }); + + const selector = `.ppe-features a[href="${location.pathname}${location.hash}"]`; + + hashElements.splice( + 0, + hashElements.length, + ...Array.prototype.slice.call( + document.querySelectorAll(selector) + ) + ); + + hashElements.forEach(element => { + element.setAttribute('aria-current', 'page'); + }); + + const stageRegExp = /^#stage-([0-4])$/; + + if (stageRegExp.test(location.hash)) { + const stageNumber = location.hash.match(stageRegExp)[1]; + + updateStage(stageNumber); + } +} + +function initFeatureNav() { + const nav = document.querySelector('.ppe-navigation'); + + if (nav) { + const select = stageSelect = document.createElement('select'); + + select.className = 'ppe-navigation-select'; + + select.label = 'Select which stages to navigate' + + stages.forEach(stage => { + const option = select.appendChild(document.createElement('option')); + + option.value = stage; + + option.appendChild(document.createTextNode(`Stage ${stage}+`)); + }); + + select.addEventListener('change', () => { + location.hash = `#stage-${select.value}`; + }); + + nav.insertBefore(select, nav.firstChild); + } +} + +document.addEventListener('click', function (event) { + const closestHash = event.target.closest('a[href*="#"]'); + + if (closestHash) { + const target = document.getElementById(closestHash.hash.slice(1)); + const easing = function (t) { + return t * (2 - t); + }; + + if (target) { + event.preventDefault(); + + scrollTo(target, 300, easing, function () { + location.hash = closestHash.hash; + }); + } + } +}); + +function scrollTo(target, duration, easing, callback) { + const start = window.pageYOffset; + const startTime = 'now' in window.performance ? performance.now() : new Date().getTime(); + + const documentHeight = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight); + const windowHeight = window.innerHeight || document.documentElement.clientHeight || document.getElementsByTagName('body')[0].clientHeight; + const targetOffset = typeof target === 'number' ? target : target.offsetTop; + const targetOffsetToScroll = Math.round(documentHeight - targetOffset < windowHeight ? documentHeight - windowHeight : targetOffset); + + scroll(); + + function scroll() { + const now = 'now' in window.performance ? performance.now() : new Date().getTime(); + const time = Math.min(1, ((now - startTime) / duration)); + const timeFunction = easing(time); + + window.scroll(0, Math.ceil((timeFunction * (targetOffsetToScroll - start)) + start)); + + if (window.pageYOffset !== targetOffsetToScroll) { + requestAnimationFrame(scroll); + } else { + window.scroll(0, start); + + callback(); + } + } +} + +function updateStage(number) { + omittedElements.forEach(element => { + element.hidden = false; + }); + const omittedStages = stages.slice(0, stages.indexOf(Number(number))); + const selector = omittedStages.map(stage => `[data-stage="${stage}"]`).join(','); + + omittedElements.splice( + 0, + omittedElements.length, + ...Array.prototype.slice.call( + selector ? document.querySelectorAll(selector) : [] + ) + ); + + omittedElements.forEach(element => { + element.hidden = true; + }); + + if (stageSelect) { + stageSelect.value = number; + } +} diff --git a/sites/postcss-preset-env/dist/style.css b/sites/postcss-preset-env/dist/style.css new file mode 100644 index 000000000..1be1df1b4 --- /dev/null +++ b/sites/postcss-preset-env/dist/style.css @@ -0,0 +1,168 @@ +@import url("./landing.css"); +@import url("./heading.css"); +@import url("./codepen.css"); +@import url("./features.css"); + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 100; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-UltraLight.woff2") format('woff') + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-UltraLight.woff") format("woff2"), +} + +@font-face { + font-family: "Avenir Next"; + font-style: italic; + font-weight: 100; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-UltraLightItalic.woff2") format("woff2"), + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-UltraLightItalic.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 300; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Regular.woff2") format("woff2"), + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Regular.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: italic; + font-weight: 300; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Italic.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Italic.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 400; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Medium.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Medium.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: italic; + font-weight: 400; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-MediumItalic.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-MediumItalic.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 600; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-DemiBold.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-DemiBold.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: italic; + font-weight: 600; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-DemiBoldItalic.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-DemiBoldItalic.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 700; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Bold.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Bold.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: italic; + font-weight: 700; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-BoldItalic.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-BoldItalic.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 900; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Heavy.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-Heavy.woff") format("woff"); +} + +@font-face { + font-family: "Avenir Next"; + font-style: normal; + font-weight: 900; + src: + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-HeavyItalic.woff2") format("woff2") + url("https://rawgit.com/vdyshkant/la-reine/master/src/fonts/AvenirNext/AvenirNext-HeavyItalic.woff") format("woff"); +} + +@font-face { + font-family: "Source Code Pro"; + font-style: normal; + font-weight: 400; + src: + url("https://rawgit.com/phyllisstein/grid-on-grid/master/src/vendor/fonts/source-code-pro/SourceCodePro-Semibold.woff2") format("woff2"), + url("https://rawgit.com/phyllisstein/grid-on-grid/master/src/vendor/fonts/source-code-pro/SourceCodePro-Semibold.woff") format("woff"); +} + +* { + box-sizing: border-box; + transition: all .3s cubic-bezier(0.250, 0.460, 0.450, 0.940), font-weight 0s; +} + +:root { + --heading-size: 80px; + --font-body: "Avenir Next", sans-serif; + --font-code: "Source Code Pro", monospace, monospace; + font: 400 100%/1.5 sans-serif; + font-family: var(--font-body); + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-smoothing: antialiased; + text-rendering: optimizeLegibility; + -webkit-text-size-adjust: 100%; +} + +@media (max-width: 859px) { + :root { + --heading-size: 40px; + } +} + +body { + margin: 0; +} + +pre { + font: 400 100%/1.5 var(--font-code); +} + +a { + color: inherit; + text-decoration: none; +} + +nav ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +[aria-current] { + font-weight: 500; +} diff --git a/sites/postcss-preset-env/package.json b/sites/postcss-preset-env/package.json new file mode 100644 index 000000000..18e13c5f1 --- /dev/null +++ b/sites/postcss-preset-env/package.json @@ -0,0 +1,37 @@ +{ + "name": "", + "description": "", + "version": "0.0.1", + "author": "", + "ava": { + "verbose": "true" + }, + "bugs": "https://github.com///issues", + "dependencies": { + "reshape-standard": "^3.0.0", + "spike-css-standards": "^3.0.0", + "spike-js-standards": "^2.0.2", + "spike-optimize": "^0.1.2", + "spike-page-id": "^1.0.0", + "spike": "^2.0.0" + }, + "devDependencies": { + "ava": "^0.19.1", + "rimraf": "^2.6.1", + "snazzy": "^7.0.0", + "standard": "^10.0.2" + }, + "homepage": "https://github.com//", + "main": "app.js", + "private": true, + "repository": "https://github.com//", + "scripts": { + "lint": "standard | snazzy", + "precommit": "npm run lint -s", + "pretest": "npm run lint -s", + "test": "NODE_ENV=test ava", + "start": "spike watch", + "build": "spike compile", + "prod": "NODE_ENV=production spike compile -e production" + } +} diff --git a/sites/postcss-preset-env/test/compile.js b/sites/postcss-preset-env/test/compile.js new file mode 100644 index 000000000..340b07f4f --- /dev/null +++ b/sites/postcss-preset-env/test/compile.js @@ -0,0 +1,22 @@ +const test = require('ava') +const path = require('path') +const rimraf = require('rimraf') +const Spike = require('spike-core') + +const p = path.join(__dirname, '..') + +test.cb.before((t) => { + rimraf(path.join(p, 'public'), () => { t.end() }) +}) + +// this test simply ensures your project compiles properly +// for more reliability, you'll want to edit or add your own tests +test('compiles project with spike', (t) => { + const project = new Spike({ root: p }) + return new Promise((resolve, reject) => { + project.on('error', reject) + project.on('warning', reject) + project.on('compile', resolve) + project.compile() + }).then(() => { t.pass() }, (err) => { t.fail(err.message) }) +}) diff --git a/sites/postcss-preset-env/views/_layout.sgr b/sites/postcss-preset-env/views/_layout.sgr new file mode 100644 index 000000000..cc12d729b --- /dev/null +++ b/sites/postcss-preset-env/views/_layout.sgr @@ -0,0 +1,20 @@ +doctype html +html + head + meta(charset='utf-8') + meta(http-equiv='X-UA-Compatible' content='IE=edge') + meta(name='description' content='') + meta(name='author' content='wommy') + meta(name='viewport' content='width=device-width, initial-scale=1') + + block(name='title') + title postcss-preset-env + + link(rel='stylesheet' href='css/index.css') + + body + main(role='main' id='{{ pageId }}') + block(name='content') + + block(name='javascript') + script(src='js/main.js' defer) diff --git a/sites/postcss-preset-env/views/cssdb.html b/sites/postcss-preset-env/views/cssdb.html new file mode 100644 index 000000000..ff4d98c03 --- /dev/null +++ b/sites/postcss-preset-env/views/cssdb.html @@ -0,0 +1,1401 @@ + +cssdb + + + + + + + + + + + + + + + + +
+ cssdb logo +
+

+ What’s next for CSS? +

+

+ cssdb is a comprehensive list of CSS features and their positions in the process of becoming implemented web standards. +

+
+ What are the stages? +
+ +
+
+
+ +
+

+ all Property +

+

+ A property for defining the reset of all properties of an element +

+
+
+
+

+ Specification + + cssdb badge + +

+
a {
+  all: initial;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Break Properties +

+

+ Properties for defining the break behavior between and within boxes +

+
+
+
+

+ Specification + + cssdb badge + +

+
a {
+  break-inside: avoid;
+  break-before: avoid-column;
+  break-after: always;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Custom Properties +

+

+ A syntax for defining custom values accepted by all CSS properties +

+
+
+
+

+ Specification + + cssdb badge + +

+
img {
+  --some-length: 32px;
+
+  height: var(--some-length);
+  width: var(--some-length);
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ font-variant Property +

+

+ A property for defining the usage of alternate glyphs in a font +

+
+
+
+

+ Specification + + cssdb badge + +

+
h2 {
+  font-variant-caps: small-caps;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Gap Properties +

+

+ Properties for defining gutters within a layout +

+
+
+
+

+ Specification + + cssdb badge + +

+
.grid-1 {
+  gap: 20px;
+}
+
+.grid-2 {
+  column-gap: 40px;
+  row-gap: 20px;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Grid Layout +

+

+ A syntax for using a grid concept to lay out content +

+
+
+
+

+ Specification + + cssdb badge + +

+
section {
+  display: grid;
+  grid-template-columns: 100px 100px 100px;
+  grid-gap: 10px;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Media Query Ranges +

+

+ A syntax for defining media query ranges using ordinary comparison operators +

+
+
+
+

+ Specification + + cssdb badge + +

+
@media (width < 480px) {}
+
+@media (480px <= width < 768px) {}
+
+@media (width >= 768px) {}
+ +
+ Use with a + +
+
+
+
+ +
+

+ Case-Insensitive Attributes +

+

+ An attribute selector matching attribute values case-insensitively +

+
+
+
+

+ Specification + + cssdb badge + +

+
[frame=hsides i] {
+  border-style: solid none;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ color-mod() Function +

+

+ A function for modifying colors +

+
+
+
+

+ Specification + + cssdb badge + +

+
p {
+  color: color-mod(black alpha(50%));
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ :dir Directionality Pseudo-Class +

+

+ A pseudo-class for matching elements based on their directionality +

+
+
+
+

+ Specification + + cssdb badge + +

+
.example:dir(rtl) {
+  margin-right: 10px;
+}
+
+.example:dir(ltr) {
+  margin-left: 10px;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ :focus-visible Focus-Indicated Pseudo-Class +

+

+ A pseudo-class for matching focused elements that indicate that focus to a user +

+
+
+
+

+ Specification + + cssdb badge + +

+
:focus:not(:focus-visible) {
+  outline: 0;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ :focus-within Focus Container Pseudo-Class +

+

+ A pseudo-class for matching elements that are either focused or that have focused descendants +

+
+
+
+

+ Specification + + cssdb badge + +

+
form:focus-within {
+  background: rgba(0, 0, 0, 0.3);
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ gray() Function +

+

+ A function for specifying fully desaturated colors +

+
+
+
+

+ Specification + + cssdb badge + +

+
p {
+  color: gray(50);
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ :has() Relational Pseudo-Class +

+

+ A pseudo-class for matching ancestor and sibling elements +

+
+
+
+

+ Specification + + cssdb badge + +

+
a:has(> img) {
+  display: block;
+}
+ + +
+
+
+ +
+

+ Hexadecimal Alpha Notation +

+

+ A 4 & 8 character hex color notation for specifying the opacity level +

+
+
+
+

+ Specification + + cssdb badge + +

+
section {
+  background-color: #f3f3f3f3;
+  color: #0003;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ hwb() Function +

+

+ A function for specifying colors by hue and then a degree of whiteness and blackness to mix into it +

+
+
+
+

+ Specification + + cssdb badge + +

+
p {
+  color: hwb(120 44% 50%);
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ image-set() Function +

+

+ A function for specifying image sources based on the user’s resolution +

+
+
+
+

+ Specification + + cssdb badge + +

+
p {
+  background-image: image-set(
+    "foo.png" 1x,
+    "foo-2x.png" 2x,
+    "foo-print.png" 600dpi
+  );
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ lab() Function +

+

+ A function for specifying colors expressed in the CIE Lab color space +

+
+
+
+

+ Specification + + cssdb badge + +

+
example {
+  color: lab(240 50 20)
+}
+ + +
+
+
+ +
+

+ lch() Function +

+

+ A function for specifying colors expressed in the CIE Lab color space with chroma and hue +

+
+
+
+

+ Specification + + cssdb badge + +

+
example {
+  color: lch(53 105 40)
+}
+ + +
+
+
+ +
+

+ Logical Properties and Values +

+

+ Flow-relative (left-to-right or right-to-left) properties and values +

+
+
+
+

+ Specification + + cssdb badge + +

+
span:first-child {
+  float: inline-start;
+  margin-inline-start: 10px;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ :matches() Matches-Any Pseudo-Class +

+

+ A pseudo-class for matching elements in a selector list +

+
+
+
+

+ Specification + + cssdb badge + +

+
p:matches(:first-child, .special) {
+  margin-top: 1em;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ :not() Negation Pseudo-Class +

+

+ A pseudo-class for ignoring elements in a selector list +

+
+
+
+

+ Specification + + cssdb badge + +

+
p:not(:first-child, .special) {
+  margin-top: 1em;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ overflow-wrap Property +

+

+ A property for defining whether to insert line breaks within words to prevent overflowing +

+
+
+
+

+ Specification + + cssdb badge + +

+
p {
+  overflow-wrap: break-word;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ rebeccapurple Color +

+

+ A particularly lovely shade of purple in memory of Rebecca Alison Meyer +

+
+
+
+

+ Specification + + cssdb badge + +

+
html {
+  color: rebeccapurple;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ :something() Zero-Specificity Pseudo-Class +

+

+ A pseudo-class for matching elements in a selector list without contributing specificity +

+
+
+
+

+ Specification + + cssdb badge + +

+
a:something(:not(:hover)) {
+  text-decoration: none;
+}
+ + +
+
+
+ +
+

+ system-ui Font Family +

+

+ A generic font used to match the user’s interface +

+
+
+
+

+ Specification + + cssdb badge + +

+
body {
+  font-family: system-ui;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Color Functional Notation +

+

+ A space and slash separated notation for specifying colors +

+
+
+
+

+ Specification + + cssdb badge + +

+
em {
+  background-color: hsl(120deg 100% 25%);
+  box-shadow: 0 0 0 10px hwb(120deg 100% 25% / 80%);
+  color: rgb(0 255 0);
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ Custom Media Queries +

+

+ An at-rule for defining aliases that represent media queries +

+
+
+
+

+ Specification + + cssdb badge + +

+
@custom-media --narrow-window (max-width: 30em)
+
+@media (--narrow-window) {}
+ +
+ Use with a + +
+
+
+
+ +
+

+ Custom Selectors +

+

+ An at-rule for defining aliases that represent selectors +

+
+
+
+

+ Specification + + cssdb badge + +

+
@custom-selector :--heading h1, h2, h3, h4, h5, h6
+
+article :--heading + p {}
+ +
+ Use with a + +
+
+
+
+ +
+

+ overflow Property +

+

+ A property for defining overflow-x and overflow-y +

+
+
+
+

+ Specification + + cssdb badge + +

+
html {
+  overflow: hidden auto;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Place Properties +

+

+ Properties for defining alignment within a layout +

+
+
+
+

+ Specification + + cssdb badge + +

+
.example {
+  place-content: flex-end;
+  place-items: center / space-between;
+  place-self: flex-start / center;
+}
+ + + +
+ Use with a + +
+
+
+
+ +
+

+ Environment Variables +

+

+ A syntax for using custom values accepted by CSS globally +

+
+
+
+

+ Specification + + cssdb badge + +

+
@media (max-width: env(--brand-small)) {
+  body {
+    padding: env(--brand-spacing);
+  }
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ Nesting Rules +

+

+ A syntax for nesting relative rules within rules +

+
+
+
+

+ Specification + + cssdb badge + +

+
article {
+  & p {
+    color: #333;
+  }
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ When/Else Rules +

+

+ At-rules for specifying media queries and support queries in a single grammar +

+
+
+
+

+ Specification + + cssdb badge + +

+
@when media(width >= 640px) and (supports(display: flex) or supports(display: grid)) {
+  /* A */
+} @else media(pointer: coarse) {
+  /* B */
+} @else {
+  /* C */
+}
+ + +
+
+
+ +
+

+ aspect-ratio Property +

+

+ A property for defining the aspect ratio of an element +

+
+
+
+

+ Specification + + cssdb badge + +

+
div {
+  aspect-ratio: 16/9;
+  width: 200px;
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ Element Queries +

+

+ A syntax for container-style element queries +

+
+
+
+

+ Specification + + cssdb badge + +

+
@element html and (min-width: 500px) {
+  body {
+    background: lime;
+  }
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ media() Function +

+

+ A function for specifying media queries within values +

+
+
+
+

+ Specification + + cssdb badge + +

+
p {
+  font-size: media(
+    16px,
+    (min-width:  600px) 20px,
+    (min-width: 1000px) 40px,
+    (min-width: 1400px) 60px
+  );
+}
+ +
+ Use with a + +
+
+
+
+ +
+

+ Custom Property Sets +

+

+ A syntax for storing properties in named variables, referenceable in other style rules +

+
+
+
+

+ Specification + + cssdb badge + +

+
img {
+  --some-length-styles: {
+    height: 32px;
+    width: 32px;
+  }
+
+  @apply --some-length-styles;
+}
+ + + +
+ Use with a + +
+
+
+
+ + + +

+ Want to contribute? Checkout the + cssdb on GitHub +

+ + diff --git a/sites/postcss-preset-env/views/features.html b/sites/postcss-preset-env/views/features.html new file mode 100644 index 000000000..33c22682c --- /dev/null +++ b/sites/postcss-preset-env/views/features.html @@ -0,0 +1,54 @@ + + + + + +
+ title1 + stage + spec + plugin + subtitle + p { color: gray(50); } +
+
+
+
diff --git a/sites/postcss-preset-env/views/features.sgr b/sites/postcss-preset-env/views/features.sgr new file mode 100644 index 000000000..76c882e5f --- /dev/null +++ b/sites/postcss-preset-env/views/features.sgr @@ -0,0 +1,47 @@ +extends(src='_layout.sgr') + block(name='content') + nav + a(href='/') postcss-preset-env + a(href='/features' active) features + a(href='/playground') playground + a(href='/support') support + a(href='/npm') npm + a(href='/github') github + nav + select + option(value='1') 1 + option(value='2') 2 + option(value='3') 3 + option(value='4') 4 + option(value='5') 5 + div + a(href='#1' active) 1 + a(href='#2') 2 + a(href='#3') 3 + a(href='#4') 4 + a(href='#5') 5 + div + a(href='#1') :1 + a(href='#2') :2 + a(href='#3') :3 + a(href='#4') :4 + div + a(href='#1') 1() + a(href='#2') 2() + a(href='#3') 3() + a(href='#4') 4() + div + a(href='#install') install + a(href='#options') options + a(href='#stages') stages + content + div + a(href='#title1') title1 + a(href='') stage + a(href='') spec + a(href='') plugin + span subtitle + code. + p { + color: gray(50); + } diff --git a/sites/postcss-preset-env/views/index.html b/sites/postcss-preset-env/views/index.html new file mode 100644 index 000000000..a8bde200b --- /dev/null +++ b/sites/postcss-preset-env/views/index.html @@ -0,0 +1,50 @@ + + +
+ +

postcss-present-env

+

Use tomorrows’s CSS today.

+ +
+
+

PostCSS Present Env lets you convert modern CSS into something most browsers can understand, determining the polyfills you need based on your targeted browsers or runtime environments, using +cssdb.

+ + $ npm install + postcss-preset-env + +
+
+
diff --git a/sites/postcss-preset-env/views/index.sgr b/sites/postcss-preset-env/views/index.sgr new file mode 100644 index 000000000..24ea73cd8 --- /dev/null +++ b/sites/postcss-preset-env/views/index.sgr @@ -0,0 +1,42 @@ +extends(src='_layout.sgr') + block(name='content') + header + nav + // not sure how to do these badges tbh ¯\_(ツ)_/¯ + img(src="https://img.shields.io/npm/v/vui-button.svg" alt="npm version") + iframe(src="https://ghbtns.com/github-btn.html?user=csstools&repo=postcss-preset-env-www&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px") + h1 postcss-present-env + p Use tomorrows's CSS today. + nav + a(href='/features') + // should we be img tags linking to the svgs here? (can we still implement fill styles on hover this way?) + svg(viewBox="0 0 60 38" xmlns="http://www.w3.org/2000/svg") + path(d="M 56.9318 16.0769L 42.6989 1.71946C 41.5909 0.601811 40.142 6.55921e-07 38.5227 6.55921e-07C 36.9034 6.55921e-07 35.4545 0.601811 34.3466 1.71946C 33.8352 2.23529 33.8352 3.00905 34.3466 3.52489C 34.858 4.04072 35.625 4.04072 36.1364 3.52489C 36.8182 2.8371 37.5852 2.49321 38.5227 2.49321C 39.4602 2.49321 40.3125 2.8371 40.9091 3.52489L 50.9659 13.6697C 50.8807 13.6697 50.7955 13.6697 50.7102 13.6697L 46.4489 13.6697L 41.0795 13.6697L 19.0909 13.6697L 13.2102 13.6697L 9.375 13.6697C 9.28977 13.6697 9.20454 13.6697 9.11932 13.6697L 19.0909 3.52489C 19.7727 2.8371 20.5398 2.49321 21.4773 2.49321C 22.4148 2.49321 23.267 2.8371 23.8636 3.52489C 24.375 4.04072 25.142 4.04072 25.6534 3.52489C 26.1648 3.00905 26.1648 2.23529 25.6534 1.71946C 24.5455 0.601811 23.0966 6.55921e-07 21.4773 6.55921e-07C 19.858 6.55921e-07 18.4091 0.601811 17.3011 1.71946L 2.8125 16.3348C 2.72727 16.4208 2.72727 16.4208 2.64205 16.5068L 2.47159 16.6787C 2.38636 16.7647 2.38636 16.7647 2.30114 16.8507C 0.852273 18.4842 3.25116e-07 20.6335 3.25116e-07 23.0407L 3.25116e-07 28.629C 3.25116e-07 33.7873 4.17614 38 9.28977 38L 13.4659 38C 21.6477 38 28.2955 31.2941 28.2955 23.0407C 28.2955 22.267 28.2102 21.5792 28.0398 20.8054C 28.5511 20.3756 29.233 20.1176 30 20.1176C 30.6818 20.1176 31.3636 20.3756 31.9602 20.8054C 31.7898 21.4932 31.7045 22.267 31.7045 23.0407C 31.7045 31.2941 38.3523 38 46.5341 38L 50.7102 38C 55.8239 38 60 33.7873 60 28.629L 60 23.0407C 60 20.2896 58.8068 17.7964 56.9318 16.0769ZM 13.5511 35.4208L 9.71591 35.4208C 9.20454 35.4208 8.86364 34.733 9.28977 34.3032L 20.5398 22.9548C 21.0511 22.4389 21.0511 21.5792 20.4545 21.0633C 19.9432 20.6335 19.1761 20.7195 18.75 21.2353L 6.5625 33.5294C 6.05114 34.0452 5.19886 34.0452 4.6875 33.6154C 4.17614 33.0995 4.17614 32.2398 4.6875 31.724C 6.5625 29.8326 10.9943 25.362 12.4432 23.9005C 12.8693 23.4706 12.9545 22.6968 12.6136 22.181C 12.1023 21.5792 11.25 21.5792 10.7386 22.095L 3.66477 29.0588C 3.23864 29.4887 2.55682 29.1448 2.55682 28.629L 2.55682 23.0407C 2.55682 21.2353 3.32386 19.5158 4.43182 18.3122L 4.60227 18.1403C 5.79545 16.9367 7.5 16.2489 9.28977 16.2489L 13.125 16.2489L 19.0909 16.2489C 22.8409 16.2489 25.8239 19.2579 25.9091 23.0407C 25.9091 29.8326 20.3693 35.4208 13.5511 35.4208ZM 30 17.6244C 28.9773 17.6244 27.9545 17.8824 27.1023 18.4842C 26.6761 17.6244 26.0795 16.9366 25.3977 16.2489L 34.6023 16.2489C 33.9205 16.8507 33.3239 17.6244 32.8977 18.4842C 32.0455 17.8824 31.0227 17.6244 30 17.6244ZM 57.4432 28.629C 57.4432 32.4118 54.375 35.5068 50.625 35.5068L 46.4489 35.5068C 45.5966 35.5068 44.8295 35.4208 44.0625 35.2489C 43.4659 35.1629 43.2955 34.4751 43.7216 34.0452L 54.7159 22.9548C 55.2273 22.4389 55.2273 21.5792 54.6307 21.0633C 54.1193 20.6335 53.3523 20.7195 52.9261 21.2353L 41.1648 33.0136C 40.7386 33.4434 39.9716 33.5294 39.4602 33.1855C 38.7784 32.6697 38.6932 31.724 39.2898 31.1222L 46.6193 23.7285C 47.0455 23.2986 47.2159 22.5249 46.7898 22.009C 46.2784 21.4072 45.4261 21.4072 44.9148 21.9231L 37.7557 29.1448C 37.1591 29.7466 36.0511 29.5747 35.625 28.8009C 34.6875 27.0814 34.1761 25.1041 34.2614 22.9548C 34.2614 19.1719 37.3295 16.1629 41.0795 16.1629L 46.3636 16.1629L 50.625 16.1629C 52.3295 16.1629 53.8636 16.7647 55.0568 17.8824L 55.6534 18.4842C 56.7614 19.6878 57.358 21.3213 57.358 23.0407L 57.358 28.629L 57.4432 28.629Z") + linearGradient(id="linear" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(62 78 -78 62 39 -26)") + stop(stop-color="#F527E0") + stop(offset="1" stop-color="#FF8E26") + span features + a(href='/playground') + svg(viewBox="-5 -10 82 82" xmlns="http://www.w3.org/2000/svg") + path(d="M 62 4.87823C 62 2.27651 59.8912 0.170351 57.2243 0.0464593C 56.0458 -0.0154864 54.8674 -0.0154864 53.5649 0.0464593C 51.022 0.170351 48.9752 2.02872 48.8512 4.44461C 48.7892 5.55963 48.7892 6.7366 48.7892 7.85162C 48.7892 8.34719 48.7892 8.9047 48.7892 9.40026L 48.7892 9.95778L 41.5325 9.95778L 41.5325 7.97551C 41.5325 6.92243 41.5325 5.86936 41.5325 4.81628C 41.4705 2.27651 39.3617 0.232296 36.8188 0.108405C 36.1986 0.108405 35.6404 0.0464593 34.9581 0.0464593C 34.3999 0.0464593 33.7797 0.0464593 33.1595 0.108405C 30.5545 0.232296 28.4457 2.21456 28.3217 4.75433C 28.2597 5.9313 28.1977 7.47995 28.3217 9.02859C 28.3837 10.3914 28.0736 11.6303 27.2673 12.9931C 23.8561 18.878 20.4448 24.7628 16.9715 30.6476C 11.5136 40.0015 6.05556 49.3553 0.597568 58.7091C -0.0226583 59.7621 -0.146704 60.6294 0.16341 61.1869C 0.473523 61.7444 1.34184 62.0541 2.52027 61.9922C 8.84658 61.8063 15.1729 61.8683 20.4448 61.9922C 22.0574 61.9922 22.9877 61.4966 23.794 60.0719C 27.0192 54.3729 30.3684 48.6739 33.5936 43.0987L 36.7568 37.7095C 36.8808 37.4617 37.0669 37.2758 37.253 36.9661L 38.5554 35.0458L 38.5554 59.948C 38.5554 61.5586 39.3617 61.8063 39.982 61.8063C 40.4161 61.8063 40.7882 61.7444 41.0363 61.4966C 41.3465 61.1869 41.5325 60.6913 41.5325 59.886C 41.5325 59.0807 41.5325 58.2754 41.5325 57.4701L 41.5325 55.7976L 58.9609 55.7976L 58.9609 56.4171C 58.9609 56.8507 58.9609 57.2843 58.9609 57.656C 58.9609 58.5232 58.9609 59.3905 58.9609 60.1958C 59.0849 61.8063 59.9533 61.9302 60.5735 61.8683C 61.7519 61.8063 61.938 60.6913 61.938 60.0719L 61.938 56.4171C 62 39.2581 62 22.0991 62 4.87823ZM 50.8979 13.4887C 51.146 13.117 51.7042 12.9931 51.9523 12.9931C 53.5029 12.9931 55.1155 12.9931 56.7281 12.9931L 58.7748 12.9931L 58.7748 20.6124L 46.6804 20.6124L 47.8588 18.5682C 48.9132 16.8338 49.9056 15.1612 50.8979 13.4887ZM 31.2988 5.18795C 31.2988 5.06406 31.2988 4.94017 31.3608 4.81628C 31.795 2.95791 33.4696 2.77207 36.3226 3.01985C 37.8112 3.14375 38.6175 3.94904 38.6175 5.43574C 38.6175 6.05519 38.6175 6.7366 38.6175 7.35605L 38.6175 8.84275C 38.6175 8.96664 38.6175 9.15248 38.5554 9.27637L 38.3694 9.95778L 31.2988 9.95778L 31.2988 5.18795ZM 39.9199 26.2495C 33.8417 36.6564 27.8255 47.1252 21.7473 57.5321C 21.1271 58.5852 20.4448 59.0188 19.2664 59.0188L 19.2044 59.0188C 15.7931 58.9568 12.3819 58.9568 8.9086 59.0188L 4.00881 59.0188L 15.8551 38.7006C 20.5068 30.5238 25.2206 22.4708 29.9343 14.294C 30.4925 13.3028 31.1747 12.9312 32.2911 12.9312C 35.8264 12.9931 39.2997 12.9931 42.897 12.9312L 47.4867 12.9312L 46.8665 14.1701C 46.7424 14.4798 46.5564 14.7895 46.4323 15.0373L 39.9199 26.2495ZM 58.8368 52.7623L 41.6566 52.7623L 41.6566 45.3288L 58.8368 45.3288L 58.8368 52.7623ZM 41.6566 42.0457L 41.6566 34.4883L 58.7748 34.4883L 58.7748 41.9837L 41.6566 41.9837L 41.6566 42.0457ZM 58.8368 31.391L 41.3465 31.391L 41.9667 28.7893L 42.0907 28.6034C 42.3388 28.1698 42.5869 27.6743 42.835 27.1787C 43.3932 25.9398 44.0134 24.7009 45.1298 24.0814C 46.1842 23.4619 47.6107 23.5858 48.9752 23.6478C 49.5334 23.7097 50.0916 23.7097 50.5258 23.7097C 52.3245 23.7097 54.0611 23.7097 55.9218 23.7097L 58.8989 23.7097L 58.8989 31.391L 58.8368 31.391ZM 58.8989 9.46221L 58.8989 9.95778L 51.7663 9.95778L 51.7663 9.46221C 51.7663 9.02859 51.7663 8.53302 51.7663 8.0994C 51.7663 7.04633 51.7042 5.99325 51.8283 5.00212C 51.9523 3.0818 53.5029 3.01985 56.2319 3.01985C 56.9762 3.01985 58.8989 3.01985 58.9609 5.06406C 59.0229 6.05519 58.9609 7.04633 58.9609 8.0994C 58.8989 8.53302 58.8989 8.96664 58.8989 9.46221Z") + span playground + // need to set up gitter and link to it here: + a(href='/support') + svg(viewBox="-20 -20 73 77" xmlns="http://www.w3.org/2000/svg") + // what kind of witchcraft is this? + path(d="M0 0h5v26.25H0zM28 0h5v26.25h-5zM9 6.125h5V42H9zM18 6.125h5V42h-5z") + span support + a(href='https://github.com/csstools/postcss-preset-env-www') + svg(viewBox="-10 -10 65 65" xmlns="http://www.w3.org/2000/svg") + path(d="M 41.3208 22.5C 41.3208 19.9528 40.7547 17.5472 39.7642 15.1415C 38.7736 12.8773 37.3585 10.7547 35.8019 9.19812C 34.2453 7.64152 32.1226 6.2264 29.8585 5.23583C 27.5943 4.24527 25.0472 3.67926 22.5 3.67926C 19.9528 3.67926 17.5472 4.24527 15.1415 5.23583C 12.8774 6.2264 10.7547 7.64152 9.1981 9.19812C 7.6415 10.7547 6.22642 12.8773 5.23586 15.1415C 4.24529 17.4056 3.67925 19.9528 3.67925 22.5C 3.67925 26.6038 4.95284 30.283 7.3585 33.6792C 9.76416 37.0755 13.0189 39.3396 16.8396 40.4717L 16.8396 35.5189C 15.7076 35.6604 15.1415 35.6604 14.8585 35.6604C 12.7358 35.6604 11.1792 34.6698 10.3302 32.6887C 10.0472 31.9811 9.62263 31.2736 9.1981 30.849C 9.0566 30.7075 8.91509 30.566 8.63208 30.283C 8.34906 30 8.06603 29.8585 7.78301 29.5755C 7.49999 29.2925 7.3585 29.151 7.3585 29.151C 7.3585 28.8679 7.64151 28.8679 8.20754 28.8679C 8.77358 28.8679 9.33963 29.0094 9.76416 29.2924C 10.1887 29.5755 10.6132 29.8585 10.8962 30.283C 11.1793 30.7075 11.4623 31.1321 11.8868 31.5566C 12.1698 31.9811 12.5943 32.2642 13.0189 32.5472C 13.4434 32.8302 14.0094 32.9717 14.717 32.9717C 15.566 32.9717 16.2736 32.8302 17.1226 32.5472C 17.4057 31.4151 18.1132 30.5661 18.9623 29.8585C 15.7076 29.5755 13.3019 28.7264 11.7453 27.4528C 10.1887 26.1792 9.33962 23.9151 9.33962 20.8019C 9.33962 18.5377 10.0472 16.5566 11.4623 15C 11.1792 14.151 11.0377 13.3019 11.0377 12.4528C 11.0377 11.3207 11.3208 10.1887 11.8868 9.19812C 13.0189 9.19812 14.0094 9.33962 14.8585 9.76415C 15.7075 10.1887 16.6981 10.7547 17.8302 11.6038C 19.3868 11.3207 20.9434 11.0377 22.783 11.0377C 24.3396 11.0377 25.8962 11.1793 27.3113 11.4623C 28.4434 10.6132 29.434 10.0472 30.283 9.76415C 31.1321 9.33962 32.1226 9.19812 33.2547 9.19812C 33.8207 10.1887 34.1038 11.3207 34.1038 12.4528C 34.1038 13.3019 33.9623 14.151 33.6792 14.8585C 35.0943 16.4151 35.8019 18.3962 35.8019 20.6604C 35.8019 23.7736 34.9528 25.8962 33.3962 27.3113C 31.8396 28.7264 29.434 29.434 26.1792 29.717C 27.5943 30.7076 28.1604 31.9811 28.1604 33.5377L 28.1604 40.1887C 32.1226 38.9151 35.2359 36.651 37.6415 33.3962C 40.0472 30.283 41.3208 26.6038 41.3208 22.5ZM 45 22.5C 45 26.6038 44.0094 30.4245 42.0283 33.8208C 40.0472 37.3585 37.217 40.0472 33.8208 42.0283C 30.283 44.0094 26.6038 45 22.5 45C 18.3962 45 14.5755 44.0094 11.1792 42.0283C 7.64151 40.0472 4.95283 37.217 2.9717 33.8208C 0.990566 30.283 -8.63705e-06 26.6038 -8.63705e-06 22.5C -8.63705e-06 18.3962 0.990566 14.5755 2.9717 11.1792C 4.95283 7.64151 7.78302 4.95285 11.1792 2.97172C 14.717 0.990584 18.3962 8.63705e-06 22.5 8.63705e-06C 26.6038 8.63705e-06 30.4245 0.990584 33.8208 2.97172C 37.3585 4.95285 40.0472 7.78302 42.0283 11.1792C 44.0094 14.5755 45 18.3962 45 22.5Z") + span github + div + p + | PostCSS Present Env lets you convert modern CSS into something most browsers can understand, determining the polyfills you need based on your targeted browsers or runtime environments, using + | + a(href='//cssdb.org') cssdb + | . + code + | $ npm install + | + span postcss-preset-env diff --git a/sites/postcss-preset-env/views/layout.html b/sites/postcss-preset-env/views/layout.html new file mode 100644 index 000000000..ac1cbccd7 --- /dev/null +++ b/sites/postcss-preset-env/views/layout.html @@ -0,0 +1,23 @@ + + + + + + + + + + postcss-preset-env + + + + +
+ +
+ + + + + +