├── .cache ├── eleventy-cache-assets-b92c9e46 └── eleventy-cache-assets-b92c9e46.buffer ├── .eleventy.js ├── .eleventyignore ├── .forestry └── settings.yml ├── .github └── ISSUE_TEMPLATE │ ├── feature_request.md │ ├── i-have-a-question.md │ └── i-m-having-trouble-with-this-template.md ├── .gitignore ├── .nvmrc ├── 404.md ├── LICENSE ├── README.md ├── _data └── site.json ├── _includes ├── assets │ ├── css │ │ ├── 404.css │ │ └── inline.css │ ├── images │ │ └── github.svg │ ├── js │ │ ├── 404.js │ │ ├── darkmode.js │ │ ├── inline.js │ │ └── search.js │ └── utils │ │ ├── image.txt │ │ └── imagesize.txt ├── components │ ├── contact.njk │ ├── footer.njk │ ├── head.njk │ ├── header.njk │ └── nav.njk ├── experimental │ └── blog │ │ ├── author.njk │ │ ├── authors.njk │ │ ├── components │ │ ├── pageslist.njk │ │ └── postslist.njk │ │ ├── content │ │ └── posts │ │ │ ├── firstpost.md │ │ │ ├── fourthpost.md │ │ │ ├── posts.json │ │ │ ├── secondpost.md │ │ │ ├── the-fifth-and-hopefully-final-example-post.md │ │ │ └── thirdpost.md │ │ ├── layouts │ │ ├── blog.njk │ │ └── post.njk │ │ ├── pages │ │ └── blog.md │ │ └── tags.njk └── layouts │ ├── 404.njk │ ├── base.njk │ ├── contact.njk │ ├── page.njk │ └── robots.njk ├── _tmp └── style.css ├── admin ├── config.yml ├── index.html └── preview-templates │ ├── index.js │ ├── page.js │ └── post.js ├── content ├── images │ └── hello.jpg └── pages │ ├── contact.md │ ├── home.md │ └── pages.json ├── filters └── searchFilter.js ├── loader.js ├── netlify.toml ├── package.json ├── password_template.html ├── postcss.config.js ├── robots.md ├── search-index.json.njk ├── styles ├── tailwind.config.js └── tailwind.css └── uploads └── uws2.png /.cache/eleventy-cache-assets-b92c9e46: -------------------------------------------------------------------------------- 1 | [{"b92c9e46":"1"},{"cachedAt":1608680502243,"type":"2"},"buffer"] -------------------------------------------------------------------------------- /.cache/eleventy-cache-assets-b92c9e46.buffer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broeker/spacebook/e06e20b05b191e068657da8458c6220c678da573/.cache/eleventy-cache-assets-b92c9e46.buffer -------------------------------------------------------------------------------- /.eleventy.js: -------------------------------------------------------------------------------- 1 | const { DateTime } = require("luxon"); 2 | const CleanCSS = require("clean-css"); 3 | const UglifyJS = require("uglify-es"); 4 | const htmlmin = require("html-minifier"); 5 | const svgContents = require("eleventy-plugin-svg-contents"); 6 | const mdIterator = require('markdown-it-for-inline') 7 | const embedEverything = require("eleventy-plugin-embed-everything"); 8 | const pluginTOC = require('eleventy-plugin-nesting-toc'); 9 | const eleventyNavigationPlugin = require("@11ty/eleventy-navigation"); 10 | const Image = require("@11ty/eleventy-img"); 11 | module.exports = function(eleventyConfig) { 12 | // eleventyConfig.addPlugin(pluginTOC); 13 | eleventyConfig.addPlugin(svgContents); 14 | eleventyConfig.addPlugin(embedEverything); 15 | eleventyConfig.addShortcode("version", function () { 16 | return String(Date.now()); 17 | }); 18 | 19 | // Responsive image shortcode 20 | eleventyConfig.addLiquidShortcode("image", async function(src, alt, sizes = "100vw") { 21 | if(alt === undefined) { 22 | // You bet we throw an error on missing alt (alt="" works okay) 23 | throw new Error(`Missing \`alt\` on responsiveimage from: ${src}`); 24 | } 25 | src = './content/images/'+src 26 | let metadata = await Image(src, { 27 | widths: [400, 600, 800, 1000, 1200, 1400, 1600, 1900], 28 | formats: ['webp', 'jpeg', 'png'], 29 | urlPath: "/content/images/", 30 | outputDir: "./_site/content/images/" 31 | }); 32 | 33 | let lowsrc = metadata.jpeg[0]; 34 | 35 | let picture = ` 36 | ${Object.values(metadata).map(imageFormat => { 37 | return ` `; 38 | }).join("\n")} 39 | ${alt} 44 | `; 45 | 46 | return `${picture}`; 47 | 48 | }); 49 | 50 | eleventyConfig.addLiquidShortcode("icon", function(title,url) { 51 | return ''+title+''; 52 | }); 53 | 54 | // Button shortcode -- experimental 55 | // eleventyConfig.addLiquidShortcode("button", function(title,url) { 56 | // return ''+title+''; 57 | // }); 58 | 59 | 60 | // Tailwind pass through and watch target 61 | eleventyConfig.addWatchTarget("./_tmp/style.css"); 62 | eleventyConfig.addPassthroughCopy({ "./_tmp/style.css": "./style.css" }); 63 | 64 | // Alpine.js pass through 65 | eleventyConfig.addPassthroughCopy({ 66 | "./node_modules/alpinejs/dist/alpine.js": "./js/alpine.js", 67 | }); 68 | 69 | // Eleventy Navigation https://www.11ty.dev/docs/plugins/navigation/ 70 | eleventyConfig.addPlugin(eleventyNavigationPlugin); 71 | 72 | // Configuration API: use eleventyConfig.addLayoutAlias(from, to) to add 73 | // layout aliases! Say you have a bunch of existing content using 74 | // layout: post. If you don’t want to rewrite all of those values, just map 75 | // post to a new file like this: 76 | // eleventyConfig.addLayoutAlias("post", "layouts/my_new_post_layout.njk"); 77 | 78 | // Merge data instead of overriding 79 | // https://www.11ty.dev/docs/data-deep-merge/ 80 | eleventyConfig.setDataDeepMerge(true); 81 | 82 | // Add support for maintenance-free post authors 83 | // Adds an authors collection using the author key in our post frontmatter 84 | // Thanks to @pdehaan: https://github.com/pdehaan 85 | // eleventyConfig.addCollection("authors", collection => { 86 | // const blogs = collection.getFilteredByGlob("posts/*.md"); 87 | // return blogs.reduce((coll, post) => { 88 | // const author = post.data.author; 89 | // if (!author) { 90 | // return coll; 91 | // } 92 | // if (!coll.hasOwnProperty(author)) { 93 | // coll[author] = []; 94 | // } 95 | // coll[author].push(post.data); 96 | // return coll; 97 | // }, {}); 98 | // }); 99 | 100 | // Creates custom collection "pages" 101 | eleventyConfig.addCollection("pages", function(collection) { 102 | return collection.getFilteredByGlob("pages/*.md"); 103 | }); 104 | 105 | // Creates custom collection "posts" 106 | // eleventyConfig.addCollection("posts", function(collection) { 107 | // const coll = collection.getFilteredByGlob("posts/*.md"); 108 | 109 | // for(let i = 0; i < coll.length ; i++) { 110 | // const prevPost = coll[i-1]; 111 | // const nextPost = coll[i + 1]; 112 | 113 | // coll[i].data["prevPost"] = prevPost; 114 | // coll[i].data["nextPost"] = nextPost; 115 | // } 116 | 117 | // return coll; 118 | // }); 119 | 120 | 121 | // Creates custom collection "results" for search 122 | const searchFilter = require("./filters/searchFilter"); 123 | eleventyConfig.addFilter("search", searchFilter); 124 | eleventyConfig.addCollection("results", collection => { 125 | return [...collection.getFilteredByGlob("**/*.md")]; 126 | }); 127 | 128 | // Creates custom collection "menuItems" 129 | eleventyConfig.addCollection("menuItems", collection => 130 | collection 131 | .getAll() 132 | .filter(function(item) { 133 | return "eleventyNavigation" in item.data; 134 | }) 135 | .sort((a, b) => { 136 | return (a.data.eleventyNavigation.order || 0) - (b.data.eleventyNavigation.order || 0); 137 | }) 138 | ); 139 | 140 | // Date formatting (human readable) 141 | eleventyConfig.addFilter("readableDate", dateObj => { 142 | return DateTime.fromJSDate(dateObj).toFormat("LLL dd, yyyy"); 143 | }); 144 | 145 | // Date formatting (machine readable) 146 | eleventyConfig.addFilter("machineDate", dateObj => { 147 | 148 | return DateTime.fromJSDate(dateObj).toFormat("yyyy-MM-dd"); 149 | }); 150 | 151 | // Minify CSS 152 | eleventyConfig.addFilter("cssmin", function(code) { 153 | return new CleanCSS({}).minify(code).styles; 154 | }); 155 | 156 | // Minify JS 157 | eleventyConfig.addFilter("jsmin", function(code) { 158 | let minified = UglifyJS.minify(code); 159 | if (minified.error) { 160 | console.log("UglifyJS error: ", minified.error); 161 | return code; 162 | } 163 | return minified.code; 164 | }); 165 | 166 | // Minify HTML output 167 | eleventyConfig.addTransform("htmlmin", function(content, outputPath) { 168 | if (outputPath.indexOf(".html") > -1) { 169 | let minified = htmlmin.minify(content, { 170 | useShortDoctype: true, 171 | removeComments: true, 172 | collapseWhitespace: true 173 | }); 174 | return minified; 175 | } 176 | return content; 177 | }); 178 | 179 | // Don't process folders with static assets e.g. images 180 | eleventyConfig.addPassthroughCopy("favicon.ico"); 181 | eleventyConfig.addPassthroughCopy("images/") 182 | eleventyConfig.addPassthroughCopy("content/images/") 183 | eleventyConfig.addPassthroughCopy("admin"); 184 | eleventyConfig.addPassthroughCopy("_includes/assets/"); 185 | eleventyConfig.addPassthroughCopy("_includes/experimental/"); 186 | 187 | /* Markdown Plugins */ 188 | let markdownIt = require("markdown-it"); 189 | let markdownItAnchor = require("markdown-it-anchor"); 190 | let markdownItEmoji = require("markdown-it-emoji"); 191 | let markdownItFootnote = require("markdown-it-footnote"); 192 | let markdownItContainer = require("markdown-it-container"); 193 | let markdownLinkifyImages = require('markdown-it-linkify-images') 194 | let markdownToc = require('markdown-it-table-of-contents') 195 | let markdownItTasks = require('markdown-it-task-lists') 196 | let markdownItAttrs = require("markdown-it-attrs") 197 | let markdownItCenterText = require("markdown-it-center-text") 198 | let options = { 199 | html: true, 200 | breaks: true, 201 | linkify: true, 202 | typographer: true 203 | }; 204 | let opts = { 205 | // permalink: true, 206 | // permalinkClass: "direct-link", 207 | // permalinkSymbol: "#" 208 | }; 209 | 210 | eleventyConfig.setLibrary("md", markdownIt(options) 211 | .use(mdIterator, 'url_new_win', 'link_open', function (tokens, idx) { 212 | const [attrName, href] = tokens[idx].attrs.find(attr => attr[0] === 'href') 213 | if (href && (!href.includes('franknoirot.co') && !href.startsWith('/') && !href.startsWith('#'))) { 214 | tokens[idx].attrPush([ 'target', '_blank' ]) 215 | tokens[idx].attrPush([ 'rel', 'noopener noreferrer' ]) 216 | } 217 | }) 218 | .use(markdownItAnchor, opts) 219 | .use(markdownItEmoji) 220 | .use(markdownItFootnote) 221 | .use(markdownItContainer, 'callout') 222 | .use(markdownItContainer, 'callout-blue') 223 | .use(markdownItContainer, 'callout-pink') 224 | .use(markdownItContainer, 'callout-green') 225 | .use(markdownItContainer, 'warning') 226 | .use(markdownItTasks) 227 | .use(markdownItCenterText) 228 | .use(markdownLinkifyImages, { 229 | imgClass: "p-4", 230 | }) 231 | .use(markdownItAttrs, { 232 | includeLevel: [2,3], 233 | listType: "ol" 234 | }) 235 | ); 236 | 237 | return { 238 | templateFormats: ["md", "njk", "html", "liquid"], 239 | 240 | // If your site lives in a different subdirectory, change this. 241 | // Leading or trailing slashes are all normalized away, so don’t worry about it. 242 | // If you don’t have a subdirectory, use "" or "/" (they do the same thing) 243 | // This is only used for URLs (it does not affect your file structure) 244 | pathPrefix: "/", 245 | markdownTemplateEngine: "liquid", 246 | htmlTemplateEngine: "njk", 247 | dataTemplateEngine: "njk", 248 | dir: { 249 | input: ".", 250 | includes: "_includes", 251 | data: "_data", 252 | output: "_site" 253 | } 254 | }; 255 | }; -------------------------------------------------------------------------------- /.eleventyignore: -------------------------------------------------------------------------------- 1 | README.md 2 | .github/ 3 | functions/* 4 | functions/ 5 | -------------------------------------------------------------------------------- /.forestry/settings.yml: -------------------------------------------------------------------------------- 1 | --- 2 | new_page_extension: md 3 | auto_deploy: false 4 | admin_path: '' 5 | webhook_url: 6 | sections: 7 | - type: directory 8 | path: '' 9 | label: Test 10 | create: all 11 | match: "**/*" 12 | upload_dir: uploads 13 | public_path: "/uploads" 14 | front_matter_path: '' 15 | use_front_matter_path: true 16 | file_template: ":filename:" 17 | build: 18 | preview_env: 19 | - ELEVENTY_ENV=dev 20 | preview_output_directory: _site 21 | install_dependencies_command: npm install 22 | preview_docker_image: forestryio/node:12 23 | mount_path: "/srv" 24 | working_dir: "/srv" 25 | instant_preview_command: npx @11ty/eleventy --serve 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Enhancements. e.g. “I wish spacebook did this.” Suggest an idea! 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/i-have-a-question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: I have a question 3 | about: General education e.g. “How do I do this?” or “Can this template do this?” 4 | title: '' 5 | labels: question, education 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/i-m-having-trouble-with-this-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: I'm having trouble 3 | about: Have a problem? It might be a bug! Create a report to help us improve. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site/ 2 | node_modules/ 3 | package-lock.json 4 | .idea 5 | .vscode 6 | *~ 7 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v14 2 | -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 404 3 | permalink: /404.html 4 | layout: layouts/404.njk 5 | --- 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Tim Broeker 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spacebook 2 | 3 | [![Netlify Status](https://api.netlify.com/api/v1/badges/68791233-b2d6-4a86-8c42-e654e112a157/deploy-status)](https://app.netlify.com/sites/spacebook-app/deploys) 4 | 5 | Create your own spacebook and customize it to your needs. Spacebooks are speedy to set up, free, and 100% open source. Spacebooks are modern notebooks you can use to create documentation, sketch out new ideas, build a simple website, or whatever suits your fancy. 6 | 7 | --- 8 | 9 |

10 | Demo and documentation:
11 |

12 | 13 |

14 | https://spacebook.app
15 | 16 | 17 |

18 | 🙋 💥 👩🏽‍🚀 🚀 👨‍🚀 🛰️ 19 |

20 | 21 | --- 22 | 23 | ## Contributing 24 | 25 | If you want to contribute or make fixes to spacebook, it is best to fork this repository directly and submit pull requests against it. If you spot a typo on the demo/documentation site, you can also open a fork directly from the edit button on the top of each page. 26 | 27 | ## Install spacebook 28 | 29 | If you want to quickly install for local testing follow the instructions below: 30 | 31 | ### Requirements 32 | 33 | You must be running **Node version 12 or higher** due to the Tailwind 2.0 release. I recommend using NVM to easily manage your Node versions if you need to switch back and forth between older versions. 34 | 35 | - [Node](https://nodejs.org/) 36 | - [NVM](https://github.com/nvm-sh/nvm) (optional) 37 | 38 | **To find your current node version:** 39 | 40 | ``` 41 | node --version 42 | ``` 43 | 44 | ### Step one 45 | 46 | ``` 47 | git clone https://github.com/broeker/spacebook 48 | ``` 49 | 50 | ### Step two 51 | 52 | Install the site and run an initial build command: 53 | 54 | ``` 55 | cd spacebook 56 | 57 | npm install 58 | 59 | npm run build (only necessary the first time!) 60 | ``` 61 | 62 | _If you get errors here, double check your node version!_ 63 | 64 | ### Step three 65 | 66 | Now spin up your local server to see your site! 67 | 68 | ``` 69 | npm run start 70 | ``` 71 | 72 | This command will start a local server and you'll be able to work on your site with hot reloads and some nice Browsersync features. 💥 73 | 74 | --- 75 | -------------------------------------------------------------------------------- /_data/site.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Spacebook", 3 | "subtitle": "Create a modern notebook to document or explain almost anything.", 4 | "description": "Create a modern notebook to document or explain almost anything with spacebook.app", 5 | "footer": "Made with ❤ in Minneapolis", 6 | "url": "https://spacebook.app", 7 | "githubUrl": "https://github.com//", 8 | "githubBranch": "main", 9 | "navigationStyle": "vertical", 10 | "emoji": "💥", 11 | "enableSearch": true, 12 | "enableDarkMode": true, 13 | "enableEditButton": true, 14 | "enableDatestamp": true, 15 | "enableGithubLink": false, 16 | "enableContact": false, 17 | "enableNetlifyCMS": false, 18 | "enableComments": false, 19 | "enableEncryption": false, 20 | "enablePageNavigation": true 21 | } 22 | -------------------------------------------------------------------------------- /_includes/assets/css/404.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | width: 100%; 5 | margin: 0px; 6 | background: linear-gradient(90deg, #2f3640 23%, #181b20 100%); 7 | } 8 | 9 | .moon { 10 | background: linear-gradient(90deg, #d0d0d0 48%, #919191 100%); 11 | position: absolute; 12 | top: -100px; 13 | left: -300px; 14 | width: 900px; 15 | height: 900px; 16 | content: ''; 17 | border-radius: 100%; 18 | box-shadow: 0px 0px 30px -4px rgba(0, 0, 0, 0.5); 19 | } 20 | 21 | .moon__crater { 22 | position: absolute; 23 | content: ''; 24 | border-radius: 100%; 25 | background: linear-gradient(90deg, #7a7a7a 38%, #c3c3c3 100%); 26 | opacity: 0.6; 27 | } 28 | 29 | .moon__crater1 { 30 | top: 250px; 31 | left: 500px; 32 | width: 60px; 33 | height: 180px; 34 | } 35 | 36 | .moon__crater2 { 37 | top: 650px; 38 | left: 340px; 39 | width: 40px; 40 | height: 80px; 41 | transform: rotate(55deg); 42 | } 43 | 44 | .moon__crater3 { 45 | top: -20px; 46 | left: 40px; 47 | width: 65px; 48 | height: 120px; 49 | transform: rotate(250deg); 50 | } 51 | 52 | .star { 53 | background: grey; 54 | position: absolute; 55 | width: 5px; 56 | height: 5px; 57 | content: ''; 58 | border-radius: 100%; 59 | transform: rotate(250deg); 60 | opacity: 0.4; 61 | animation-name: shimmer; 62 | animation-duration: 1.5s; 63 | animation-iteration-count: infinite; 64 | animation-direction: alternate; 65 | } 66 | 67 | @keyframes shimmer { 68 | from { 69 | opacity: 0; 70 | } 71 | to { 72 | opacity: 0.7; 73 | } 74 | } 75 | 76 | .star1 { 77 | top: 40%; 78 | left: 50%; 79 | animation-delay: 1s; 80 | } 81 | 82 | .star2 { 83 | top: 60%; 84 | left: 90%; 85 | animation-delay: 3s; 86 | } 87 | 88 | .star3 { 89 | top: 10%; 90 | left: 70%; 91 | animation-delay: 2s; 92 | } 93 | 94 | .star4 { 95 | top: 90%; 96 | left: 40%; 97 | } 98 | 99 | .star5 { 100 | top: 20%; 101 | left: 30%; 102 | animation-delay: 0.5s; 103 | } 104 | 105 | .error { 106 | position: absolute; 107 | left: 100px; 108 | top: 400px; 109 | transform: translateY(-60%); 110 | font-family: 'Righteous', cursive, 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"; 111 | color: #363e49; 112 | } 113 | 114 | .error__title { 115 | font-size: 10em; 116 | } 117 | 118 | .error__subtitle { 119 | font-size: 2em; 120 | } 121 | 122 | .error__description { 123 | opacity: 0.5; 124 | } 125 | 126 | .error__button { 127 | min-width: 7em; 128 | margin-top: 3em; 129 | margin-right: 0.5em; 130 | padding: 0.5em 2em; 131 | outline: none; 132 | border: 2px solid #2f3640; 133 | background-color: transparent; 134 | border-radius: 8em; 135 | color: #576375; 136 | cursor: pointer; 137 | transition-duration: 0.2s; 138 | font-size: 0.75em; 139 | font-family: 'Righteous', cursive,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";; 140 | } 141 | 142 | .error__button:hover { 143 | color: #21252c; 144 | } 145 | 146 | .error__button--active { 147 | background-color: #e67e22; 148 | border: 2px solid #e67e22; 149 | color: white; 150 | } 151 | 152 | .error__button--active:hover { 153 | box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.5); 154 | color: white; 155 | } 156 | 157 | .astronaut { 158 | position: absolute; 159 | width: 185px; 160 | height: 300px; 161 | left: 70%; 162 | top: 50%; 163 | transform: translate(-50%, -50%) rotate(20deg) scale(1.2); 164 | } 165 | 166 | .astronaut__head { 167 | background-color: white; 168 | position: absolute; 169 | top: 60px; 170 | left: 60px; 171 | width: 60px; 172 | height: 60px; 173 | content: ''; 174 | border-radius: 2em; 175 | } 176 | 177 | .astronaut__head-visor-flare1 { 178 | background-color: #7f8fa6; 179 | position: absolute; 180 | top: 28px; 181 | left: 40px; 182 | width: 10px; 183 | height: 10px; 184 | content: ''; 185 | border-radius: 2em; 186 | opacity: 0.5; 187 | } 188 | 189 | .astronaut__head-visor-flare2 { 190 | background-color: #718093; 191 | position: absolute; 192 | top: 40px; 193 | left: 38px; 194 | width: 5px; 195 | height: 5px; 196 | content: ''; 197 | border-radius: 2em; 198 | opacity: 0.3; 199 | } 200 | 201 | .astronaut__backpack { 202 | background-color: #bfbfbf; 203 | position: absolute; 204 | top: 90px; 205 | left: 47px; 206 | width: 86px; 207 | height: 90px; 208 | content: ''; 209 | border-radius: 8px; 210 | } 211 | 212 | .astronaut__body { 213 | background-color: #e6e6e6; 214 | position: absolute; 215 | top: 115px; 216 | left: 55px; 217 | width: 70px; 218 | height: 80px; 219 | content: ''; 220 | border-radius: 8px; 221 | } 222 | 223 | .astronaut__body__chest { 224 | background-color: #d9d9d9; 225 | position: absolute; 226 | top: 140px; 227 | left: 68px; 228 | width: 45px; 229 | height: 25px; 230 | content: ''; 231 | border-radius: 6px; 232 | } 233 | 234 | .astronaut__arm-left1 { 235 | background-color: #e6e6e6; 236 | position: absolute; 237 | top: 127px; 238 | left: 9px; 239 | width: 65px; 240 | height: 20px; 241 | content: ''; 242 | border-radius: 8px; 243 | transform: rotate(-30deg); 244 | } 245 | 246 | .astronaut__arm-left2 { 247 | background-color: #e6e6e6; 248 | position: absolute; 249 | top: 102px; 250 | left: 7px; 251 | width: 20px; 252 | height: 45px; 253 | content: ''; 254 | border-radius: 8px; 255 | transform: rotate(-12deg); 256 | border-top-left-radius: 8em; 257 | border-top-right-radius: 8em; 258 | } 259 | 260 | .astronaut__arm-right1 { 261 | background-color: #e6e6e6; 262 | position: absolute; 263 | top: 113px; 264 | left: 100px; 265 | width: 65px; 266 | height: 20px; 267 | content: ''; 268 | border-radius: 8px; 269 | transform: rotate(-10deg); 270 | } 271 | 272 | .astronaut__arm-right2 { 273 | background-color: #e6e6e6; 274 | position: absolute; 275 | top: 78px; 276 | left: 141px; 277 | width: 20px; 278 | height: 45px; 279 | content: ''; 280 | border-radius: 8px; 281 | transform: rotate(-10deg); 282 | border-top-left-radius: 8em; 283 | border-top-right-radius: 8em; 284 | } 285 | 286 | .astronaut__arm-thumb-left { 287 | background-color: #e6e6e6; 288 | position: absolute; 289 | top: 110px; 290 | left: 21px; 291 | width: 10px; 292 | height: 6px; 293 | content: ''; 294 | border-radius: 8em; 295 | transform: rotate(-35deg); 296 | } 297 | 298 | .astronaut__arm-thumb-right { 299 | background-color: #e6e6e6; 300 | position: absolute; 301 | top: 90px; 302 | left: 133px; 303 | width: 10px; 304 | height: 6px; 305 | content: ''; 306 | border-radius: 8em; 307 | transform: rotate(20deg); 308 | } 309 | 310 | .astronaut__wrist-left { 311 | background-color: #e67e22; 312 | position: absolute; 313 | top: 122px; 314 | left: 6.5px; 315 | width: 21px; 316 | height: 4px; 317 | content: ''; 318 | border-radius: 8em; 319 | transform: rotate(-15deg); 320 | } 321 | 322 | .astronaut__wrist-right { 323 | background-color: #e67e22; 324 | position: absolute; 325 | top: 98px; 326 | left: 141px; 327 | width: 21px; 328 | height: 4px; 329 | content: ''; 330 | border-radius: 8em; 331 | transform: rotate(-10deg); 332 | } 333 | 334 | .astronaut__leg-left { 335 | background-color: #e6e6e6; 336 | position: absolute; 337 | top: 188px; 338 | left: 50px; 339 | width: 23px; 340 | height: 75px; 341 | content: ''; 342 | transform: rotate(10deg); 343 | } 344 | 345 | .astronaut__leg-right { 346 | background-color: #e6e6e6; 347 | position: absolute; 348 | top: 188px; 349 | left: 108px; 350 | width: 23px; 351 | height: 75px; 352 | content: ''; 353 | transform: rotate(-10deg); 354 | } 355 | 356 | .astronaut__foot-left { 357 | background-color: white; 358 | position: absolute; 359 | top: 240px; 360 | left: 43px; 361 | width: 28px; 362 | height: 20px; 363 | content: ''; 364 | transform: rotate(10deg); 365 | border-radius: 3px; 366 | border-top-left-radius: 8em; 367 | border-top-right-radius: 8em; 368 | border-bottom: 4px solid #e67e22; 369 | } 370 | 371 | .astronaut__foot-right { 372 | background-color: white; 373 | position: absolute; 374 | top: 240px; 375 | left: 111px; 376 | width: 28px; 377 | height: 20px; 378 | content: ''; 379 | transform: rotate(-10deg); 380 | border-radius: 3px; 381 | border-top-left-radius: 8em; 382 | border-top-right-radius: 8em; 383 | border-bottom: 4px solid #e67e22; 384 | } -------------------------------------------------------------------------------- /_includes/assets/css/inline.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broeker/spacebook/e06e20b05b191e068657da8458c6220c678da573/_includes/assets/css/inline.css -------------------------------------------------------------------------------- /_includes/assets/images/github.svg: -------------------------------------------------------------------------------- 1 | GitHub icon -------------------------------------------------------------------------------- /_includes/assets/js/404.js: -------------------------------------------------------------------------------- 1 | (function (window, document) { 2 | "use strict"; 3 | window.addEventListener('load', function () { 4 | const cordCanvas = document.getElementById('cord'); 5 | const ctx = cordCanvas.getContext('2d'); 6 | 7 | let y1 = 160; 8 | let y2 = 100; 9 | let y3 = 100; 10 | 11 | let y1Forward = true; 12 | let y2Forward = false; 13 | let y3Forward = true; 14 | drawVisor() 15 | //animate() 16 | }); 17 | })(window, document); 18 | 19 | function drawVisor() { 20 | const canvas = document.getElementById('visor'); 21 | const ctx = canvas.getContext('2d'); 22 | 23 | ctx.beginPath(); 24 | ctx.moveTo(5, 45); 25 | ctx.bezierCurveTo(15, 64, 45, 64, 55, 45); 26 | 27 | ctx.lineTo(55, 20); 28 | ctx.bezierCurveTo(55, 15, 50, 10, 45, 10); 29 | 30 | ctx.lineTo(15, 10); 31 | 32 | ctx.bezierCurveTo(15, 10, 5, 10, 5, 20); 33 | ctx.lineTo(5, 45); 34 | 35 | ctx.fillStyle = '#2f3640'; 36 | ctx.strokeStyle = '#f5f6fa'; 37 | ctx.fill(); 38 | ctx.stroke(); 39 | } 40 | 41 | 42 | 43 | function animate() { 44 | requestAnimationFrame(animate); 45 | ctx.clearRect(0, 0, innerWidth, innerHeight); 46 | 47 | ctx.beginPath(); 48 | ctx.moveTo(130, 170); 49 | ctx.bezierCurveTo(250, y1, 345, y2, 400, y3); 50 | 51 | ctx.strokeStyle = 'white'; 52 | ctx.lineWidth = 8; 53 | ctx.stroke(); 54 | 55 | 56 | if (y1 === 100) { 57 | y1Forward = true; 58 | } 59 | 60 | if (y1 === 300) { 61 | y1Forward = false; 62 | } 63 | 64 | if (y2 === 100) { 65 | y2Forward = true; 66 | } 67 | 68 | if (y2 === 310) { 69 | y2Forward = false; 70 | } 71 | 72 | if (y3 === 100) { 73 | y3Forward = true; 74 | } 75 | 76 | if (y3 === 317) { 77 | y3Forward = false; 78 | } 79 | 80 | y1Forward ? y1 += 1 : y1 -= 1; 81 | y2Forward ? y2 += 1 : y2 -= 1; 82 | y3Forward ? y3 += 1 : y3 -= 1; 83 | } 84 | -------------------------------------------------------------------------------- /_includes/assets/js/darkmode.js: -------------------------------------------------------------------------------- 1 | function applyThemeColor () { 2 | if (localStorage.getItem('darkmode') === 'true' || (!(localStorage.getItem('darkmode')) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { 3 | localStorage.setItem('darkmode', 'true') 4 | document.documentElement.classList.add('dark') 5 | } else { 6 | document.documentElement.classList.remove('dark') 7 | } 8 | } 9 | 10 | function activateDarkMode() { 11 | const newDarkModeValue = localStorage.getItem('darkmode') === 'true' 12 | ? 'false' 13 | : 'true' 14 | 15 | localStorage.setItem('darkmode', newDarkModeValue) 16 | applyThemeColor() 17 | } 18 | 19 | applyThemeColor() 20 | -------------------------------------------------------------------------------- /_includes/assets/js/inline.js: -------------------------------------------------------------------------------- 1 | if (window.netlifyIdentity) { 2 | window.netlifyIdentity.on("init", user => { 3 | if (!user) { 4 | window.netlifyIdentity.on("login", () => { 5 | document.location.href = "/admin/"; 6 | }); 7 | } 8 | }); 9 | } 10 | 11 | document.addEventListener("DOMContentLoaded", function() { 12 | 13 | const el = document.getElementById("main"); 14 | el.addEventListener("click", closeNavigation, false) 15 | 16 | }); 17 | 18 | function logout() { 19 | localStorage.removeItem("passphrase") 20 | window.location.href = "/"; 21 | } 22 | 23 | function showNavigation() { 24 | const navigation = document.getElementById("navigation"); 25 | navigation.classList.remove("hidden", "sticky","pt-32"); 26 | navigation.classList.add("absolute","right-0", "top-0", "-mt-0", "z-50", "pt-0", "bg-white","border-l", "border-gray-200"); 27 | } 28 | 29 | function closeNavigation() { 30 | const navigation = document.getElementById("navigation"); 31 | navigation.classList.add("hidden"); 32 | navigation.classList.remove("absolute","right-0","z-50", "bg-gray-100", "border-r", "border-gray-800" ); 33 | } 34 | 35 | function toggleLayout(state) { 36 | if (localStorage.getItem('layout') === "horizontal") { 37 | localStorage.setItem('layout', 'vertical') 38 | } else if (localStorage.getItem('layout') === "vertical") { 39 | localStorage.setItem('layout', "horizontal") 40 | } else if (!localStorage.getItem('layout')) { 41 | if (state === "horizontal") { 42 | localStorage.setItem('layout', 'vertical') 43 | } else { 44 | localStorage.setItem('layout', 'horizontal') 45 | } 46 | } 47 | 48 | console.log(localStorage.getItem('layout')) 49 | } -------------------------------------------------------------------------------- /_includes/assets/js/search.js: -------------------------------------------------------------------------------- 1 | (function (window, document) { 2 | "use strict"; 3 | const search = (e) => { 4 | const results = window.searchIndex.search(e.target.value, { 5 | bool: "OR", 6 | expand: true, 7 | }); 8 | const searchBox = document.getElementById("searchField"); 9 | const resEl = document.getElementById("searchResults"); 10 | const noResultsEl = document.getElementById("noResultsFound"); 11 | const navigation = document.getElementById("navigation"); 12 | 13 | searchBox.addEventListener('focus', (event) => { 14 | event.target.classList.remove("hidden"); 15 | resEl.classList.remove("hidden"); 16 | }); 17 | 18 | document.addEventListener('click', function(event) { 19 | var isClickInside = searchBox.contains(event.target); 20 | if (!isClickInside) { 21 | console.log('hidden') 22 | resEl.classList.add("hidden"),noResultsEl.classList.add("hidden") 23 | noResultsEl.classList.add("hidden") 24 | } 25 | }); 26 | 27 | resEl.innerHTML = ""; 28 | if (e.target.value != "") { 29 | if (results != "") { 30 | noResultsEl.classList.add("hidden") 31 | resEl.classList.add("p-4") 32 | results.map((r) => { 33 | const { id, title, description } = r.doc; 34 | const el = document.createElement("li", { tabindex: '-1' }); 35 | resEl.appendChild(el); 36 | 37 | const h3 = document.createElement("h3"); 38 | el.appendChild(h3); 39 | 40 | const a = document.createElement("a"); 41 | a.setAttribute("href", id); 42 | a.textContent = title; 43 | h3.appendChild(a); 44 | 45 | const p = document.createElement("p"); 46 | p.textContent = description; 47 | el.appendChild(p); 48 | }); 49 | } else { 50 | noResultsEl.classList.remove("hidden") 51 | } 52 | } else { 53 | noResultsEl.classList.add("hidden") 54 | } 55 | }; 56 | fetch("/search-index.json").then((response) => 57 | response.json().then((rawIndex) => { 58 | window.searchIndex = elasticlunr.Index.load(rawIndex); 59 | document.getElementById("searchField").addEventListener("input", search); 60 | }) 61 | ); 62 | })(window, document); -------------------------------------------------------------------------------- /_includes/assets/utils/image.txt: -------------------------------------------------------------------------------- 1 | {% image "sagan.jpg" "Carl Sagan, 1987" %} -------------------------------------------------------------------------------- /_includes/assets/utils/imagesize.txt: -------------------------------------------------------------------------------- 1 | {% image "sagan.jpg" "Carl Sagan, 1987" "200px" %} -------------------------------------------------------------------------------- /_includes/components/contact.njk: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Send a message

5 |
6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 | 19 | 20 |
21 | 22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /_includes/components/footer.njk: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | {% if site.enableContact == 1 %} 6 | 7 | 8 | 9 | {% endif %} 10 |
11 | 12 |
13 | 14 | {% if site.footer %} 15 | {{ site.footer | safe }} 16 | {% endif %} 17 | 18 |
19 | {% if site.enableNetlifyCMS == 1 %} 20 | 28 | {% endif %} 29 | {% if site.enableGithubLink == 1 %} 30 |
31 | 32 |
33 | {% endif %} 34 |
35 |
36 | -------------------------------------------------------------------------------- /_includes/components/head.njk: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ renderData.title or title or site.name }} 5 | 6 | 7 | 8 | 9 | {% set js %} 10 | {% include "assets/js/inline.js" %} 11 | {% include "assets/js/search.js" %} 12 | {% endset %} 13 | {% set darkmode %} 14 | {% include "assets/js/darkmode.js" %} 15 | {% endset %} 16 | 17 | 18 | 19 | 20 | {% if site.enableNetlifyCMS == 1 %} 21 | 22 | 23 | {% endif %} 24 | 25 | {% if site.enableSearch == 1 %} 26 | 27 | {% endif %} 28 | 29 | {% if site.navigationStyle == 'horizontal' %} 30 | 31 | {% endif %} 32 | 33 | 34 | -------------------------------------------------------------------------------- /_includes/components/header.njk: -------------------------------------------------------------------------------- 1 |
2 | 33 | {% if site.navigationStyle == 'horizontal' %} 34 |
35 | {% include "components/nav.njk" %} 36 |
37 | {% endif %} 38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /_includes/components/nav.njk: -------------------------------------------------------------------------------- 1 | {% set navPages = collections.all | eleventyNavigation %} 2 | 3 | {% macro renderNavListItem(entry,rel) -%} 4 | 5 | {% if entry.url == page.url or entry.title == eleventyNavigation.parent or entry.title == eleventyComputed.key%} 6 | {% if rel == "child" %} 7 | {% set highlight = 'border-gray-600 font-semibold text-gray-500 focus:border-gray-700' %} 8 | {% else %} 9 | {% set highlight = 'border-gray-600 font-semibold focus:border-gray-700' %} 10 | {% endif %} 11 | {% set current = 'aria-current="page"' %} 12 | {% else %} 13 | {% set highlight = 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-500 ' %} 14 | {% set current = '' %} 15 | {% endif %} 16 | 17 | {%- if not entry.children.length -%} 18 | {% if rel == "child" %} 19 | {{ entry.title }} 35 | {% else %} 36 | {{ entry.title }} 55 | {% endif %} 56 | 57 | {%- else -%} 58 | 59 | {%- if entry.children.length -%} 60 | 61 |
62 | 67 |
68 |
69 | {%- for child in entry.children %}{{ renderNavListItem(child) }}{% endfor -%} 70 |
71 |
72 |
73 | {%- endif -%} 74 | {%- endif -%} 75 | {%- endmacro %} 76 | 77 |
78 |
79 | 80 | 85 | 86 | 96 |
97 |
98 | 99 | 100 | -------------------------------------------------------------------------------- /_includes/experimental/blog/author.njk: -------------------------------------------------------------------------------- 1 | --- 2 | title: Author archive 3 | layout: layouts/base.njk 4 | pagination: 5 | data: collections.authors 6 | size: 1 7 | alias: author 8 | permalink: "authors/{{ author | slug }}/" 9 | renderData: 10 | author: "{{ author }}" 11 | title: "Posts by {{ author }}" 12 | metaDescription: "An archive of all posts by the author: {{ author }}." 13 | --- 14 | 15 |

{{ renderData.title | safe }}

16 | 17 |
18 | {% for post in collections.authors[author] | reverse %} 19 | 20 |

21 | 22 | {% if post.title %} 23 | {{ post.title }} 24 | {% else %} 25 | Untitled 26 | {% endif %} 27 | 28 |

29 | {% if post.summary %} 30 |

31 | {{ post.summary }} 32 |

33 | {% endif %} 34 |

35 | 38 |

39 | {% if post.tags %} 40 |

41 | {% for tag in post.tags %} 42 | {%- if tag != "post" -%} 43 | {% set tagUrl %}/tags/{{ tag }}/{% endset %} 44 | 45 | {%- endif -%} 46 | {% endfor %} 47 |

48 | {% endif %} 49 | 50 | {% endfor %} 51 | 54 |
-------------------------------------------------------------------------------- /_includes/experimental/blog/authors.njk: -------------------------------------------------------------------------------- 1 | --- 2 | title: Authors 3 | metaDescription: This page lists all of the Blog's authors. 4 | layout: layouts/base.njk 5 | pagination: 6 | data: collections.authors 7 | size: Infinity 8 | permalink: "authors/index.html" 9 | --- 10 | 11 |

{{ title }}

12 | 13 |
14 | {% for author in pagination.items %} 15 | 20 | {% endfor %} 21 | 24 |
-------------------------------------------------------------------------------- /_includes/experimental/blog/components/pageslist.njk: -------------------------------------------------------------------------------- 1 |
2 | {% for page in pageslist | reverse %} 3 | 4 |

5 | 6 | {% if page.data.title %} 7 | {{ page.data.title }} 8 | {% else %} 9 | Untitled 10 | {% endif %} 11 | 12 |

13 | {% if page.data.summary %} 14 |

15 | {{ page.data.summary }} 16 |

17 | {% endif %} 18 |

19 | 22 |

23 | {% if page.data.tags %} 24 |

25 | {% for tag in page.data.tags %} 26 | {%- if tag != "post" -%} 27 | {% set tagUrl %}/tags/{{ tag }}/{% endset %} 28 | 29 | {%- endif -%} 30 | {% endfor %} 31 |

32 | {% endif %} 33 | 34 | {% endfor %} 35 |
36 | -------------------------------------------------------------------------------- /_includes/experimental/blog/components/postslist.njk: -------------------------------------------------------------------------------- 1 |
2 | 25 | {% if post.data.tags %} 26 |

27 | {% for tag in post.data.tags %} 28 | {%- if tag != "post" -%} 29 | {% set tagUrl %}/tags/{{ tag }}/{% endset %} 30 | 31 | {%- endif -%} 32 | {% endfor %} 33 |

34 | {% endif %} 35 | 36 |
37 | {# 38 |

Foo

39 | {% set latest_posts = collections.posts %} 40 | {% for post in latest_posts.slice(0,2) | reverse %} 41 | {{ post.data.title}} 42 | {% endfor %} #} 43 | -------------------------------------------------------------------------------- /_includes/experimental/blog/content/posts/firstpost.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: This is the first example post 3 | metaDescription: This is a sample meta description. If one is not present in your page/post's front matter, the default metadata.desciption will be used instead. 4 | date: 2019-01-01T00:00:00.000Z 5 | author: John Appleseed 6 | summary: Why contemplating our mortality can be a powerful catalyst for change 7 | tags: 8 | - tech 9 | - environment 10 | - politics 11 | - sport 12 | --- 13 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 14 | 15 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring. 16 | 17 | ## Section Header 18 | 19 | Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line. 20 | 21 | ``` text/2-3 22 | // this is a command 23 | function myCommand() { 24 | let counter = 0; 25 | counter++; 26 | } 27 | ``` 28 | Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 29 | -------------------------------------------------------------------------------- /_includes/experimental/blog/content/posts/fourthpost.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: This is the fourth example post 3 | date: 2020-02-03 4 | author: John Doe 5 | summary: Why contemplating our mortality can be a powerful catalyst for change 6 | tags: 7 | - environment 8 | - politics 9 | --- 10 | Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 11 | 12 | ![A sample inlined image](https://source.unsplash.com/random/600x400) 13 | 14 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 15 | -------------------------------------------------------------------------------- /_includes/experimental/blog/content/posts/posts.json: -------------------------------------------------------------------------------- 1 | { 2 | "layout": "layouts/post.njk", 3 | "permalink": "posts/{{ title | slug }}/index.html", 4 | "author": "Anonymous", 5 | "tags": [ 6 | "post" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /_includes/experimental/blog/content/posts/secondpost.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: This is the second example post 3 | summary: Why contemplating our mortality can be a powerful catalyst for change 4 | date: 2020-01-01 5 | author: John Appleseed 6 | tags: 7 | - sport 8 | --- 9 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 10 | 11 | ## Section Header 12 | 13 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring. 14 | 15 | Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line. 16 | -------------------------------------------------------------------------------- /_includes/experimental/blog/content/posts/the-fifth-and-hopefully-final-example-post.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The fifth and hopefully final example post yo yo 3 | date: 2020-10-15T12:23:39.598Z 4 | author: Jane Doe 5 | summary: Why contemplating our mortality can be a powerful catalyst for change 6 | tags: 7 | - environment 8 | - sport 9 | eleventyComputed: 10 | key: Spacelog 11 | --- 12 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 13 | 14 | ![A sample inlined image](https://source.unsplash.com/random/600x400) 15 | 16 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. -------------------------------------------------------------------------------- /_includes/experimental/blog/content/posts/thirdpost.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: This is the third example post which has a slightly longer title than the others 3 | date: 2020-01-01 4 | author: Jane Doe 5 | summary: Why contemplating our mortality can be a powerful catalyst for change 6 | tags: 7 | - tech 8 | - politics 9 | --- 10 | Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. 11 | 12 | ``` 13 | pre, 14 | code { 15 | line-height: 1.5; 16 | } 17 | ``` 18 | 19 | Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring. 20 | 21 | ## Section Header 22 | 23 | Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line. 24 | -------------------------------------------------------------------------------- /_includes/experimental/blog/layouts/blog.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: layouts/base.njk 3 | section: blog 4 | permalink: /blog/index.html 5 | --- 6 |
7 |
8 |
9 |
10 |
11 | 12 |

{{ title }}

13 | 14 | {{ layoutContent | safe }} 15 | 16 | {% set postslist = collections.post %} 17 | {% include "components/postslist.njk" %} 18 |
19 | 20 |
21 | 22 | 23 |
24 |
25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /_includes/experimental/blog/layouts/post.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: layouts/base.njk 3 | section: post 4 | --- 5 | {% if site.navigationStyle == "vertical" %} 6 | {% if site.enableEditButton == true or site.enableDatestamp == true %} 7 |
8 | {% if site.enableDatestamp == true %} 9 |
Updated
10 | {% endif %} 11 | {% if site.enableEditButton == true %} 12 | 13 | {% endif %} 14 |
15 | {% endif %} 16 | {% endif %} 17 | 18 |
19 |
20 |
21 | {% if site.enableTOC and toc %} 22 |
23 | {% else %} 24 |
25 | {% endif %} 26 |
27 |

{{ title }}

28 | {% if site.navigationStyle == "horizontal" %} 29 | {% if site.enableEditButton == true or site.enableDatestamp == true %} 30 |
31 | {% if site.enableDatestamp == true %} 32 |
Updated
33 | {% endif %} 34 | {% if site.enableEditButton == true %} 35 | 36 | {% endif %} 37 |
38 | {% endif %} 39 | {% endif %} 40 |
41 | {{ layoutContent | safe }} 42 | {% if (site.enableComments) and (comments !== 0) %} 43 | 44 | {% endif %} 45 | 46 | {% if tags %} 47 |

48 | {% for tag in tags %} 49 | {%- if tag != "post" -%} 50 | {% set tagUrl %}/tags/{{ tag }}/{% endset %} 51 | 52 | {%- endif -%} 53 | {% endfor %} 54 |

55 | {% endif %} 56 | 57 |
58 | {% if nextPost.url %} 59 |

60 | Next: 61 | 62 |

63 | {% endif %} 64 | {% if prevPost.url %} 65 |

66 | Previous: 67 | 68 |

69 | {% endif %} 70 | 73 | 74 |
75 |
76 |
77 | 78 |
79 |
80 |
81 | -------------------------------------------------------------------------------- /_includes/experimental/blog/pages/blog.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: layouts/blog.njk 3 | title: Spacelog 4 | date: 2020-12-21 5 | permalink: /blog/index.html 6 | eleventyNavigation: 7 | key: Spacelog 8 | order: 200 9 | --- -------------------------------------------------------------------------------- /_includes/experimental/blog/tags.njk: -------------------------------------------------------------------------------- 1 | --- 2 | pagination: 3 | data: collections 4 | size: 1 5 | alias: tag 6 | filter: 7 | - all 8 | - nav 9 | - post 10 | - posts 11 | - page 12 | - pages 13 | permalink: /tags/{{ tag }}/ 14 | layout: layouts/base.njk 15 | renderData: 16 | title: {{ tag }} 17 | metaDescription: "All content tagged with “{{ tag }}”" 18 | --- 19 |
20 |
21 |
22 |
23 |

Tagged: {{ tag }}

24 | 25 | {% set postslist = collections[tag] %} 26 | {% include "components/postslist.njk" %} 27 | 28 | 31 | 32 |
33 | 34 | 35 |
36 |
37 |
38 | 39 | 40 | -------------------------------------------------------------------------------- /_includes/layouts/404.njk: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ title }} 6 | {% set css %} 7 | {% include "_includes/assets/css/404.css" %} 8 | {% endset %} 9 | 10 | {% set js %} 11 | {% include "_includes/assets/js/404.js" %} 12 | {% endset %} 13 | 14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 |
22 |
23 |
24 | 25 |
26 |
404
27 |
Ground Control to Major Tom
28 |
Your circuit's dead, there's something wrong
29 | 30 |
31 | 32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | 49 |
50 | 51 |
52 | 53 |
54 | 55 |
56 |
57 |
58 |
59 | 60 | 61 | -------------------------------------------------------------------------------- /_includes/layouts/base.njk: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include "components/head.njk" %} 4 | 5 |
6 | {% include "components/header.njk" %} 7 | {% if site.navigationStyle == "vertical" %} 8 | 18 | {% endif %} 19 | {% if site.navigationStyle == 'horizontal' %} 20 |
21 | {% else %} 22 |
23 | {% endif %} 24 | {{ layoutContent | safe }} 25 | {% include "components/footer.njk" %} 26 |
27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /_includes/layouts/contact.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: layouts/base.njk 3 | section: contact 4 | --- 5 |
6 | {% include "components/contact.njk" %} 7 |
-------------------------------------------------------------------------------- /_includes/layouts/page.njk: -------------------------------------------------------------------------------- 1 | --- 2 | layout: layouts/base.njk 3 | section: page 4 | --- 5 | 6 | {% if site.navigationStyle == "vertical" %} 7 | {% if site.enableEditButton == true or site.enableDatestamp == true %} 8 |
9 | {% if site.enableDatestamp == true %} 10 |
Updated
11 | {% endif %} 12 | {% if site.enableEditButton == true %} 13 | 14 | {% endif %} 15 |
16 | {% endif %} 17 | {% endif %} 18 | 19 |
20 |
21 |
22 | {% if site.enableTOC and toc %} 23 |
24 | {% else %} 25 |
26 | {% endif %} 27 |
28 |

{{ title }}

29 | {% if site.navigationStyle == "horizontal" %} 30 | {% if site.enableEditButton == true or site.enableDatestamp == true %} 31 |
32 | {% if site.enableDatestamp == true %} 33 |
Updated
34 | {% endif %} 35 | {% if site.enableEditButton == true %} 36 | 37 | {% endif %} 38 |
39 | {% endif %} 40 | {% endif %} 41 |
42 | {{ layoutContent | safe }} 43 | {% if (site.enableComments) and (comments !== 0) %} 44 | 45 | {% endif %} 46 | 47 | {% if site.enablePageNavigation == true %} 48 | 57 | {% endif %} 58 |
59 |
60 |
61 | 62 | {% if site.enableTOC and toc %} 63 | 69 | {% endif %} 70 |
71 |
72 |
73 | 74 | 75 | -------------------------------------------------------------------------------- /_includes/layouts/robots.njk: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / 3 | -------------------------------------------------------------------------------- /_tmp/style.css: -------------------------------------------------------------------------------- 1 | /*! tailwindcss v2.2.7 | 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 | [type='submit'] { 208 | -webkit-appearance: button; 209 | } 210 | 211 | /** 212 | Remove the inner border and padding in Firefox. 213 | */ 214 | 215 | /** 216 | Restore the focus styles unset by the previous rule. 217 | */ 218 | 219 | /** 220 | Remove the additional ':invalid' styles in Firefox. 221 | See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737 222 | */ 223 | 224 | /** 225 | Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers. 226 | */ 227 | 228 | legend { 229 | padding: 0; 230 | } 231 | 232 | /** 233 | Add the correct vertical alignment in Chrome and Firefox. 234 | */ 235 | 236 | progress { 237 | vertical-align: baseline; 238 | } 239 | 240 | /** 241 | Correct the cursor style of increment and decrement buttons in Safari. 242 | */ 243 | 244 | /** 245 | 1. Correct the odd appearance in Chrome and Safari. 246 | 2. Correct the outline style in Safari. 247 | */ 248 | 249 | [type='search'] { 250 | -webkit-appearance: textfield; /* 1 */ 251 | outline-offset: -2px; /* 2 */ 252 | } 253 | 254 | /** 255 | Remove the inner padding in Chrome and Safari on macOS. 256 | */ 257 | 258 | /** 259 | 1. Correct the inability to style clickable types in iOS and Safari. 260 | 2. Change font properties to 'inherit' in Safari. 261 | */ 262 | 263 | /* 264 | Interactive 265 | =========== 266 | */ 267 | 268 | /* 269 | Add the correct display in Chrome and Safari. 270 | */ 271 | 272 | summary { 273 | display: list-item; 274 | } 275 | 276 | /** 277 | * Manually forked from SUIT CSS Base: https://github.com/suitcss/base 278 | * A thin layer on top of normalize.css that provides a starting point more 279 | * suitable for web applications. 280 | */ 281 | 282 | /** 283 | * Removes the default spacing and border for appropriate elements. 284 | */ 285 | 286 | blockquote, 287 | dl, 288 | dd, 289 | h1, 290 | h2, 291 | h3, 292 | h4, 293 | h5, 294 | h6, 295 | hr, 296 | figure, 297 | p, 298 | pre { 299 | margin: 0; 300 | } 301 | 302 | button { 303 | background-color: transparent; 304 | background-image: none; 305 | } 306 | 307 | fieldset { 308 | margin: 0; 309 | padding: 0; 310 | } 311 | 312 | ol, 313 | ul { 314 | list-style: none; 315 | margin: 0; 316 | padding: 0; 317 | } 318 | 319 | /** 320 | * Tailwind custom reset styles 321 | */ 322 | 323 | /** 324 | * 1. Use the user's configured `sans` font-family (with Tailwind's default 325 | * sans-serif font stack as a fallback) as a sane default. 326 | * 2. Use Tailwind's default "normal" line-height so the user isn't forced 327 | * to override it to ensure consistency even when using the default theme. 328 | */ 329 | 330 | html { 331 | font-family: 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 */ 332 | line-height: 1.5; /* 2 */ 333 | } 334 | 335 | /** 336 | * Inherit font-family and line-height from `html` so users can set them as 337 | * a class directly on the `html` element. 338 | */ 339 | 340 | body { 341 | font-family: inherit; 342 | line-height: inherit; 343 | } 344 | 345 | /** 346 | * 1. Prevent padding and border from affecting element width. 347 | * 348 | * We used to set this in the html element and inherit from 349 | * the parent element for everything else. This caused issues 350 | * in shadow-dom-enhanced elements like
where the content 351 | * is wrapped by a div with box-sizing set to `content-box`. 352 | * 353 | * https://github.com/mozdevs/cssremedy/issues/4 354 | * 355 | * 356 | * 2. Allow adding a border to an element by just adding a border-width. 357 | * 358 | * By default, the way the browser specifies that an element should have no 359 | * border is by setting it's border-style to `none` in the user-agent 360 | * stylesheet. 361 | * 362 | * In order to easily add borders to elements by just setting the `border-width` 363 | * property, we change the default border-style for all elements to `solid`, and 364 | * use border-width to hide them instead. This way our `border` utilities only 365 | * need to set the `border-width` property instead of the entire `border` 366 | * shorthand, making our border utilities much more straightforward to compose. 367 | * 368 | * https://github.com/tailwindcss/tailwindcss/pull/116 369 | */ 370 | 371 | *, 372 | ::before, 373 | ::after { 374 | box-sizing: border-box; /* 1 */ 375 | border-width: 0; /* 2 */ 376 | border-style: solid; /* 2 */ 377 | border-color: currentColor; /* 2 */ 378 | } 379 | 380 | /* 381 | * Ensure horizontal rules are visible by default 382 | */ 383 | 384 | hr { 385 | border-top-width: 1px; 386 | } 387 | 388 | /** 389 | * Undo the `border-style: none` reset that Normalize applies to images so that 390 | * our `border-{width}` utilities have the expected effect. 391 | * 392 | * The Normalize reset is unnecessary for us since we default the border-width 393 | * to 0 on all elements. 394 | * 395 | * https://github.com/tailwindcss/tailwindcss/issues/362 396 | */ 397 | 398 | img { 399 | border-style: solid; 400 | } 401 | 402 | textarea { 403 | resize: vertical; 404 | } 405 | 406 | input::-moz-placeholder, textarea::-moz-placeholder { 407 | opacity: 1; 408 | color: #9ca3af; 409 | } 410 | 411 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 412 | opacity: 1; 413 | color: #9ca3af; 414 | } 415 | 416 | input::placeholder, 417 | textarea::placeholder { 418 | opacity: 1; 419 | color: #9ca3af; 420 | } 421 | 422 | button { 423 | cursor: pointer; 424 | } 425 | 426 | table { 427 | border-collapse: collapse; 428 | } 429 | 430 | h1, 431 | h2, 432 | h3, 433 | h4, 434 | h5, 435 | h6 { 436 | font-size: inherit; 437 | font-weight: inherit; 438 | } 439 | 440 | /** 441 | * Reset links to optimize for opt-in styling instead of 442 | * opt-out. 443 | */ 444 | 445 | a { 446 | color: inherit; 447 | text-decoration: inherit; 448 | } 449 | 450 | /** 451 | * Reset form element properties that are easy to forget to 452 | * style explicitly so you don't inadvertently introduce 453 | * styles that deviate from your design system. These styles 454 | * supplement a partial reset that is already applied by 455 | * normalize.css. 456 | */ 457 | 458 | button, 459 | input, 460 | optgroup, 461 | select, 462 | textarea { 463 | padding: 0; 464 | line-height: inherit; 465 | color: inherit; 466 | } 467 | 468 | /** 469 | * Use the configured 'mono' font family for elements that 470 | * are expected to be rendered with a monospace font, falling 471 | * back to the system monospace stack if there is no configured 472 | * 'mono' font family. 473 | */ 474 | 475 | pre, 476 | code, 477 | kbd, 478 | samp { 479 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 480 | } 481 | 482 | /** 483 | * 1. Make replaced elements `display: block` by default as that's 484 | * the behavior you want almost all of the time. Inspired by 485 | * CSS Remedy, with `svg` added as well. 486 | * 487 | * https://github.com/mozdevs/cssremedy/issues/14 488 | * 489 | * 2. Add `vertical-align: middle` to align replaced elements more 490 | * sensibly by default when overriding `display` by adding a 491 | * utility like `inline`. 492 | * 493 | * This can trigger a poorly considered linting error in some 494 | * tools but is included by design. 495 | * 496 | * https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210 497 | */ 498 | 499 | img, 500 | svg, 501 | video, 502 | canvas, 503 | audio, 504 | iframe, 505 | embed, 506 | object { 507 | display: block; /* 1 */ 508 | vertical-align: middle; /* 2 */ 509 | } 510 | 511 | /** 512 | * Constrain images and videos to the parent width and preserve 513 | * their intrinsic aspect ratio. 514 | * 515 | * https://github.com/mozdevs/cssremedy/issues/14 516 | */ 517 | 518 | img, 519 | video { 520 | max-width: 100%; 521 | height: auto; 522 | } 523 | 524 | /** 525 | * Ensure the default browser behavior of the `hidden` attribute. 526 | */ 527 | 528 | [hidden] { 529 | display: none; 530 | } 531 | 532 | *, ::before, ::after { 533 | --tw-border-opacity: 1; 534 | border-color: rgba(229, 231, 235, var(--tw-border-opacity)); 535 | } 536 | 537 | 538 | [type='text'], 539 | [type='email'], 540 | [type='password'], 541 | [type='search'], 542 | [type='time'], 543 | textarea, 544 | select 545 | { 546 | -webkit-appearance: none; 547 | -moz-appearance: none; 548 | appearance: none; 549 | background-color: #fff; 550 | border-color: #6b7280; 551 | border-width: 1px; 552 | border-radius: 0px; 553 | padding-top: 0.5rem; 554 | padding-right: 0.75rem; 555 | padding-bottom: 0.5rem; 556 | padding-left: 0.75rem; 557 | font-size: 1rem; 558 | line-height: 1.5rem; 559 | } 560 | 561 | [type='text']:focus, [type='email']:focus, [type='password']:focus, [type='search']:focus, [type='time']:focus, textarea:focus, select:focus { 562 | outline: 2px solid transparent; 563 | outline-offset: 2px; 564 | --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 565 | --tw-ring-offset-width: 0px; 566 | --tw-ring-offset-color: #fff; 567 | --tw-ring-color: #2563eb; 568 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); 569 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); 570 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); 571 | border-color: #2563eb; 572 | } 573 | 574 | input::-moz-placeholder, textarea::-moz-placeholder { 575 | color: #6b7280; 576 | opacity: 1; 577 | } 578 | 579 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 580 | color: #6b7280; 581 | opacity: 1; 582 | } 583 | 584 | input::placeholder, textarea::placeholder { 585 | color: #6b7280; 586 | opacity: 1; 587 | } 588 | 589 | select { 590 | background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); 591 | background-position: right 0.5rem center; 592 | background-repeat: no-repeat; 593 | background-size: 1.5em 1.5em; 594 | padding-right: 2.5rem; 595 | -webkit-print-color-adjust: exact; 596 | color-adjust: exact; 597 | } 598 | 599 | /* Set up some default image behavior for nicer images */ 600 | 601 | img { 602 | width: auto !important; 603 | border-width: 2px !important; 604 | border-color: transparent !important; 605 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !important; 606 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important 607 | } 608 | 609 | img:hover { 610 | border-width: 2px; 611 | --tw-border-opacity: 1; 612 | border-color: rgba(243, 244, 246, var(--tw-border-opacity)) 613 | } 614 | 615 | /* Overrides for Tailwind Typography prose class */ 616 | 617 | .dark .prose a { 618 | --tw-text-opacity: 1; 619 | color: rgba(156, 163, 175, var(--tw-text-opacity)); 620 | } 621 | 622 | .dark .prose a:hover { 623 | --tw-text-opacity: 1; 624 | color: rgba(107, 114, 128, var(--tw-text-opacity)); 625 | } 626 | 627 | .dark .prose h1, .dark .prose h2, .dark .prose h3, .dark .prose h4, .dark .prose h5, .dark .prose h6 .prose hr, .dark .prose strong { 628 | --tw-text-opacity: 1; 629 | color: rgba(156, 163, 175, var(--tw-text-opacity)); 630 | } 631 | 632 | .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 { 633 | scroll-margin-top: 3.5em; 634 | } 635 | 636 | .prose pre code { 637 | overflow-x: auto !important 638 | } 639 | 640 | .prose .footer-nav a { 641 | text-decoration: none !important 642 | } 643 | 644 | /* Define blockquotes and some standard callout blocks */ 645 | 646 | blockquote { 647 | border-radius: 0.5rem; 648 | border-left-width: 8px; 649 | --tw-border-opacity: 1; 650 | border-color: rgba(229, 231, 235, var(--tw-border-opacity)); 651 | } 652 | 653 | .dark blockquote { 654 | --tw-border-opacity: 1; 655 | border-color: rgba(55, 65, 81, var(--tw-border-opacity)); 656 | } 657 | 658 | blockquote { 659 | --tw-bg-opacity: 1; 660 | background-color: rgba(243, 244, 246, var(--tw-bg-opacity)); 661 | } 662 | 663 | .dark blockquote { 664 | --tw-bg-opacity: 1; 665 | background-color: rgba(107, 114, 128, var(--tw-bg-opacity)); 666 | } 667 | 668 | blockquote { 669 | padding: 1rem; 670 | } 671 | 672 | /* Overrides for nav/Table of Contents block */ 673 | 674 | nav ul { 675 | margin-left: 0px; 676 | --tw-text-opacity: 1; 677 | color: rgba(107, 114, 128, var(--tw-text-opacity)); 678 | } 679 | 680 | nav ul ul { 681 | margin-left: 1.5rem; 682 | --tw-text-opacity: 1; 683 | color: rgba(107, 114, 128, var(--tw-text-opacity)); 684 | } 685 | 686 | nav ul li a { 687 | margin-bottom: 0.25rem; 688 | display: block; 689 | width: 100%; 690 | padding-top: 0.5rem; 691 | padding-right: 1rem; 692 | padding-bottom: 0.25rem; 693 | padding-left: 0.5rem; 694 | --tw-text-opacity: 1; 695 | color: rgba(107, 114, 128, var(--tw-text-opacity)); 696 | } 697 | 698 | .dark nav ul li a { 699 | --tw-text-opacity: 1; 700 | color: rgba(107, 114, 128, var(--tw-text-opacity)); 701 | } 702 | 703 | nav ul li a:hover { 704 | --tw-text-opacity: 1; 705 | color: rgba(17, 24, 39, var(--tw-text-opacity)); 706 | } 707 | 708 | .dark nav ul li a:hover { 709 | --tw-text-opacity: 1; 710 | color: rgba(156, 163, 175, var(--tw-text-opacity)); 711 | } 712 | 713 | nav ul li a.active { 714 | font-weight: 600; 715 | } 716 | 717 | .dark .prose .footer-nav a:hover { 718 | --tw-text-opacity: 1 !important; 719 | color: rgba(156, 163, 175, var(--tw-text-opacity)) !important; 720 | } 721 | 722 | /* Utilities and misc */ 723 | 724 | .adjust p img, .adjust img, .adjust p iframe, .adjust iframe { 725 | margin-right: auto !important; 726 | margin-left: auto !important; 727 | padding: 0.5rem !important; 728 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !important; 729 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important 730 | } 731 | 732 | .adjust p img:hover, .adjust img:hover { 733 | --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); 734 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) 735 | } 736 | 737 | .adjust img.button { 738 | width: auto !important; 739 | --tw-shadow: 0 0 #0000 !important; 740 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important 741 | } 742 | 743 | .text-align-center { 744 | display: flex; 745 | justify-content: center; 746 | } 747 | 748 | .dark input { 749 | --tw-text-opacity: 1; 750 | color: rgba(156, 163, 175, var(--tw-text-opacity)); 751 | } 752 | 753 | .prose { 754 | color: #374151; 755 | max-width: 100%; 756 | } 757 | 758 | .prose [class~="lead"] { 759 | color: #4b5563; 760 | font-size: 1.25em; 761 | line-height: 1.6; 762 | margin-top: 1.2em; 763 | margin-bottom: 1.2em; 764 | } 765 | 766 | .prose a { 767 | color: #1D4ED8; 768 | text-decoration: underline; 769 | font-weight: 500; 770 | } 771 | 772 | .prose a:hover { 773 | color: #1E3A8A; 774 | } 775 | 776 | .prose strong { 777 | color: #111827; 778 | font-weight: 600; 779 | } 780 | 781 | .prose ol { 782 | counter-reset: list-counter; 783 | margin-top: 1.25em; 784 | margin-bottom: 1.25em; 785 | } 786 | 787 | .prose ol > li { 788 | position: relative; 789 | counter-increment: list-counter; 790 | padding-left: 1.75em; 791 | } 792 | 793 | .prose ol > li::before { 794 | content: counter(list-counter) "."; 795 | position: absolute; 796 | font-weight: 400; 797 | color: #6b7280; 798 | left: 0; 799 | } 800 | 801 | .prose ul > li { 802 | position: relative; 803 | padding-left: 1.75em; 804 | } 805 | 806 | .prose ul > li::before { 807 | content: ""; 808 | position: absolute; 809 | background-color: #d1d5db; 810 | border-radius: 50%; 811 | width: 0.375em; 812 | height: 0.375em; 813 | top: calc(0.875em - 0.1875em); 814 | left: 0.25em; 815 | } 816 | 817 | .prose hr { 818 | border-color: #e5e7eb; 819 | border-top-width: 1px; 820 | margin-top: 3em; 821 | margin-bottom: 3em; 822 | } 823 | 824 | .prose blockquote { 825 | font-weight: 500; 826 | font-style: italic; 827 | color: #111827; 828 | border-left-width: 0.25rem; 829 | border-left-color: #e5e7eb; 830 | quotes: "\201C""\201D""\2018""\2019"; 831 | margin-top: 1.6em; 832 | margin-bottom: 1.6em; 833 | padding-left: 1em; 834 | } 835 | 836 | .prose blockquote p:first-of-type::before { 837 | content: open-quote; 838 | } 839 | 840 | .prose blockquote p:last-of-type::after { 841 | content: close-quote; 842 | } 843 | 844 | .prose h1 { 845 | color: #111827; 846 | font-weight: 800; 847 | font-size: 2.25em; 848 | margin-top: 0; 849 | margin-bottom: 0.8888889em; 850 | line-height: 1.1111111; 851 | } 852 | 853 | .prose h2 { 854 | color: #111827; 855 | font-weight: 700; 856 | font-size: 1.5em; 857 | margin-top: 2em; 858 | margin-bottom: 1em; 859 | line-height: 1.3333333; 860 | } 861 | 862 | .prose h3 { 863 | color: #111827; 864 | font-weight: 600; 865 | font-size: 1.25em; 866 | margin-top: 1.6em; 867 | margin-bottom: 0.6em; 868 | line-height: 1.6; 869 | } 870 | 871 | .prose h4 { 872 | color: #111827; 873 | font-weight: 600; 874 | margin-top: 1.5em; 875 | margin-bottom: 0.5em; 876 | line-height: 1.5; 877 | } 878 | 879 | .prose figure figcaption { 880 | color: #6b7280; 881 | font-size: 0.875em; 882 | line-height: 1.4285714; 883 | margin-top: 0.8571429em; 884 | } 885 | 886 | .prose code { 887 | color: #111827; 888 | font-weight: 600; 889 | font-size: 0.875em; 890 | } 891 | 892 | .prose code::before { 893 | content: "`"; 894 | } 895 | 896 | .prose code::after { 897 | content: "`"; 898 | } 899 | 900 | .prose a code { 901 | color: #111827; 902 | } 903 | 904 | .prose pre { 905 | color: #e5e7eb; 906 | background-color: #1f2937; 907 | overflow-x: auto; 908 | font-size: 0.875em; 909 | line-height: 1.7142857; 910 | margin-top: 1.7142857em; 911 | margin-bottom: 1.7142857em; 912 | border-radius: 0.375rem; 913 | padding-top: 0.8571429em; 914 | padding-right: 1.1428571em; 915 | padding-bottom: 0.8571429em; 916 | padding-left: 1.1428571em; 917 | } 918 | 919 | .prose pre code { 920 | background-color: transparent; 921 | border-width: 0; 922 | border-radius: 0; 923 | padding: 0; 924 | font-weight: 400; 925 | color: inherit; 926 | font-size: inherit; 927 | font-family: inherit; 928 | line-height: inherit; 929 | } 930 | 931 | .prose pre code::before { 932 | content: ""; 933 | } 934 | 935 | .prose pre code::after { 936 | content: ""; 937 | } 938 | 939 | .prose table { 940 | width: 100%; 941 | table-layout: auto; 942 | text-align: left; 943 | margin-top: 2em; 944 | margin-bottom: 2em; 945 | font-size: 0.875em; 946 | line-height: 1.7142857; 947 | } 948 | 949 | .prose thead { 950 | color: #111827; 951 | font-weight: 600; 952 | border-bottom-width: 1px; 953 | border-bottom-color: #d1d5db; 954 | } 955 | 956 | .prose thead th { 957 | vertical-align: bottom; 958 | padding-right: 0.5714286em; 959 | padding-bottom: 0.5714286em; 960 | padding-left: 0.5714286em; 961 | } 962 | 963 | .prose tbody tr { 964 | border-bottom-width: 1px; 965 | border-bottom-color: #e5e7eb; 966 | } 967 | 968 | .prose tbody tr:last-child { 969 | border-bottom-width: 0; 970 | } 971 | 972 | .prose tbody td { 973 | vertical-align: top; 974 | padding-top: 0.5714286em; 975 | padding-right: 0.5714286em; 976 | padding-bottom: 0.5714286em; 977 | padding-left: 0.5714286em; 978 | } 979 | 980 | .prose { 981 | font-size: 1rem; 982 | line-height: 1.75; 983 | } 984 | 985 | .prose p { 986 | margin-top: 1.25em; 987 | margin-bottom: 1.25em; 988 | } 989 | 990 | .prose img { 991 | margin-top: 2em; 992 | margin-bottom: 2em; 993 | } 994 | 995 | .prose video { 996 | margin-top: 2em; 997 | margin-bottom: 2em; 998 | } 999 | 1000 | .prose figure { 1001 | margin-top: 2em; 1002 | margin-bottom: 2em; 1003 | } 1004 | 1005 | .prose figure > * { 1006 | margin-top: 0; 1007 | margin-bottom: 0; 1008 | } 1009 | 1010 | .prose h2 code { 1011 | font-size: 0.875em; 1012 | } 1013 | 1014 | .prose h3 code { 1015 | font-size: 0.9em; 1016 | } 1017 | 1018 | .prose ul { 1019 | margin-top: 1.25em; 1020 | margin-bottom: 1.25em; 1021 | } 1022 | 1023 | .prose li { 1024 | margin-top: 0.5em; 1025 | margin-bottom: 0.5em; 1026 | } 1027 | 1028 | .prose > ul > li p { 1029 | margin-top: 0.75em; 1030 | margin-bottom: 0.75em; 1031 | } 1032 | 1033 | .prose > ul > li > *:first-child { 1034 | margin-top: 1.25em; 1035 | } 1036 | 1037 | .prose > ul > li > *:last-child { 1038 | margin-bottom: 1.25em; 1039 | } 1040 | 1041 | .prose > ol > li > *:first-child { 1042 | margin-top: 1.25em; 1043 | } 1044 | 1045 | .prose > ol > li > *:last-child { 1046 | margin-bottom: 1.25em; 1047 | } 1048 | 1049 | .prose ul ul, .prose ul ol, .prose ol ul, .prose ol ol { 1050 | margin-top: 0.75em; 1051 | margin-bottom: 0.75em; 1052 | } 1053 | 1054 | .prose hr + * { 1055 | margin-top: 0; 1056 | } 1057 | 1058 | .prose h2 + * { 1059 | margin-top: 0; 1060 | } 1061 | 1062 | .prose h3 + * { 1063 | margin-top: 0; 1064 | } 1065 | 1066 | .prose h4 + * { 1067 | margin-top: 0; 1068 | } 1069 | 1070 | .prose thead th:first-child { 1071 | padding-left: 0; 1072 | } 1073 | 1074 | .prose thead th:last-child { 1075 | padding-right: 0; 1076 | } 1077 | 1078 | .prose tbody td:first-child { 1079 | padding-left: 0; 1080 | } 1081 | 1082 | .prose tbody td:last-child { 1083 | padding-right: 0; 1084 | } 1085 | 1086 | .prose > :first-child { 1087 | margin-top: 0; 1088 | } 1089 | 1090 | .prose > :last-child { 1091 | margin-bottom: 0; 1092 | } 1093 | 1094 | .prose ul.footer-nav ::before { 1095 | display: none; 1096 | text-decoration: none; 1097 | } 1098 | 1099 | .prose-sm { 1100 | font-size: 0.875rem; 1101 | line-height: 1.7142857; 1102 | } 1103 | 1104 | .prose-sm p { 1105 | margin-top: 1.1428571em; 1106 | margin-bottom: 1.1428571em; 1107 | } 1108 | 1109 | .prose-sm [class~="lead"] { 1110 | font-size: 1.2857143em; 1111 | line-height: 1.5555556; 1112 | margin-top: 0.8888889em; 1113 | margin-bottom: 0.8888889em; 1114 | } 1115 | 1116 | .prose-sm blockquote { 1117 | margin-top: 1.3333333em; 1118 | margin-bottom: 1.3333333em; 1119 | padding-left: 1.1111111em; 1120 | } 1121 | 1122 | .prose-sm h1 { 1123 | font-size: 2.1428571em; 1124 | margin-top: 0; 1125 | margin-bottom: 0.8em; 1126 | line-height: 1.2; 1127 | } 1128 | 1129 | .prose-sm h2 { 1130 | font-size: 1.4285714em; 1131 | margin-top: 1.6em; 1132 | margin-bottom: 0.8em; 1133 | line-height: 1.4; 1134 | } 1135 | 1136 | .prose-sm h3 { 1137 | font-size: 1.2857143em; 1138 | margin-top: 1.5555556em; 1139 | margin-bottom: 0.4444444em; 1140 | line-height: 1.5555556; 1141 | } 1142 | 1143 | .prose-sm h4 { 1144 | margin-top: 1.4285714em; 1145 | margin-bottom: 0.5714286em; 1146 | line-height: 1.4285714; 1147 | } 1148 | 1149 | .prose-sm img { 1150 | margin-top: 1.7142857em; 1151 | margin-bottom: 1.7142857em; 1152 | } 1153 | 1154 | .prose-sm video { 1155 | margin-top: 1.7142857em; 1156 | margin-bottom: 1.7142857em; 1157 | } 1158 | 1159 | .prose-sm figure { 1160 | margin-top: 1.7142857em; 1161 | margin-bottom: 1.7142857em; 1162 | } 1163 | 1164 | .prose-sm figure > * { 1165 | margin-top: 0; 1166 | margin-bottom: 0; 1167 | } 1168 | 1169 | .prose-sm figure figcaption { 1170 | font-size: 0.8571429em; 1171 | line-height: 1.3333333; 1172 | margin-top: 0.6666667em; 1173 | } 1174 | 1175 | .prose-sm code { 1176 | font-size: 0.8571429em; 1177 | } 1178 | 1179 | .prose-sm h2 code { 1180 | font-size: 0.9em; 1181 | } 1182 | 1183 | .prose-sm h3 code { 1184 | font-size: 0.8888889em; 1185 | } 1186 | 1187 | .prose-sm pre { 1188 | font-size: 0.8571429em; 1189 | line-height: 1.6666667; 1190 | margin-top: 1.6666667em; 1191 | margin-bottom: 1.6666667em; 1192 | border-radius: 0.25rem; 1193 | padding-top: 0.6666667em; 1194 | padding-right: 1em; 1195 | padding-bottom: 0.6666667em; 1196 | padding-left: 1em; 1197 | } 1198 | 1199 | .prose-sm ol { 1200 | margin-top: 1.1428571em; 1201 | margin-bottom: 1.1428571em; 1202 | } 1203 | 1204 | .prose-sm ul { 1205 | margin-top: 1.1428571em; 1206 | margin-bottom: 1.1428571em; 1207 | } 1208 | 1209 | .prose-sm li { 1210 | margin-top: 0.2857143em; 1211 | margin-bottom: 0.2857143em; 1212 | } 1213 | 1214 | .prose-sm ol > li { 1215 | padding-left: 1.5714286em; 1216 | } 1217 | 1218 | .prose-sm ol > li::before { 1219 | left: 0; 1220 | } 1221 | 1222 | .prose-sm ul > li { 1223 | padding-left: 1.5714286em; 1224 | } 1225 | 1226 | .prose-sm ul > li::before { 1227 | height: 0.3571429em; 1228 | width: 0.3571429em; 1229 | top: calc(0.8571429em - 0.1785714em); 1230 | left: 0.2142857em; 1231 | } 1232 | 1233 | .prose-sm > ul > li p { 1234 | margin-top: 0.5714286em; 1235 | margin-bottom: 0.5714286em; 1236 | } 1237 | 1238 | .prose-sm > ul > li > *:first-child { 1239 | margin-top: 1.1428571em; 1240 | } 1241 | 1242 | .prose-sm > ul > li > *:last-child { 1243 | margin-bottom: 1.1428571em; 1244 | } 1245 | 1246 | .prose-sm > ol > li > *:first-child { 1247 | margin-top: 1.1428571em; 1248 | } 1249 | 1250 | .prose-sm > ol > li > *:last-child { 1251 | margin-bottom: 1.1428571em; 1252 | } 1253 | 1254 | .prose-sm ul ul, .prose-sm ul ol, .prose-sm ol ul, .prose-sm ol ol { 1255 | margin-top: 0.5714286em; 1256 | margin-bottom: 0.5714286em; 1257 | } 1258 | 1259 | .prose-sm hr { 1260 | margin-top: 2.8571429em; 1261 | margin-bottom: 2.8571429em; 1262 | } 1263 | 1264 | .prose-sm hr + * { 1265 | margin-top: 0; 1266 | } 1267 | 1268 | .prose-sm h2 + * { 1269 | margin-top: 0; 1270 | } 1271 | 1272 | .prose-sm h3 + * { 1273 | margin-top: 0; 1274 | } 1275 | 1276 | .prose-sm h4 + * { 1277 | margin-top: 0; 1278 | } 1279 | 1280 | .prose-sm table { 1281 | font-size: 0.8571429em; 1282 | line-height: 1.5; 1283 | } 1284 | 1285 | .prose-sm thead th { 1286 | padding-right: 1em; 1287 | padding-bottom: 0.6666667em; 1288 | padding-left: 1em; 1289 | } 1290 | 1291 | .prose-sm thead th:first-child { 1292 | padding-left: 0; 1293 | } 1294 | 1295 | .prose-sm thead th:last-child { 1296 | padding-right: 0; 1297 | } 1298 | 1299 | .prose-sm tbody td { 1300 | padding-top: 0.6666667em; 1301 | padding-right: 1em; 1302 | padding-bottom: 0.6666667em; 1303 | padding-left: 1em; 1304 | } 1305 | 1306 | .prose-sm tbody td:first-child { 1307 | padding-left: 0; 1308 | } 1309 | 1310 | .prose-sm tbody td:last-child { 1311 | padding-right: 0; 1312 | } 1313 | 1314 | .prose-sm > :first-child { 1315 | margin-top: 0; 1316 | } 1317 | 1318 | .prose-sm > :last-child { 1319 | margin-bottom: 0; 1320 | } 1321 | 1322 | .visible { 1323 | visibility: visible !important; 1324 | } 1325 | 1326 | .fixed { 1327 | position: fixed !important; 1328 | } 1329 | 1330 | .absolute { 1331 | position: absolute !important; 1332 | } 1333 | 1334 | .relative { 1335 | position: relative !important; 1336 | } 1337 | 1338 | .sticky { 1339 | position: sticky !important; 1340 | } 1341 | 1342 | .inset-y-0 { 1343 | top: 0px !important; 1344 | bottom: 0px !important; 1345 | } 1346 | 1347 | .top-0 { 1348 | top: 0px !important; 1349 | } 1350 | 1351 | .right-0 { 1352 | right: 0px !important; 1353 | } 1354 | 1355 | .left-0 { 1356 | left: 0px !important; 1357 | } 1358 | 1359 | .z-10 { 1360 | z-index: 10 !important; 1361 | } 1362 | 1363 | .z-20 { 1364 | z-index: 20 !important; 1365 | } 1366 | 1367 | .z-50 { 1368 | z-index: 50 !important; 1369 | } 1370 | 1371 | .float-right { 1372 | float: right !important; 1373 | } 1374 | 1375 | .clear-right { 1376 | clear: right !important; 1377 | } 1378 | 1379 | .m-0 { 1380 | margin: 0px !important; 1381 | } 1382 | 1383 | .mx-auto { 1384 | margin-left: auto !important; 1385 | margin-right: auto !important; 1386 | } 1387 | 1388 | .mt-1 { 1389 | margin-top: 0.25rem !important; 1390 | } 1391 | 1392 | .mt-4 { 1393 | margin-top: 1rem !important; 1394 | } 1395 | 1396 | .mt-8 { 1397 | margin-top: 2rem !important; 1398 | } 1399 | 1400 | .mt-12 { 1401 | margin-top: 3rem !important; 1402 | } 1403 | 1404 | .mt-20 { 1405 | margin-top: 5rem !important; 1406 | } 1407 | 1408 | .-mt-0 { 1409 | margin-top: 0px !important; 1410 | } 1411 | 1412 | .mr-1 { 1413 | margin-right: 0.25rem !important; 1414 | } 1415 | 1416 | .mr-2 { 1417 | margin-right: 0.5rem !important; 1418 | } 1419 | 1420 | .mr-3 { 1421 | margin-right: 0.75rem !important; 1422 | } 1423 | 1424 | .-mr-4 { 1425 | margin-right: -1rem !important; 1426 | } 1427 | 1428 | .mb-2 { 1429 | margin-bottom: 0.5rem !important; 1430 | } 1431 | 1432 | .mb-4 { 1433 | margin-bottom: 1rem !important; 1434 | } 1435 | 1436 | .mb-6 { 1437 | margin-bottom: 1.5rem !important; 1438 | } 1439 | 1440 | .mb-8 { 1441 | margin-bottom: 2rem !important; 1442 | } 1443 | 1444 | .ml-0 { 1445 | margin-left: 0px !important; 1446 | } 1447 | 1448 | .ml-2 { 1449 | margin-left: 0.5rem !important; 1450 | } 1451 | 1452 | .block { 1453 | display: block !important; 1454 | } 1455 | 1456 | .inline-block { 1457 | display: inline-block !important; 1458 | } 1459 | 1460 | .flex { 1461 | display: flex !important; 1462 | } 1463 | 1464 | .table { 1465 | display: table !important; 1466 | } 1467 | 1468 | .hidden { 1469 | display: none !important; 1470 | } 1471 | 1472 | .h-6 { 1473 | height: 1.5rem !important; 1474 | } 1475 | 1476 | .h-12 { 1477 | height: 3rem !important; 1478 | } 1479 | 1480 | .h-16 { 1481 | height: 4rem !important; 1482 | } 1483 | 1484 | .h-screen { 1485 | height: 100vh !important; 1486 | } 1487 | 1488 | .w-6 { 1489 | width: 1.5rem !important; 1490 | } 1491 | 1492 | .w-60 { 1493 | width: 15rem !important; 1494 | } 1495 | 1496 | .w-64 { 1497 | width: 16rem !important; 1498 | } 1499 | 1500 | .w-auto { 1501 | width: auto !important; 1502 | } 1503 | 1504 | .w-full { 1505 | width: 100% !important; 1506 | } 1507 | 1508 | .max-w-5xl { 1509 | max-width: 64rem !important; 1510 | } 1511 | 1512 | .flex-none { 1513 | flex: none !important; 1514 | } 1515 | 1516 | .flex-grow { 1517 | flex-grow: 1 !important; 1518 | } 1519 | 1520 | .transform { 1521 | --tw-translate-x: 0 !important; 1522 | --tw-translate-y: 0 !important; 1523 | --tw-rotate: 0 !important; 1524 | --tw-skew-x: 0 !important; 1525 | --tw-skew-y: 0 !important; 1526 | --tw-scale-x: 1 !important; 1527 | --tw-scale-y: 1 !important; 1528 | 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)) !important; 1529 | } 1530 | 1531 | @-webkit-keyframes spin { 1532 | to { 1533 | transform: rotate(360deg); 1534 | } 1535 | } 1536 | 1537 | @keyframes spin { 1538 | to { 1539 | transform: rotate(360deg); 1540 | } 1541 | } 1542 | 1543 | @-webkit-keyframes ping { 1544 | 75%, 100% { 1545 | transform: scale(2); 1546 | opacity: 0; 1547 | } 1548 | } 1549 | 1550 | @keyframes ping { 1551 | 75%, 100% { 1552 | transform: scale(2); 1553 | opacity: 0; 1554 | } 1555 | } 1556 | 1557 | @-webkit-keyframes pulse { 1558 | 50% { 1559 | opacity: .5; 1560 | } 1561 | } 1562 | 1563 | @keyframes pulse { 1564 | 50% { 1565 | opacity: .5; 1566 | } 1567 | } 1568 | 1569 | @-webkit-keyframes bounce { 1570 | 0%, 100% { 1571 | transform: translateY(-25%); 1572 | -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); 1573 | animation-timing-function: cubic-bezier(0.8,0,1,1); 1574 | } 1575 | 1576 | 50% { 1577 | transform: none; 1578 | -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); 1579 | animation-timing-function: cubic-bezier(0,0,0.2,1); 1580 | } 1581 | } 1582 | 1583 | @keyframes bounce { 1584 | 0%, 100% { 1585 | transform: translateY(-25%); 1586 | -webkit-animation-timing-function: cubic-bezier(0.8,0,1,1); 1587 | animation-timing-function: cubic-bezier(0.8,0,1,1); 1588 | } 1589 | 1590 | 50% { 1591 | transform: none; 1592 | -webkit-animation-timing-function: cubic-bezier(0,0,0.2,1); 1593 | animation-timing-function: cubic-bezier(0,0,0.2,1); 1594 | } 1595 | } 1596 | 1597 | .cursor-pointer { 1598 | cursor: pointer !important; 1599 | } 1600 | 1601 | .list-none { 1602 | list-style-type: none !important; 1603 | } 1604 | 1605 | .appearance-none { 1606 | -webkit-appearance: none !important; 1607 | -moz-appearance: none !important; 1608 | appearance: none !important; 1609 | } 1610 | 1611 | .flex-row-reverse { 1612 | flex-direction: row-reverse !important; 1613 | } 1614 | 1615 | .flex-col { 1616 | flex-direction: column !important; 1617 | } 1618 | 1619 | .flex-wrap { 1620 | flex-wrap: wrap !important; 1621 | } 1622 | 1623 | .items-center { 1624 | align-items: center !important; 1625 | } 1626 | 1627 | .justify-end { 1628 | justify-content: flex-end !important; 1629 | } 1630 | 1631 | .justify-center { 1632 | justify-content: center !important; 1633 | } 1634 | 1635 | .justify-between { 1636 | justify-content: space-between !important; 1637 | } 1638 | 1639 | .space-y-4 > :not([hidden]) ~ :not([hidden]) { 1640 | --tw-space-y-reverse: 0 !important; 1641 | margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))) !important; 1642 | margin-bottom: calc(1rem * var(--tw-space-y-reverse)) !important; 1643 | } 1644 | 1645 | .divide-y > :not([hidden]) ~ :not([hidden]) { 1646 | --tw-divide-y-reverse: 0 !important; 1647 | border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))) !important; 1648 | border-bottom-width: calc(1px * var(--tw-divide-y-reverse)) !important; 1649 | } 1650 | 1651 | .divide-gray-300 > :not([hidden]) ~ :not([hidden]) { 1652 | --tw-divide-opacity: 1 !important; 1653 | border-color: rgba(209, 213, 219, var(--tw-divide-opacity)) !important; 1654 | } 1655 | 1656 | .self-center { 1657 | align-self: center !important; 1658 | } 1659 | 1660 | .overflow-y-auto { 1661 | overflow-y: auto !important; 1662 | } 1663 | 1664 | .overflow-x-hidden { 1665 | overflow-x: hidden !important; 1666 | } 1667 | 1668 | .rounded { 1669 | border-radius: 0.25rem !important; 1670 | } 1671 | 1672 | .border { 1673 | border-width: 1px !important; 1674 | } 1675 | 1676 | .border-t { 1677 | border-top-width: 1px !important; 1678 | } 1679 | 1680 | .border-r { 1681 | border-right-width: 1px !important; 1682 | } 1683 | 1684 | .border-b { 1685 | border-bottom-width: 1px !important; 1686 | } 1687 | 1688 | .border-l { 1689 | border-left-width: 1px !important; 1690 | } 1691 | 1692 | .border-gray-100 { 1693 | --tw-border-opacity: 1 !important; 1694 | border-color: rgba(243, 244, 246, var(--tw-border-opacity)) !important; 1695 | } 1696 | 1697 | .border-gray-200 { 1698 | --tw-border-opacity: 1 !important; 1699 | border-color: rgba(229, 231, 235, var(--tw-border-opacity)) !important; 1700 | } 1701 | 1702 | .border-gray-800 { 1703 | --tw-border-opacity: 1 !important; 1704 | border-color: rgba(31, 41, 55, var(--tw-border-opacity)) !important; 1705 | } 1706 | 1707 | .dark .dark\:border-gray-700 { 1708 | --tw-border-opacity: 1 !important; 1709 | border-color: rgba(55, 65, 81, var(--tw-border-opacity)) !important; 1710 | } 1711 | 1712 | .dark .dark\:border-gray-800 { 1713 | --tw-border-opacity: 1 !important; 1714 | border-color: rgba(31, 41, 55, var(--tw-border-opacity)) !important; 1715 | } 1716 | 1717 | .bg-white { 1718 | --tw-bg-opacity: 1 !important; 1719 | background-color: rgba(255, 255, 255, var(--tw-bg-opacity)) !important; 1720 | } 1721 | 1722 | .bg-gray-50 { 1723 | --tw-bg-opacity: 1 !important; 1724 | background-color: rgba(249, 250, 251, var(--tw-bg-opacity)) !important; 1725 | } 1726 | 1727 | .bg-gray-100 { 1728 | --tw-bg-opacity: 1 !important; 1729 | background-color: rgba(243, 244, 246, var(--tw-bg-opacity)) !important; 1730 | } 1731 | 1732 | .bg-green-600 { 1733 | --tw-bg-opacity: 1 !important; 1734 | background-color: rgba(5, 150, 105, var(--tw-bg-opacity)) !important; 1735 | } 1736 | 1737 | .hover\:bg-gray-200:hover { 1738 | --tw-bg-opacity: 1 !important; 1739 | background-color: rgba(229, 231, 235, var(--tw-bg-opacity)) !important; 1740 | } 1741 | 1742 | .hover\:bg-blue-600:hover { 1743 | --tw-bg-opacity: 1 !important; 1744 | background-color: rgba(37, 99, 235, var(--tw-bg-opacity)) !important; 1745 | } 1746 | 1747 | .dark .dark\:bg-gray-200 { 1748 | --tw-bg-opacity: 1 !important; 1749 | background-color: rgba(229, 231, 235, var(--tw-bg-opacity)) !important; 1750 | } 1751 | 1752 | .dark .dark\:bg-gray-500 { 1753 | --tw-bg-opacity: 1 !important; 1754 | background-color: rgba(107, 114, 128, var(--tw-bg-opacity)) !important; 1755 | } 1756 | 1757 | .dark .dark\:bg-gray-700 { 1758 | --tw-bg-opacity: 1 !important; 1759 | background-color: rgba(55, 65, 81, var(--tw-bg-opacity)) !important; 1760 | } 1761 | 1762 | .dark .dark\:bg-gray-800 { 1763 | --tw-bg-opacity: 1 !important; 1764 | background-color: rgba(31, 41, 55, var(--tw-bg-opacity)) !important; 1765 | } 1766 | 1767 | .dark .dark\:bg-gray-900 { 1768 | --tw-bg-opacity: 1 !important; 1769 | background-color: rgba(17, 24, 39, var(--tw-bg-opacity)) !important; 1770 | } 1771 | 1772 | .p-0 { 1773 | padding: 0px !important; 1774 | } 1775 | 1776 | .p-2 { 1777 | padding: 0.5rem !important; 1778 | } 1779 | 1780 | .p-4 { 1781 | padding: 1rem !important; 1782 | } 1783 | 1784 | .p-6 { 1785 | padding: 1.5rem !important; 1786 | } 1787 | 1788 | .p-8 { 1789 | padding: 2rem !important; 1790 | } 1791 | 1792 | .px-0 { 1793 | padding-left: 0px !important; 1794 | padding-right: 0px !important; 1795 | } 1796 | 1797 | .px-2 { 1798 | padding-left: 0.5rem !important; 1799 | padding-right: 0.5rem !important; 1800 | } 1801 | 1802 | .px-3 { 1803 | padding-left: 0.75rem !important; 1804 | padding-right: 0.75rem !important; 1805 | } 1806 | 1807 | .px-6 { 1808 | padding-left: 1.5rem !important; 1809 | padding-right: 1.5rem !important; 1810 | } 1811 | 1812 | .py-2 { 1813 | padding-top: 0.5rem !important; 1814 | padding-bottom: 0.5rem !important; 1815 | } 1816 | 1817 | .pt-0 { 1818 | padding-top: 0px !important; 1819 | } 1820 | 1821 | .pt-1 { 1822 | padding-top: 0.25rem !important; 1823 | } 1824 | 1825 | .pt-4 { 1826 | padding-top: 1rem !important; 1827 | } 1828 | 1829 | .pt-16 { 1830 | padding-top: 4rem !important; 1831 | } 1832 | 1833 | .pt-32 { 1834 | padding-top: 8rem !important; 1835 | } 1836 | 1837 | .pr-0 { 1838 | padding-right: 0px !important; 1839 | } 1840 | 1841 | .pr-4 { 1842 | padding-right: 1rem !important; 1843 | } 1844 | 1845 | .pb-1 { 1846 | padding-bottom: 0.25rem !important; 1847 | } 1848 | 1849 | .pl-0 { 1850 | padding-left: 0px !important; 1851 | } 1852 | 1853 | .pl-3 { 1854 | padding-left: 0.75rem !important; 1855 | } 1856 | 1857 | .pl-4 { 1858 | padding-left: 1rem !important; 1859 | } 1860 | 1861 | .text-xs { 1862 | font-size: 0.75rem !important; 1863 | line-height: 1rem !important; 1864 | } 1865 | 1866 | .text-sm { 1867 | font-size: 0.875rem !important; 1868 | line-height: 1.25rem !important; 1869 | } 1870 | 1871 | .text-lg { 1872 | font-size: 1.125rem !important; 1873 | line-height: 1.75rem !important; 1874 | } 1875 | 1876 | .text-xl { 1877 | font-size: 1.25rem !important; 1878 | line-height: 1.75rem !important; 1879 | } 1880 | 1881 | .font-normal { 1882 | font-weight: 400 !important; 1883 | } 1884 | 1885 | .font-semibold { 1886 | font-weight: 600 !important; 1887 | } 1888 | 1889 | .font-bold { 1890 | font-weight: 700 !important; 1891 | } 1892 | 1893 | .uppercase { 1894 | text-transform: uppercase !important; 1895 | } 1896 | 1897 | .leading-tight { 1898 | line-height: 1.25 !important; 1899 | } 1900 | 1901 | .tracking-wide { 1902 | letter-spacing: 0.025em !important; 1903 | } 1904 | 1905 | .text-current { 1906 | color: currentColor !important; 1907 | } 1908 | 1909 | .text-white { 1910 | --tw-text-opacity: 1 !important; 1911 | color: rgba(255, 255, 255, var(--tw-text-opacity)) !important; 1912 | } 1913 | 1914 | .text-gray-100 { 1915 | --tw-text-opacity: 1 !important; 1916 | color: rgba(243, 244, 246, var(--tw-text-opacity)) !important; 1917 | } 1918 | 1919 | .text-gray-400 { 1920 | --tw-text-opacity: 1 !important; 1921 | color: rgba(156, 163, 175, var(--tw-text-opacity)) !important; 1922 | } 1923 | 1924 | .text-gray-500 { 1925 | --tw-text-opacity: 1 !important; 1926 | color: rgba(107, 114, 128, var(--tw-text-opacity)) !important; 1927 | } 1928 | 1929 | .text-gray-600 { 1930 | --tw-text-opacity: 1 !important; 1931 | color: rgba(75, 85, 99, var(--tw-text-opacity)) !important; 1932 | } 1933 | 1934 | .hover\:text-gray-600:hover { 1935 | --tw-text-opacity: 1 !important; 1936 | color: rgba(75, 85, 99, var(--tw-text-opacity)) !important; 1937 | } 1938 | 1939 | .hover\:text-gray-800:hover { 1940 | --tw-text-opacity: 1 !important; 1941 | color: rgba(31, 41, 55, var(--tw-text-opacity)) !important; 1942 | } 1943 | 1944 | .hover\:text-yellow-400:hover { 1945 | --tw-text-opacity: 1 !important; 1946 | color: rgba(251, 191, 36, var(--tw-text-opacity)) !important; 1947 | } 1948 | 1949 | .dark .dark\:text-gray-400 { 1950 | --tw-text-opacity: 1 !important; 1951 | color: rgba(156, 163, 175, var(--tw-text-opacity)) !important; 1952 | } 1953 | 1954 | .dark .dark\:text-gray-500 { 1955 | --tw-text-opacity: 1 !important; 1956 | color: rgba(107, 114, 128, var(--tw-text-opacity)) !important; 1957 | } 1958 | 1959 | .dark .dark\:text-gray-600 { 1960 | --tw-text-opacity: 1 !important; 1961 | color: rgba(75, 85, 99, var(--tw-text-opacity)) !important; 1962 | } 1963 | 1964 | .dark .dark\:text-yellow-400 { 1965 | --tw-text-opacity: 1 !important; 1966 | color: rgba(251, 191, 36, var(--tw-text-opacity)) !important; 1967 | } 1968 | 1969 | .no-underline { 1970 | text-decoration: none !important; 1971 | } 1972 | 1973 | .placeholder-gray-300::-moz-placeholder { 1974 | --tw-placeholder-opacity: 1 !important; 1975 | color: rgba(209, 213, 219, var(--tw-placeholder-opacity)) !important; 1976 | } 1977 | 1978 | .placeholder-gray-300:-ms-input-placeholder { 1979 | --tw-placeholder-opacity: 1 !important; 1980 | color: rgba(209, 213, 219, var(--tw-placeholder-opacity)) !important; 1981 | } 1982 | 1983 | .placeholder-gray-300::placeholder { 1984 | --tw-placeholder-opacity: 1 !important; 1985 | color: rgba(209, 213, 219, var(--tw-placeholder-opacity)) !important; 1986 | } 1987 | 1988 | *, ::before, ::after { 1989 | --tw-shadow: 0 0 #0000; 1990 | } 1991 | 1992 | .shadow-md { 1993 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !important; 1994 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; 1995 | } 1996 | 1997 | .shadow-lg { 1998 | --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05) !important; 1999 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow) !important; 2000 | } 2001 | 2002 | *, ::before, ::after { 2003 | --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); 2004 | --tw-ring-offset-width: 0px; 2005 | --tw-ring-offset-color: #fff; 2006 | --tw-ring-color: rgba(59, 130, 246, 0.5); 2007 | --tw-ring-offset-shadow: 0 0 #0000; 2008 | --tw-ring-shadow: 0 0 #0000; 2009 | } 2010 | 2011 | .focus\:ring-4:focus { 2012 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important; 2013 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important; 2014 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000) !important; 2015 | } 2016 | 2017 | .focus\:ring-blue-200:focus { 2018 | --tw-ring-opacity: 1 !important; 2019 | --tw-ring-color: rgba(191, 219, 254, var(--tw-ring-opacity)) !important; 2020 | } 2021 | 2022 | .dark .dark\:focus\:ring-gray-700:focus { 2023 | --tw-ring-opacity: 1 !important; 2024 | --tw-ring-color: rgba(55, 65, 81, var(--tw-ring-opacity)) !important; 2025 | } 2026 | 2027 | .ring-opacity-50 { 2028 | --tw-ring-opacity: 0.5 !important; 2029 | } 2030 | 2031 | .transition-colors { 2032 | transition-property: background-color, border-color, color, fill, stroke !important; 2033 | transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important; 2034 | transition-duration: 150ms !important; 2035 | } 2036 | 2037 | .duration-200 { 2038 | transition-duration: 200ms !important; 2039 | } 2040 | 2041 | @media (min-width: 640px) { 2042 | .sm\:prose { 2043 | color: #374151; 2044 | max-width: 100%; 2045 | } 2046 | 2047 | .sm\:prose [class~="lead"] { 2048 | color: #4b5563; 2049 | font-size: 1.25em; 2050 | line-height: 1.6; 2051 | margin-top: 1.2em; 2052 | margin-bottom: 1.2em; 2053 | } 2054 | 2055 | .sm\:prose a { 2056 | color: #1D4ED8; 2057 | text-decoration: underline; 2058 | font-weight: 500; 2059 | } 2060 | 2061 | .sm\:prose a:hover { 2062 | color: #1E3A8A; 2063 | } 2064 | 2065 | .sm\:prose strong { 2066 | color: #111827; 2067 | font-weight: 600; 2068 | } 2069 | 2070 | .sm\:prose ol { 2071 | counter-reset: list-counter; 2072 | margin-top: 1.25em; 2073 | margin-bottom: 1.25em; 2074 | } 2075 | 2076 | .sm\:prose ol > li { 2077 | position: relative; 2078 | counter-increment: list-counter; 2079 | padding-left: 1.75em; 2080 | } 2081 | 2082 | .sm\:prose ol > li::before { 2083 | content: counter(list-counter) "."; 2084 | position: absolute; 2085 | font-weight: 400; 2086 | color: #6b7280; 2087 | left: 0; 2088 | } 2089 | 2090 | .sm\:prose ul > li { 2091 | position: relative; 2092 | padding-left: 1.75em; 2093 | } 2094 | 2095 | .sm\:prose ul > li::before { 2096 | content: ""; 2097 | position: absolute; 2098 | background-color: #d1d5db; 2099 | border-radius: 50%; 2100 | width: 0.375em; 2101 | height: 0.375em; 2102 | top: calc(0.875em - 0.1875em); 2103 | left: 0.25em; 2104 | } 2105 | 2106 | .sm\:prose hr { 2107 | border-color: #e5e7eb; 2108 | border-top-width: 1px; 2109 | margin-top: 3em; 2110 | margin-bottom: 3em; 2111 | } 2112 | 2113 | .sm\:prose blockquote { 2114 | font-weight: 500; 2115 | font-style: italic; 2116 | color: #111827; 2117 | border-left-width: 0.25rem; 2118 | border-left-color: #e5e7eb; 2119 | quotes: "\201C""\201D""\2018""\2019"; 2120 | margin-top: 1.6em; 2121 | margin-bottom: 1.6em; 2122 | padding-left: 1em; 2123 | } 2124 | 2125 | .sm\:prose blockquote p:first-of-type::before { 2126 | content: open-quote; 2127 | } 2128 | 2129 | .sm\:prose blockquote p:last-of-type::after { 2130 | content: close-quote; 2131 | } 2132 | 2133 | .sm\:prose h1 { 2134 | color: #111827; 2135 | font-weight: 800; 2136 | font-size: 2.25em; 2137 | margin-top: 0; 2138 | margin-bottom: 0.8888889em; 2139 | line-height: 1.1111111; 2140 | } 2141 | 2142 | .sm\:prose h2 { 2143 | color: #111827; 2144 | font-weight: 700; 2145 | font-size: 1.5em; 2146 | margin-top: 2em; 2147 | margin-bottom: 1em; 2148 | line-height: 1.3333333; 2149 | } 2150 | 2151 | .sm\:prose h3 { 2152 | color: #111827; 2153 | font-weight: 600; 2154 | font-size: 1.25em; 2155 | margin-top: 1.6em; 2156 | margin-bottom: 0.6em; 2157 | line-height: 1.6; 2158 | } 2159 | 2160 | .sm\:prose h4 { 2161 | color: #111827; 2162 | font-weight: 600; 2163 | margin-top: 1.5em; 2164 | margin-bottom: 0.5em; 2165 | line-height: 1.5; 2166 | } 2167 | 2168 | .sm\:prose figure figcaption { 2169 | color: #6b7280; 2170 | font-size: 0.875em; 2171 | line-height: 1.4285714; 2172 | margin-top: 0.8571429em; 2173 | } 2174 | 2175 | .sm\:prose code { 2176 | color: #111827; 2177 | font-weight: 600; 2178 | font-size: 0.875em; 2179 | } 2180 | 2181 | .sm\:prose code::before { 2182 | content: "`"; 2183 | } 2184 | 2185 | .sm\:prose code::after { 2186 | content: "`"; 2187 | } 2188 | 2189 | .sm\:prose a code { 2190 | color: #111827; 2191 | } 2192 | 2193 | .sm\:prose pre { 2194 | color: #e5e7eb; 2195 | background-color: #1f2937; 2196 | overflow-x: auto; 2197 | font-size: 0.875em; 2198 | line-height: 1.7142857; 2199 | margin-top: 1.7142857em; 2200 | margin-bottom: 1.7142857em; 2201 | border-radius: 0.375rem; 2202 | padding-top: 0.8571429em; 2203 | padding-right: 1.1428571em; 2204 | padding-bottom: 0.8571429em; 2205 | padding-left: 1.1428571em; 2206 | } 2207 | 2208 | .sm\:prose pre code { 2209 | background-color: transparent; 2210 | border-width: 0; 2211 | border-radius: 0; 2212 | padding: 0; 2213 | font-weight: 400; 2214 | color: inherit; 2215 | font-size: inherit; 2216 | font-family: inherit; 2217 | line-height: inherit; 2218 | } 2219 | 2220 | .sm\:prose pre code::before { 2221 | content: ""; 2222 | } 2223 | 2224 | .sm\:prose pre code::after { 2225 | content: ""; 2226 | } 2227 | 2228 | .sm\:prose table { 2229 | width: 100%; 2230 | table-layout: auto; 2231 | text-align: left; 2232 | margin-top: 2em; 2233 | margin-bottom: 2em; 2234 | font-size: 0.875em; 2235 | line-height: 1.7142857; 2236 | } 2237 | 2238 | .sm\:prose thead { 2239 | color: #111827; 2240 | font-weight: 600; 2241 | border-bottom-width: 1px; 2242 | border-bottom-color: #d1d5db; 2243 | } 2244 | 2245 | .sm\:prose thead th { 2246 | vertical-align: bottom; 2247 | padding-right: 0.5714286em; 2248 | padding-bottom: 0.5714286em; 2249 | padding-left: 0.5714286em; 2250 | } 2251 | 2252 | .sm\:prose tbody tr { 2253 | border-bottom-width: 1px; 2254 | border-bottom-color: #e5e7eb; 2255 | } 2256 | 2257 | .sm\:prose tbody tr:last-child { 2258 | border-bottom-width: 0; 2259 | } 2260 | 2261 | .sm\:prose tbody td { 2262 | vertical-align: top; 2263 | padding-top: 0.5714286em; 2264 | padding-right: 0.5714286em; 2265 | padding-bottom: 0.5714286em; 2266 | padding-left: 0.5714286em; 2267 | } 2268 | 2269 | .sm\:prose { 2270 | font-size: 1rem; 2271 | line-height: 1.75; 2272 | } 2273 | 2274 | .sm\:prose p { 2275 | margin-top: 1.25em; 2276 | margin-bottom: 1.25em; 2277 | } 2278 | 2279 | .sm\:prose img { 2280 | margin-top: 2em; 2281 | margin-bottom: 2em; 2282 | } 2283 | 2284 | .sm\:prose video { 2285 | margin-top: 2em; 2286 | margin-bottom: 2em; 2287 | } 2288 | 2289 | .sm\:prose figure { 2290 | margin-top: 2em; 2291 | margin-bottom: 2em; 2292 | } 2293 | 2294 | .sm\:prose figure > * { 2295 | margin-top: 0; 2296 | margin-bottom: 0; 2297 | } 2298 | 2299 | .sm\:prose h2 code { 2300 | font-size: 0.875em; 2301 | } 2302 | 2303 | .sm\:prose h3 code { 2304 | font-size: 0.9em; 2305 | } 2306 | 2307 | .sm\:prose ul { 2308 | margin-top: 1.25em; 2309 | margin-bottom: 1.25em; 2310 | } 2311 | 2312 | .sm\:prose li { 2313 | margin-top: 0.5em; 2314 | margin-bottom: 0.5em; 2315 | } 2316 | 2317 | .sm\:prose > ul > li p { 2318 | margin-top: 0.75em; 2319 | margin-bottom: 0.75em; 2320 | } 2321 | 2322 | .sm\:prose > ul > li > *:first-child { 2323 | margin-top: 1.25em; 2324 | } 2325 | 2326 | .sm\:prose > ul > li > *:last-child { 2327 | margin-bottom: 1.25em; 2328 | } 2329 | 2330 | .sm\:prose > ol > li > *:first-child { 2331 | margin-top: 1.25em; 2332 | } 2333 | 2334 | .sm\:prose > ol > li > *:last-child { 2335 | margin-bottom: 1.25em; 2336 | } 2337 | 2338 | .sm\:prose ul ul, .sm\:prose ul ol, .sm\:prose ol ul, .sm\:prose ol ol { 2339 | margin-top: 0.75em; 2340 | margin-bottom: 0.75em; 2341 | } 2342 | 2343 | .sm\:prose hr + * { 2344 | margin-top: 0; 2345 | } 2346 | 2347 | .sm\:prose h2 + * { 2348 | margin-top: 0; 2349 | } 2350 | 2351 | .sm\:prose h3 + * { 2352 | margin-top: 0; 2353 | } 2354 | 2355 | .sm\:prose h4 + * { 2356 | margin-top: 0; 2357 | } 2358 | 2359 | .sm\:prose thead th:first-child { 2360 | padding-left: 0; 2361 | } 2362 | 2363 | .sm\:prose thead th:last-child { 2364 | padding-right: 0; 2365 | } 2366 | 2367 | .sm\:prose tbody td:first-child { 2368 | padding-left: 0; 2369 | } 2370 | 2371 | .sm\:prose tbody td:last-child { 2372 | padding-right: 0; 2373 | } 2374 | 2375 | .sm\:prose > :first-child { 2376 | margin-top: 0; 2377 | } 2378 | 2379 | .sm\:prose > :last-child { 2380 | margin-bottom: 0; 2381 | } 2382 | 2383 | .sm\:text-xs { 2384 | font-size: 0.75rem !important; 2385 | line-height: 1rem !important; 2386 | } 2387 | } 2388 | 2389 | @media (min-width: 768px) { 2390 | .md\:right-0 { 2391 | right: 0px !important; 2392 | } 2393 | 2394 | .md\:mx-auto { 2395 | margin-left: auto !important; 2396 | margin-right: auto !important; 2397 | } 2398 | 2399 | .md\:mr-2 { 2400 | margin-right: 0.5rem !important; 2401 | } 2402 | 2403 | .md\:ml-2 { 2404 | margin-left: 0.5rem !important; 2405 | } 2406 | 2407 | .md\:block { 2408 | display: block !important; 2409 | } 2410 | 2411 | .md\:flex { 2412 | display: flex !important; 2413 | } 2414 | 2415 | .md\:hidden { 2416 | display: none !important; 2417 | } 2418 | 2419 | .md\:h-20 { 2420 | height: 5rem !important; 2421 | } 2422 | 2423 | .md\:w-64 { 2424 | width: 16rem !important; 2425 | } 2426 | 2427 | .md\:w-1\/2 { 2428 | width: 50% !important; 2429 | } 2430 | 2431 | .md\:w-full { 2432 | width: 100% !important; 2433 | } 2434 | 2435 | .md\:max-w-lg { 2436 | max-width: 32rem !important; 2437 | } 2438 | 2439 | .md\:flex-wrap { 2440 | flex-wrap: wrap !important; 2441 | } 2442 | 2443 | .md\:justify-between { 2444 | justify-content: space-between !important; 2445 | } 2446 | 2447 | .md\:border-r { 2448 | border-right-width: 1px !important; 2449 | } 2450 | 2451 | .md\:px-6 { 2452 | padding-left: 1.5rem !important; 2453 | padding-right: 1.5rem !important; 2454 | } 2455 | 2456 | .md\:pt-20 { 2457 | padding-top: 5rem !important; 2458 | } 2459 | 2460 | .md\:pl-64 { 2461 | padding-left: 16rem !important; 2462 | } 2463 | 2464 | .md\:text-sm { 2465 | font-size: 0.875rem !important; 2466 | line-height: 1.25rem !important; 2467 | } 2468 | } 2469 | 2470 | @media (min-width: 1024px) { 2471 | .lg\:prose-lg { 2472 | font-size: 1.125rem; 2473 | line-height: 1.7777778; 2474 | } 2475 | 2476 | .lg\:prose-lg p { 2477 | margin-top: 1.3333333em; 2478 | margin-bottom: 1.3333333em; 2479 | } 2480 | 2481 | .lg\:prose-lg [class~="lead"] { 2482 | font-size: 1.2222222em; 2483 | line-height: 1.4545455; 2484 | margin-top: 1.0909091em; 2485 | margin-bottom: 1.0909091em; 2486 | } 2487 | 2488 | .lg\:prose-lg blockquote { 2489 | margin-top: 1.6666667em; 2490 | margin-bottom: 1.6666667em; 2491 | padding-left: 1em; 2492 | } 2493 | 2494 | .lg\:prose-lg h1 { 2495 | font-size: 2.6666667em; 2496 | margin-top: 0; 2497 | margin-bottom: 0.8333333em; 2498 | line-height: 1; 2499 | } 2500 | 2501 | .lg\:prose-lg h2 { 2502 | font-size: 1.6666667em; 2503 | margin-top: 1.8666667em; 2504 | margin-bottom: 1.0666667em; 2505 | line-height: 1.3333333; 2506 | } 2507 | 2508 | .lg\:prose-lg h3 { 2509 | font-size: 1.3333333em; 2510 | margin-top: 1.6666667em; 2511 | margin-bottom: 0.6666667em; 2512 | line-height: 1.5; 2513 | } 2514 | 2515 | .lg\:prose-lg h4 { 2516 | margin-top: 1.7777778em; 2517 | margin-bottom: 0.4444444em; 2518 | line-height: 1.5555556; 2519 | } 2520 | 2521 | .lg\:prose-lg img { 2522 | margin-top: 1.7777778em; 2523 | margin-bottom: 1.7777778em; 2524 | } 2525 | 2526 | .lg\:prose-lg video { 2527 | margin-top: 1.7777778em; 2528 | margin-bottom: 1.7777778em; 2529 | } 2530 | 2531 | .lg\:prose-lg figure { 2532 | margin-top: 1.7777778em; 2533 | margin-bottom: 1.7777778em; 2534 | } 2535 | 2536 | .lg\:prose-lg figure > * { 2537 | margin-top: 0; 2538 | margin-bottom: 0; 2539 | } 2540 | 2541 | .lg\:prose-lg figure figcaption { 2542 | font-size: 0.8888889em; 2543 | line-height: 1.5; 2544 | margin-top: 1em; 2545 | } 2546 | 2547 | .lg\:prose-lg code { 2548 | font-size: 0.8888889em; 2549 | } 2550 | 2551 | .lg\:prose-lg h2 code { 2552 | font-size: 0.8666667em; 2553 | } 2554 | 2555 | .lg\:prose-lg h3 code { 2556 | font-size: 0.875em; 2557 | } 2558 | 2559 | .lg\:prose-lg pre { 2560 | font-size: 0.8888889em; 2561 | line-height: 1.75; 2562 | margin-top: 2em; 2563 | margin-bottom: 2em; 2564 | border-radius: 0.375rem; 2565 | padding-top: 1em; 2566 | padding-right: 1.5em; 2567 | padding-bottom: 1em; 2568 | padding-left: 1.5em; 2569 | } 2570 | 2571 | .lg\:prose-lg ol { 2572 | margin-top: 1.3333333em; 2573 | margin-bottom: 1.3333333em; 2574 | } 2575 | 2576 | .lg\:prose-lg ul { 2577 | margin-top: 1.3333333em; 2578 | margin-bottom: 1.3333333em; 2579 | } 2580 | 2581 | .lg\:prose-lg li { 2582 | margin-top: 0.6666667em; 2583 | margin-bottom: 0.6666667em; 2584 | } 2585 | 2586 | .lg\:prose-lg ol > li { 2587 | padding-left: 1.6666667em; 2588 | } 2589 | 2590 | .lg\:prose-lg ol > li::before { 2591 | left: 0; 2592 | } 2593 | 2594 | .lg\:prose-lg ul > li { 2595 | padding-left: 1.6666667em; 2596 | } 2597 | 2598 | .lg\:prose-lg ul > li::before { 2599 | width: 0.3333333em; 2600 | height: 0.3333333em; 2601 | top: calc(0.8888889em - 0.1666667em); 2602 | left: 0.2222222em; 2603 | } 2604 | 2605 | .lg\:prose-lg > ul > li p { 2606 | margin-top: 0.8888889em; 2607 | margin-bottom: 0.8888889em; 2608 | } 2609 | 2610 | .lg\:prose-lg > ul > li > *:first-child { 2611 | margin-top: 1.3333333em; 2612 | } 2613 | 2614 | .lg\:prose-lg > ul > li > *:last-child { 2615 | margin-bottom: 1.3333333em; 2616 | } 2617 | 2618 | .lg\:prose-lg > ol > li > *:first-child { 2619 | margin-top: 1.3333333em; 2620 | } 2621 | 2622 | .lg\:prose-lg > ol > li > *:last-child { 2623 | margin-bottom: 1.3333333em; 2624 | } 2625 | 2626 | .lg\:prose-lg ul ul, .lg\:prose-lg ul ol, .lg\:prose-lg ol ul, .lg\:prose-lg ol ol { 2627 | margin-top: 0.8888889em; 2628 | margin-bottom: 0.8888889em; 2629 | } 2630 | 2631 | .lg\:prose-lg hr { 2632 | margin-top: 3.1111111em; 2633 | margin-bottom: 3.1111111em; 2634 | } 2635 | 2636 | .lg\:prose-lg hr + * { 2637 | margin-top: 0; 2638 | } 2639 | 2640 | .lg\:prose-lg h2 + * { 2641 | margin-top: 0; 2642 | } 2643 | 2644 | .lg\:prose-lg h3 + * { 2645 | margin-top: 0; 2646 | } 2647 | 2648 | .lg\:prose-lg h4 + * { 2649 | margin-top: 0; 2650 | } 2651 | 2652 | .lg\:prose-lg table { 2653 | font-size: 0.8888889em; 2654 | line-height: 1.5; 2655 | } 2656 | 2657 | .lg\:prose-lg thead th { 2658 | padding-right: 0.75em; 2659 | padding-bottom: 0.75em; 2660 | padding-left: 0.75em; 2661 | } 2662 | 2663 | .lg\:prose-lg thead th:first-child { 2664 | padding-left: 0; 2665 | } 2666 | 2667 | .lg\:prose-lg thead th:last-child { 2668 | padding-right: 0; 2669 | } 2670 | 2671 | .lg\:prose-lg tbody td { 2672 | padding-top: 0.75em; 2673 | padding-right: 0.75em; 2674 | padding-bottom: 0.75em; 2675 | padding-left: 0.75em; 2676 | } 2677 | 2678 | .lg\:prose-lg tbody td:first-child { 2679 | padding-left: 0; 2680 | } 2681 | 2682 | .lg\:prose-lg tbody td:last-child { 2683 | padding-right: 0; 2684 | } 2685 | 2686 | .lg\:prose-lg > :first-child { 2687 | margin-top: 0; 2688 | } 2689 | 2690 | .lg\:prose-lg > :last-child { 2691 | margin-bottom: 0; 2692 | } 2693 | 2694 | .lg\:w-72 { 2695 | width: 18rem !important; 2696 | } 2697 | 2698 | .lg\:px-8 { 2699 | padding-left: 2rem !important; 2700 | padding-right: 2rem !important; 2701 | } 2702 | 2703 | .lg\:pl-72 { 2704 | padding-left: 18rem !important; 2705 | } 2706 | 2707 | .lg\:text-sm { 2708 | font-size: 0.875rem !important; 2709 | line-height: 1.25rem !important; 2710 | } 2711 | } 2712 | 2713 | @media (min-width: 1280px) { 2714 | .xl\:prose-xl { 2715 | font-size: 1.25rem; 2716 | line-height: 1.8; 2717 | } 2718 | 2719 | .xl\:prose-xl p { 2720 | margin-top: 1.2em; 2721 | margin-bottom: 1.2em; 2722 | } 2723 | 2724 | .xl\:prose-xl [class~="lead"] { 2725 | font-size: 1.2em; 2726 | line-height: 1.5; 2727 | margin-top: 1em; 2728 | margin-bottom: 1em; 2729 | } 2730 | 2731 | .xl\:prose-xl blockquote { 2732 | margin-top: 1.6em; 2733 | margin-bottom: 1.6em; 2734 | padding-left: 1.0666667em; 2735 | } 2736 | 2737 | .xl\:prose-xl h1 { 2738 | font-size: 2.8em; 2739 | margin-top: 0; 2740 | margin-bottom: 0.8571429em; 2741 | line-height: 1; 2742 | } 2743 | 2744 | .xl\:prose-xl h2 { 2745 | font-size: 1.8em; 2746 | margin-top: 1.5555556em; 2747 | margin-bottom: 0.8888889em; 2748 | line-height: 1.1111111; 2749 | } 2750 | 2751 | .xl\:prose-xl h3 { 2752 | font-size: 1.5em; 2753 | margin-top: 1.6em; 2754 | margin-bottom: 0.6666667em; 2755 | line-height: 1.3333333; 2756 | } 2757 | 2758 | .xl\:prose-xl h4 { 2759 | margin-top: 1.8em; 2760 | margin-bottom: 0.6em; 2761 | line-height: 1.6; 2762 | } 2763 | 2764 | .xl\:prose-xl img { 2765 | margin-top: 2em; 2766 | margin-bottom: 2em; 2767 | } 2768 | 2769 | .xl\:prose-xl video { 2770 | margin-top: 2em; 2771 | margin-bottom: 2em; 2772 | } 2773 | 2774 | .xl\:prose-xl figure { 2775 | margin-top: 2em; 2776 | margin-bottom: 2em; 2777 | } 2778 | 2779 | .xl\:prose-xl figure > * { 2780 | margin-top: 0; 2781 | margin-bottom: 0; 2782 | } 2783 | 2784 | .xl\:prose-xl figure figcaption { 2785 | font-size: 0.9em; 2786 | line-height: 1.5555556; 2787 | margin-top: 1em; 2788 | } 2789 | 2790 | .xl\:prose-xl code { 2791 | font-size: 0.9em; 2792 | } 2793 | 2794 | .xl\:prose-xl h2 code { 2795 | font-size: 0.8611111em; 2796 | } 2797 | 2798 | .xl\:prose-xl h3 code { 2799 | font-size: 0.9em; 2800 | } 2801 | 2802 | .xl\:prose-xl pre { 2803 | font-size: 0.9em; 2804 | line-height: 1.7777778; 2805 | margin-top: 2em; 2806 | margin-bottom: 2em; 2807 | border-radius: 0.5rem; 2808 | padding-top: 1.1111111em; 2809 | padding-right: 1.3333333em; 2810 | padding-bottom: 1.1111111em; 2811 | padding-left: 1.3333333em; 2812 | } 2813 | 2814 | .xl\:prose-xl ol { 2815 | margin-top: 1.2em; 2816 | margin-bottom: 1.2em; 2817 | } 2818 | 2819 | .xl\:prose-xl ul { 2820 | margin-top: 1.2em; 2821 | margin-bottom: 1.2em; 2822 | } 2823 | 2824 | .xl\:prose-xl li { 2825 | margin-top: 0.6em; 2826 | margin-bottom: 0.6em; 2827 | } 2828 | 2829 | .xl\:prose-xl ol > li { 2830 | padding-left: 1.8em; 2831 | } 2832 | 2833 | .xl\:prose-xl ol > li::before { 2834 | left: 0; 2835 | } 2836 | 2837 | .xl\:prose-xl ul > li { 2838 | padding-left: 1.8em; 2839 | } 2840 | 2841 | .xl\:prose-xl ul > li::before { 2842 | width: 0.35em; 2843 | height: 0.35em; 2844 | top: calc(0.9em - 0.175em); 2845 | left: 0.25em; 2846 | } 2847 | 2848 | .xl\:prose-xl > ul > li p { 2849 | margin-top: 0.8em; 2850 | margin-bottom: 0.8em; 2851 | } 2852 | 2853 | .xl\:prose-xl > ul > li > *:first-child { 2854 | margin-top: 1.2em; 2855 | } 2856 | 2857 | .xl\:prose-xl > ul > li > *:last-child { 2858 | margin-bottom: 1.2em; 2859 | } 2860 | 2861 | .xl\:prose-xl > ol > li > *:first-child { 2862 | margin-top: 1.2em; 2863 | } 2864 | 2865 | .xl\:prose-xl > ol > li > *:last-child { 2866 | margin-bottom: 1.2em; 2867 | } 2868 | 2869 | .xl\:prose-xl ul ul, .xl\:prose-xl ul ol, .xl\:prose-xl ol ul, .xl\:prose-xl ol ol { 2870 | margin-top: 0.8em; 2871 | margin-bottom: 0.8em; 2872 | } 2873 | 2874 | .xl\:prose-xl hr { 2875 | margin-top: 2.8em; 2876 | margin-bottom: 2.8em; 2877 | } 2878 | 2879 | .xl\:prose-xl hr + * { 2880 | margin-top: 0; 2881 | } 2882 | 2883 | .xl\:prose-xl h2 + * { 2884 | margin-top: 0; 2885 | } 2886 | 2887 | .xl\:prose-xl h3 + * { 2888 | margin-top: 0; 2889 | } 2890 | 2891 | .xl\:prose-xl h4 + * { 2892 | margin-top: 0; 2893 | } 2894 | 2895 | .xl\:prose-xl table { 2896 | font-size: 0.9em; 2897 | line-height: 1.5555556; 2898 | } 2899 | 2900 | .xl\:prose-xl thead th { 2901 | padding-right: 0.6666667em; 2902 | padding-bottom: 0.8888889em; 2903 | padding-left: 0.6666667em; 2904 | } 2905 | 2906 | .xl\:prose-xl thead th:first-child { 2907 | padding-left: 0; 2908 | } 2909 | 2910 | .xl\:prose-xl thead th:last-child { 2911 | padding-right: 0; 2912 | } 2913 | 2914 | .xl\:prose-xl tbody td { 2915 | padding-top: 0.8888889em; 2916 | padding-right: 0.6666667em; 2917 | padding-bottom: 0.8888889em; 2918 | padding-left: 0.6666667em; 2919 | } 2920 | 2921 | .xl\:prose-xl tbody td:first-child { 2922 | padding-left: 0; 2923 | } 2924 | 2925 | .xl\:prose-xl tbody td:last-child { 2926 | padding-right: 0; 2927 | } 2928 | 2929 | .xl\:prose-xl > :first-child { 2930 | margin-top: 0; 2931 | } 2932 | 2933 | .xl\:prose-xl > :last-child { 2934 | margin-bottom: 0; 2935 | } 2936 | 2937 | .xl\:px-12 { 2938 | padding-left: 3rem !important; 2939 | padding-right: 3rem !important; 2940 | } 2941 | } 2942 | 2943 | @media (min-width: 1536px) { 2944 | } -------------------------------------------------------------------------------- /admin/config.yml: -------------------------------------------------------------------------------- 1 | backend: 2 | name: git-gateway 3 | branch: main # Branch to update (optional; defaults to main) 4 | 5 | # Uncomment below to enable drafts 6 | # publish_mode: editorial_workflow 7 | 8 | media_folder: "static/img" # Media files will be stored in the repo under images/uploads 9 | 10 | # # Cloudinary 11 | # media_library: 12 | # name: cloudinary 13 | # config: 14 | # cloud_name: broeker 15 | # api_key: 159818251742281 16 | 17 | collections: 18 | # Our blog posts 19 | # - name: "blog" # Used in routes, e.g., /admin/collections/blog 20 | # label: "Post" # Used in the UI 21 | # folder: "posts" # The path to the folder where the documents are stored 22 | # create: true # Allow users to create new documents in this collection 23 | # slug: "{{slug}}" # Filename template, e.g., YYYY-MM-DD-title.md 24 | # fields: # The fields for each document, usually in front matter 25 | # - { label: "Title", name: "title", widget: "string" } 26 | # - { label: "Publish Date", name: "date", widget: "datetime" } 27 | # - { label: "Author", name: "author", widget: "string", default: "Anonymous" } 28 | # - { label: "Summary", name: "summary", widget: "text" } 29 | # - { label: "Tags", name: "tags", widget: "list", default: ["post"] } 30 | # - { label: "Body", name: "body", widget: "markdown" } 31 | # Our pages e.g. About 32 | - name: "pages" 33 | label: "Page" 34 | folder: "content/pages" 35 | create: true # Change to true to allow editors to create new pages 36 | slug: "{{slug}}" 37 | fields: 38 | - { label: "Title", name: "title", widget: "string" } 39 | - { label: "Publish Date", name: "date", widget: "datetime" } 40 | - { label: "Permalink", name: "permalink", widget: "string" } 41 | - label: "Navigation" # https://www.11ty.dev/docs/plugins/navigation/ 42 | name: "eleventyNavigation" 43 | widget: "object" 44 | fields: 45 | - { label: "Key", name: "key", widget: "string" } 46 | - { label: "Order", name: "order", widget: "number", default: 100 } 47 | - { label: "Parent", name: "parent", widget: "string", required: false, hint: "(Optional) Enter a matching parent key to set this a nested or child page" } 48 | - { label: "Title", name: "title", widget: "string", required: false, hint: "(Optional) Enter alternate text for navigation link" } 49 | - { label: "Body", name: "body", widget: "markdown" } 50 | - label: "Globals" 51 | name: "globals" 52 | files: 53 | - label: "Site Data" 54 | name: "site_data" 55 | delete: false 56 | file: "_data/site.json" 57 | fields: 58 | - {label: "Site name", name: "name", widget: "string"} 59 | - {label: "Site subtitle", name: "subtitle", widget: "string", required: false} 60 | - {label: "Meta description", name: "description", widget: "string"} 61 | - {label: "Site footer", name: "footer", widget: "string", required: false} 62 | - {label: "Site Url", name: "url", widget: "string"} 63 | - {label: "Github Url", name: "githubUrl", widget: "string"} 64 | - {label: "Github branch", name: "githubBranch", widget: "string"} 65 | - {label: "Navigation style", name: "navigationStyle", widget: "string"} 66 | - {label: "Site emoji", name: "emoji", widget: "string", required: false} 67 | - {label: "Enable search", name: "enableSearch", widget: "boolean"} 68 | - {label: "Enable darkmode", name: "enableDarkMode", widget: "boolean"} 69 | - {label: "Enable edit button", name: "enableEditButton", widget: "boolean"} 70 | - {label: "Enable datestamp", name: "enableDatestamp", widget: "boolean"} 71 | - {label: "Enable Github link", name: "enableGithubLink", widget: "boolean"} 72 | - {label: "Enable contact form", name: "enableContact", widget: "boolean"} 73 | - {label: "Enable Netlify CMS", name: "enableNetlifyCMS", widget: "boolean", default: false} 74 | - {label: "Enable comments", name: "enableComments", widget: "boolean", default: false} 75 | - {label: "Enable encryption", name: "enableEncryption", widget: "boolean", default: false} 76 | - {label: "Enable page navigation", name: "enablePageNavigation", widget: "boolean", default: false} 77 | -------------------------------------------------------------------------------- /admin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Netlify CMS 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /admin/preview-templates/index.js: -------------------------------------------------------------------------------- 1 | import Page from "/admin/preview-templates/page.js"; 2 | // import Post from "/admin/preview-templates/post.js"; 3 | 4 | // Register the Post component as the preview for entries in the blog collection 5 | CMS.registerPreviewTemplate("pages", Page); 6 | // CMS.registerPreviewTemplate("blog", Post); 7 | 8 | CMS.registerPreviewStyle("/style.css"); 9 | 10 | // Register any CSS file on the home page as a preview style 11 | // fetch("/") 12 | // .then(response => response.text()) 13 | // .then(html => { 14 | // const f = document.createElement("html"); 15 | // f.innerHTML = html; 16 | // Array.from(f.getElementsByTagName("link")).forEach(tag => { 17 | // if (tag.rel == "stylesheet" && !tag.media) { 18 | // CMS.registerPreviewStyle(tag.href); 19 | // } 20 | // }); 21 | // }); 22 | -------------------------------------------------------------------------------- /admin/preview-templates/page.js: -------------------------------------------------------------------------------- 1 | import htm from "https://unpkg.com/htm?module"; 2 | 3 | const html = htm.bind(h); 4 | 5 | // Preview component for a Page 6 | const Page = createClass({ 7 | render() { 8 | const entry = this.props.entry; 9 | 10 | return html` 11 |
12 |

${entry.getIn(["data", "title"], null)}

13 |
14 | ${this.props.widgetFor("body")} 15 |
16 |
17 | `; 18 | } 19 | }); 20 | 21 | export default Page; 22 | -------------------------------------------------------------------------------- /admin/preview-templates/post.js: -------------------------------------------------------------------------------- 1 | import htm from "https://unpkg.com/htm?module"; 2 | import format from "https://unpkg.com/date-fns@2.7.0/esm/format/index.js?module"; 3 | 4 | const html = htm.bind(h); 5 | 6 | // Preview component for a Post 7 | const Post = createClass({ 8 | render() { 9 | const entry = this.props.entry; 10 | 11 | return html` 12 |
13 |
14 |

${entry.getIn(["data", "title"], null)}

15 |
Updated
16 |

${entry.getIn(["data", "summary"], "")}

17 |
18 | ${this.props.widgetFor("body")} 19 |
20 |

21 | ${ 22 | entry.getIn(["data", "tags"], []).map( 23 | tag => 24 | html` 25 | 26 | ` 27 | ) 28 | } 29 |

30 |
31 |
32 | `; 33 | } 34 | }); 35 | 36 | export default Post; 37 | -------------------------------------------------------------------------------- /content/images/hello.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broeker/spacebook/e06e20b05b191e068657da8458c6220c678da573/content/images/hello.jpg -------------------------------------------------------------------------------- /content/pages/contact.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: layouts/contact.njk 3 | title: Send a message 4 | section: contact 5 | date: Last Modified 6 | permalink: /contact/index.html 7 | --- 8 | You can use [Netlify Forms](https://www.netlify.com/docs/form-handling/) to create contact forms like this one, or any other custom forms you may wish to create. All submissions are sent directly to your Netlify dashboard (with optional notifications.) All forms utilize Netlify's native spam filter will display a CAPTCHA for any flagged submissions. 9 | -------------------------------------------------------------------------------- /content/pages/home.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hello, world. 3 | date: Last Modified 4 | permalink: / 5 | eleventyNavigation: 6 | key: Hello 7 | order: 0 8 | title: Hello, world. 9 | --- 10 | You have successfully launched your spacebook. If you are new here, you may want to [read the docs](https://spacebook.app/) for tips and tricks on setting up your project. 11 | 12 | ![Hello, world](/content/images/hello.jpg) 13 | 14 | ->*Onward...*<- 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /content/pages/pages.json: -------------------------------------------------------------------------------- 1 | { 2 | "layout": "layouts/page.njk" 3 | } 4 | -------------------------------------------------------------------------------- /filters/searchFilter.js: -------------------------------------------------------------------------------- 1 | const elasticlunr = require("elasticlunr"); 2 | const emojiRegex = require('emoji-regex/RGI_Emoji.js') 3 | 4 | module.exports = function (collection) { 5 | // what fields we'd like our index to consist of 6 | var index = elasticlunr(function () { 7 | this.addField("title"); 8 | this.addField("content"); 9 | this.setRef("id"); 10 | }); 11 | 12 | // loop through each page and add it to the index 13 | collection.forEach((page) => { 14 | index.addDoc({ 15 | id: page.url, 16 | title: page.template.frontMatter.data.title, 17 | content: squash(page.templateContent), 18 | }); 19 | }); 20 | 21 | function squash(text) { 22 | const regex = emojiRegex(); 23 | var content = new String(text); 24 | 25 | // all lower case, please 26 | var content = content.toLowerCase(); 27 | 28 | // remove all html elements and new lines 29 | var re = /(.*?<.*?>)/gi; 30 | var plain = unescape(content.replace(re, '')); 31 | 32 | // remove duplicated words 33 | var words = plain.split(' '); 34 | var deduped = [...(new Set(words))]; 35 | var dedupedStr = deduped.join(' ') 36 | 37 | // remove short and less meaningful words 38 | var result = dedupedStr.replace(/\b(\.|\,|\<;|the|a|an|and|am|you|I|to|if|of|off|me|my|on|in|it|is|at|as|we|do|be|has|but|was|so|no|not|or|up|for)\b/gi, ''); 39 | //remove newlines, and punctuation 40 | result = result.replace(/\.|\,|\?|

|-|—|\n/g, ''); 41 | //remove repeated spaces 42 | result = result.replace(/[ ]{2,}/g, ' '); 43 | // remove most emoji 44 | result = result.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?/g, ''); 45 | 46 | let match; 47 | while (match = regex.exec(result)) { 48 | const emoji = match[0]; 49 | result = result.replace(emoji,' ') 50 | } 51 | 52 | return result; 53 | } 54 | 55 | return index.toJSON(); 56 | }; -------------------------------------------------------------------------------- /loader.js: -------------------------------------------------------------------------------- 1 | if (localStorage.getItem('password')) { 2 | insertPlainHTML(atob(localStorage.getItem('password'))) 3 | } else { 4 | document.getElementById('staticrypt-form').addEventListener('submit', function(e) { 5 | e.preventDefault(); 6 | insertPlainHTML(document.getElementById('staticrypt-password').value); 7 | }); 8 | } -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "_site" 3 | command = "npm run build" 4 | #command = "npm run build && set -e && find ./_site -type f -name '*.html' -exec staticrypt -f password_template.html {} $PASSWORD -o {} \\;" 5 | functions = "functions" 6 | 7 | # REDIRECT and HEADERS examples 8 | 9 | # Redirect rule example 10 | # For more information see:- https://www.netlify.com/docs/netlify-toml-reference/ 11 | 12 | #[[redirects]] 13 | # from = "/*" 14 | # to = "/blog/:splat" 15 | 16 | # The default HTTP status code is 301, but you can define a different one e.g. 17 | # status = 302 18 | 19 | # Headers rule example 20 | # For more information see:- https://www.netlify.com/docs/netlify-toml-reference/ 21 | 22 | #[[headers]] 23 | # Define which paths this specific [[headers]] block will cover. 24 | # for = "/*" 25 | 26 | #[headers.values] 27 | # X-Frame-Options = "DENY" 28 | # X-XSS-Protection = "1; mode=block" 29 | # Content-Security-Policy = "frame-ancestors https://www.facebook.com" 30 | 31 | # Redirects and headers are GLOBAL for all builds – they do not get scoped to 32 | # contexts no matter where you define them in the file. 33 | # For context-specific rules, use _headers or _redirects files, which are 34 | # applied on a PER-DEPLOY basis. 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spacebook", 3 | "version": "1.0.0", 4 | "description": "A simple site generator based on Eleventy, Tailwind 2.0, and Alpine.js", 5 | "scripts": { 6 | "start": "eleventy --serve & postcss styles/tailwind.css --o _tmp/style.css --watch", 7 | "build": "ELEVENTY_PRODUCTION=true eleventy && NODE_ENV=production postcss styles/tailwind.css --o _site/style.css && ./node_modules/.bin/cleancss -o _site/style.css _site/style.css", 8 | "watch": "npx eleventy --watch", 9 | "debug": "DEBUG=* npx eleventy" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/broeker/spacebook.git" 14 | }, 15 | "author": "Tim Broeker (https://www.electriccitizen.com/)", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/broeker/spacebook/issues" 19 | }, 20 | "homepage": "https://github.com/broeker/spacebook", 21 | "devDependencies": { 22 | "@11ty/eleventy": "^0.11.1", 23 | "alpinejs": "^2.7.3", 24 | "eleventy-plugin-lazyimages": "^2.1.0", 25 | "eslint": "^7.9.0", 26 | "lazysizes": "^5.2.2", 27 | "luxon": "^1.25.0", 28 | "markdown-it": "^10.0.0", 29 | "markdown-it-anchor": "^5.3.0", 30 | "markdown-it-image-lazysizes": "^1.0.0", 31 | "postcss-cli": "^8.3.0", 32 | "prettier": "^2.1.2", 33 | "tailwindcss": "^2.0.2" 34 | }, 35 | "dependencies": { 36 | "@11ty/eleventy-img": "^0.5.0", 37 | "@11ty/eleventy-navigation": "^0.1.6", 38 | "@tailwindcss/forms": "^0.2.1", 39 | "@tailwindcss/typography": "^0.3.1", 40 | "autoprefixer": "^10.1.0", 41 | "clean-css": "^4.2.1", 42 | "clean-css-cli": "^4.3.0", 43 | "elasticlunr": "^0.9.5", 44 | "eleventy-plugin-embed-everything": "^1.9.4", 45 | "eleventy-plugin-nesting-toc": "^1.2.0", 46 | "eleventy-plugin-svg-contents": "^0.7.0", 47 | "eleventy-plugin-toc": "^1.1.0", 48 | "emoji-regex": "^9.2.0", 49 | "html-minifier": "^4.0.0", 50 | "markdown-it-attrs": "^3.0.3", 51 | "markdown-it-center-text": "^1.0.4", 52 | "markdown-it-container": "^3.0.0", 53 | "markdown-it-emoji": "^2.0.0", 54 | "markdown-it-footnote": "^3.0.2", 55 | "markdown-it-for-inline": "^0.1.1", 56 | "markdown-it-linkify-images": "^2.0.0", 57 | "markdown-it-table-of-contents": "^0.5.0", 58 | "markdown-it-task-lists": "^2.1.1", 59 | "postcss": "^8.2.2", 60 | "qs": "^6.9.4", 61 | "remove": "^0.1.5", 62 | "staticrypt": "^1.3.2", 63 | "uglify-es": "^3.3.9", 64 | "url-pattern": "^1.0.3" 65 | }, 66 | "main": ".eleventy.js" 67 | } 68 | -------------------------------------------------------------------------------- /password_template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Private Page 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 136 | 142 | 143 | 144 | 145 | 146 |

147 | {crypto_tag} 148 | 149 | 227 | 228 |
229 |
230 |
231 |

🔒 Enter a password to unlock!

232 |
233 | 234 |
235 | 236 |
237 | 244 | 249 |
250 |
251 |
252 | 258 | 259 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require(`tailwindcss`)(`./styles/tailwind.config.js`), 4 | require(`autoprefixer`), 5 | ], 6 | }; 7 | -------------------------------------------------------------------------------- /robots.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Robots 3 | permalink: /robots.txt 4 | layout: layouts/robots.njk 5 | --- 6 | -------------------------------------------------------------------------------- /search-index.json.njk: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /search-index.json 3 | --- 4 | {{ collections.results | search | dump | safe }} 5 | 6 | 7 | -------------------------------------------------------------------------------- /styles/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const autoprefixer = require('autoprefixer'); 2 | 3 | module.exports = { 4 | important: true, 5 | future: { 6 | removeDeprecatedGapUtilities: true, 7 | purgeLayersByDefault: true, 8 | }, 9 | purge: { 10 | enabled: true, 11 | content: ["_site/**/*.html"], 12 | options: { 13 | safelist: [], 14 | }, 15 | }, 16 | darkMode: 'class', 17 | theme: { 18 | container: { 19 | center: true, 20 | }, 21 | extend: { 22 | typography: { 23 | DEFAULT: { 24 | css: { 25 | maxWidth: '100%', 26 | a: { 27 | color: '#1D4ED8', 28 | '&:hover': { 29 | color: '#1E3A8A', 30 | }, 31 | }, 32 | '.prose a.edit, .tag a': { 33 | color: '#333', 34 | 'text-decoration': 'none', 35 | }, 36 | 'ul.footer-nav': { 37 | '::before': { 38 | display: 'none', 39 | 'text-decoration': 'none', 40 | } 41 | }, 42 | 'ul.contains-task-list': { 43 | '::before': { 44 | display: 'none', 45 | } 46 | }, 47 | 'ul.spacelog': { 48 | '::before': { 49 | display: 'none', 50 | } 51 | }, 52 | }, 53 | }, 54 | } 55 | }, 56 | }, 57 | variants: {}, 58 | plugins: [ 59 | require('@tailwindcss/typography'), 60 | require('@tailwindcss/forms'), 61 | ], 62 | } -------------------------------------------------------------------------------- /styles/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | 7 | /* Set up some default image behavior for nicer images */ 8 | img { 9 | @apply w-auto shadow-md border-2 border-transparent !important 10 | } 11 | img:hover { 12 | @apply border-2 border-gray-100 13 | } 14 | /* Overrides for Tailwind Typography prose class */ 15 | .prose a { 16 | @apply dark:text-gray-400 17 | } 18 | .prose a:hover { 19 | @apply dark:text-gray-500 20 | } 21 | .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 .prose hr, .prose strong { 22 | @apply dark:text-gray-400 23 | } 24 | .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 { 25 | scroll-margin-top: 3.5em; 26 | } 27 | .prose pre code { 28 | @apply overflow-x-auto !important 29 | } 30 | .prose .footer-nav a { 31 | @apply no-underline !important 32 | } 33 | .prose ul.contains-task-list, 34 | .prose ul.spacelog { 35 | @apply list-none -ml-6 !important; 36 | } 37 | .prose ul.contains-task-list .task-list-item, 38 | .prose ul.spacelog { 39 | ::before { 40 | @apply hidden !important; 41 | } 42 | } 43 | 44 | /* Define blockquotes and some standard callout blocks */ 45 | blockquote { 46 | @apply rounded-lg p-4 bg-gray-100 dark:bg-gray-500 border-gray-200 border-l-8 dark:border-gray-700; 47 | } 48 | .callout { 49 | @apply px-8 py-4 mb-4 rounded-lg bg-yellow-50; 50 | } 51 | .callout, .callout strong, .callout em { 52 | @apply dark:bg-gray-400 dark:text-gray-900; 53 | } 54 | .callout-blue { 55 | @apply px-8 py-4 mb-4 rounded-lg bg-blue-50; 56 | } 57 | .callout-blue, .callout-blue strong, .callout-blue em { 58 | @apply dark:text-gray-200 dark:bg-blue-900; 59 | } 60 | .callout-pink { 61 | @apply px-8 py-4 mb-4 rounded-lg bg-pink-50; 62 | } 63 | .callout-pink, .callout-pink strong, .callout-pink em { 64 | @apply dark:text-gray-200 dark:bg-pink-900; 65 | } 66 | .callout-green { 67 | @apply px-8 py-4 mb-4 rounded-lg bg-green-50; 68 | } 69 | .callout-green, .callout-green strong, .callout-green em { 70 | @apply dark:text-gray-200 dark:bg-green-900; 71 | } 72 | .warning { 73 | @apply px-8 py-4 mb-4 rounded-lg bg-red-800 text-gray-50; 74 | } 75 | .warning, .warning strong, .warning em { 76 | @apply text-gray-50 dark:bg-red-900 dark:text-gray-200; 77 | } 78 | 79 | /* Overrides for nav/Table of Contents block */ 80 | nav ul { 81 | @apply ml-0 text-gray-500; 82 | } 83 | nav ul ul { 84 | @apply ml-6 text-gray-500; 85 | } 86 | nav ul li a { 87 | @apply mb-1 pt-2 pr-4 pb-1 pl-2 w-full block text-gray-500 dark:text-gray-500; 88 | } 89 | nav ul li a:hover { 90 | @apply text-gray-900 dark:text-gray-400; 91 | } 92 | nav ul li a.active { 93 | @apply font-semibold; 94 | } 95 | nav.toc ol li { 96 | @apply pt-2 !important 97 | } 98 | nav.toc ol li li { 99 | @apply pt-2 ml-4 100 | } 101 | nav.toc ol li a { 102 | @apply text-gray-500 103 | } 104 | nav.toc ol li a:hover { 105 | @apply text-gray-900 106 | } 107 | .prose .footer-nav a:hover { 108 | @apply dark:text-gray-400 !important 109 | } 110 | 111 | /* Utilities and misc */ 112 | .adjust p img, .adjust img, .adjust p iframe, .adjust iframe, .twitter-tweet { 113 | @apply shadow-md ml-auto mr-auto p-2 !important 114 | } 115 | .adjust p img:hover, .adjust img:hover { 116 | @apply shadow-xl 117 | } 118 | .adjust img.button { 119 | @apply w-auto shadow-none !important 120 | } 121 | .text-align-center { 122 | @apply flex justify-center; 123 | } 124 | .icon-spacer { 125 | width: "24px"; 126 | } 127 | input { 128 | @apply dark:text-gray-400 129 | } 130 | } -------------------------------------------------------------------------------- /uploads/uws2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/broeker/spacebook/e06e20b05b191e068657da8458c6220c678da573/uploads/uws2.png --------------------------------------------------------------------------------