├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── demo.css ├── favicon.svg ├── github.jpg ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── sass ├── abstracts │ ├── _breakpoints.scss │ ├── _colors.scss │ ├── _font-families.scss │ ├── _font-sizes.scss │ ├── _index.scss │ ├── _mixins.scss │ └── _spacing.scss ├── base │ ├── _base.scss │ ├── _index.scss │ ├── _reset.scss │ └── _root.scss ├── components │ ├── _card.scss │ └── _index.scss ├── layout │ ├── _index.scss │ ├── _main-layout.scss │ └── _with-sidebar.scss ├── style.scss └── utilities │ ├── _colors.scss │ ├── _columns.scss │ ├── _container.scss │ ├── _flex.scss │ ├── _flow.scss │ ├── _font-sizes.scss │ ├── _grid.scss │ └── _index.scss ├── style.css └── style.css.map /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Kevin Powell 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 | ![logo](github.jpg) 2 | 3 | # demo-template 4 | A CSS "framework" that I'm using for my demos. 5 | 6 | I am using Sass to generate a CSS file, which I can quickly use to put together my demo files for YouTube videos. 7 | 8 | This is a work in progress. 9 | -------------------------------------------------------------------------------- /demo.css: -------------------------------------------------------------------------------- 1 | header { 2 | /* --bg-deg: 10deg; */ 3 | padding-block: max(10vh, 5rem); 4 | text-align: center; 5 | 6 | position: relative; 7 | } 8 | 9 | .example { 10 | font-size: 1rem; 11 | padding: var(--spacer); 12 | 13 | position: fixed; 14 | inset: auto 1rem 1rem auto; 15 | /* top: auto; 16 | right: 1rem; 17 | bottom: 1rem; 18 | left: auto; */ 19 | } 20 | -------------------------------------------------------------------------------- /favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /github.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kevin-powell/demo-template/abcfd1e8403d40ca2f7465ab73cf6b0e7ab5f5f7/github.jpg -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |

top: auto works?

23 |
24 |
25 |
scroll up
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | import "./style.css"; 2 | 3 | document.querySelector("#app").innerHTML = ` 4 |

Hello world!

5 | Documentation 6 | `; 7 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "css-framework", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "anymatch": { 8 | "version": "3.1.2", 9 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 10 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 11 | "dev": true, 12 | "requires": { 13 | "normalize-path": "^3.0.0", 14 | "picomatch": "^2.0.4" 15 | } 16 | }, 17 | "binary-extensions": { 18 | "version": "2.2.0", 19 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 20 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 21 | "dev": true 22 | }, 23 | "braces": { 24 | "version": "3.0.2", 25 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 26 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 27 | "dev": true, 28 | "requires": { 29 | "fill-range": "^7.0.1" 30 | } 31 | }, 32 | "chokidar": { 33 | "version": "3.5.2", 34 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 35 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 36 | "dev": true, 37 | "requires": { 38 | "anymatch": "~3.1.2", 39 | "braces": "~3.0.2", 40 | "fsevents": "~2.3.2", 41 | "glob-parent": "~5.1.2", 42 | "is-binary-path": "~2.1.0", 43 | "is-glob": "~4.0.1", 44 | "normalize-path": "~3.0.0", 45 | "readdirp": "~3.6.0" 46 | } 47 | }, 48 | "esbuild": { 49 | "version": "0.13.15", 50 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", 51 | "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", 52 | "dev": true, 53 | "requires": { 54 | "esbuild-android-arm64": "0.13.15", 55 | "esbuild-darwin-64": "0.13.15", 56 | "esbuild-darwin-arm64": "0.13.15", 57 | "esbuild-freebsd-64": "0.13.15", 58 | "esbuild-freebsd-arm64": "0.13.15", 59 | "esbuild-linux-32": "0.13.15", 60 | "esbuild-linux-64": "0.13.15", 61 | "esbuild-linux-arm": "0.13.15", 62 | "esbuild-linux-arm64": "0.13.15", 63 | "esbuild-linux-mips64le": "0.13.15", 64 | "esbuild-linux-ppc64le": "0.13.15", 65 | "esbuild-netbsd-64": "0.13.15", 66 | "esbuild-openbsd-64": "0.13.15", 67 | "esbuild-sunos-64": "0.13.15", 68 | "esbuild-windows-32": "0.13.15", 69 | "esbuild-windows-64": "0.13.15", 70 | "esbuild-windows-arm64": "0.13.15" 71 | } 72 | }, 73 | "esbuild-android-arm64": { 74 | "version": "0.13.15", 75 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz", 76 | "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==", 77 | "dev": true, 78 | "optional": true 79 | }, 80 | "esbuild-darwin-64": { 81 | "version": "0.13.15", 82 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz", 83 | "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==", 84 | "dev": true, 85 | "optional": true 86 | }, 87 | "esbuild-darwin-arm64": { 88 | "version": "0.13.15", 89 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz", 90 | "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==", 91 | "dev": true, 92 | "optional": true 93 | }, 94 | "esbuild-freebsd-64": { 95 | "version": "0.13.15", 96 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz", 97 | "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==", 98 | "dev": true, 99 | "optional": true 100 | }, 101 | "esbuild-freebsd-arm64": { 102 | "version": "0.13.15", 103 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz", 104 | "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==", 105 | "dev": true, 106 | "optional": true 107 | }, 108 | "esbuild-linux-32": { 109 | "version": "0.13.15", 110 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz", 111 | "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==", 112 | "dev": true, 113 | "optional": true 114 | }, 115 | "esbuild-linux-64": { 116 | "version": "0.13.15", 117 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz", 118 | "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", 119 | "dev": true, 120 | "optional": true 121 | }, 122 | "esbuild-linux-arm": { 123 | "version": "0.13.15", 124 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz", 125 | "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==", 126 | "dev": true, 127 | "optional": true 128 | }, 129 | "esbuild-linux-arm64": { 130 | "version": "0.13.15", 131 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz", 132 | "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==", 133 | "dev": true, 134 | "optional": true 135 | }, 136 | "esbuild-linux-mips64le": { 137 | "version": "0.13.15", 138 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz", 139 | "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==", 140 | "dev": true, 141 | "optional": true 142 | }, 143 | "esbuild-linux-ppc64le": { 144 | "version": "0.13.15", 145 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz", 146 | "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==", 147 | "dev": true, 148 | "optional": true 149 | }, 150 | "esbuild-netbsd-64": { 151 | "version": "0.13.15", 152 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz", 153 | "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==", 154 | "dev": true, 155 | "optional": true 156 | }, 157 | "esbuild-openbsd-64": { 158 | "version": "0.13.15", 159 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz", 160 | "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==", 161 | "dev": true, 162 | "optional": true 163 | }, 164 | "esbuild-sunos-64": { 165 | "version": "0.13.15", 166 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz", 167 | "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==", 168 | "dev": true, 169 | "optional": true 170 | }, 171 | "esbuild-windows-32": { 172 | "version": "0.13.15", 173 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz", 174 | "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==", 175 | "dev": true, 176 | "optional": true 177 | }, 178 | "esbuild-windows-64": { 179 | "version": "0.13.15", 180 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz", 181 | "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==", 182 | "dev": true, 183 | "optional": true 184 | }, 185 | "esbuild-windows-arm64": { 186 | "version": "0.13.15", 187 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz", 188 | "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==", 189 | "dev": true, 190 | "optional": true 191 | }, 192 | "fill-range": { 193 | "version": "7.0.1", 194 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 195 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 196 | "dev": true, 197 | "requires": { 198 | "to-regex-range": "^5.0.1" 199 | } 200 | }, 201 | "fsevents": { 202 | "version": "2.3.2", 203 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 204 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 205 | "dev": true, 206 | "optional": true 207 | }, 208 | "function-bind": { 209 | "version": "1.1.1", 210 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 211 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 212 | "dev": true 213 | }, 214 | "glob-parent": { 215 | "version": "5.1.2", 216 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 217 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 218 | "dev": true, 219 | "requires": { 220 | "is-glob": "^4.0.1" 221 | } 222 | }, 223 | "has": { 224 | "version": "1.0.3", 225 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 226 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 227 | "dev": true, 228 | "requires": { 229 | "function-bind": "^1.1.1" 230 | } 231 | }, 232 | "is-binary-path": { 233 | "version": "2.1.0", 234 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 235 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 236 | "dev": true, 237 | "requires": { 238 | "binary-extensions": "^2.0.0" 239 | } 240 | }, 241 | "is-core-module": { 242 | "version": "2.8.0", 243 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", 244 | "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", 245 | "dev": true, 246 | "requires": { 247 | "has": "^1.0.3" 248 | } 249 | }, 250 | "is-extglob": { 251 | "version": "2.1.1", 252 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 253 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 254 | "dev": true 255 | }, 256 | "is-glob": { 257 | "version": "4.0.3", 258 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 259 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 260 | "dev": true, 261 | "requires": { 262 | "is-extglob": "^2.1.1" 263 | } 264 | }, 265 | "is-number": { 266 | "version": "7.0.0", 267 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 268 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 269 | "dev": true 270 | }, 271 | "nanoid": { 272 | "version": "3.1.30", 273 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", 274 | "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", 275 | "dev": true 276 | }, 277 | "normalize-path": { 278 | "version": "3.0.0", 279 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 280 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 281 | "dev": true 282 | }, 283 | "path-parse": { 284 | "version": "1.0.7", 285 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 286 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 287 | "dev": true 288 | }, 289 | "picocolors": { 290 | "version": "1.0.0", 291 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 292 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 293 | "dev": true 294 | }, 295 | "picomatch": { 296 | "version": "2.3.0", 297 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 298 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 299 | "dev": true 300 | }, 301 | "postcss": { 302 | "version": "8.4.4", 303 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", 304 | "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", 305 | "dev": true, 306 | "requires": { 307 | "nanoid": "^3.1.30", 308 | "picocolors": "^1.0.0", 309 | "source-map-js": "^1.0.1" 310 | } 311 | }, 312 | "readdirp": { 313 | "version": "3.6.0", 314 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 315 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 316 | "dev": true, 317 | "requires": { 318 | "picomatch": "^2.2.1" 319 | } 320 | }, 321 | "resolve": { 322 | "version": "1.20.0", 323 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 324 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 325 | "dev": true, 326 | "requires": { 327 | "is-core-module": "^2.2.0", 328 | "path-parse": "^1.0.6" 329 | } 330 | }, 331 | "rollup": { 332 | "version": "2.60.1", 333 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.1.tgz", 334 | "integrity": "sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==", 335 | "dev": true, 336 | "requires": { 337 | "fsevents": "~2.3.2" 338 | } 339 | }, 340 | "sass": { 341 | "version": "1.43.5", 342 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.5.tgz", 343 | "integrity": "sha512-WuNm+eAryMgQluL7Mbq9M4EruyGGMyal7Lu58FfnRMVWxgUzIvI7aSn60iNt3kn5yZBMR7G84fAGDcwqOF5JOg==", 344 | "dev": true, 345 | "requires": { 346 | "chokidar": ">=3.0.0 <4.0.0" 347 | } 348 | }, 349 | "source-map-js": { 350 | "version": "1.0.1", 351 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", 352 | "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", 353 | "dev": true 354 | }, 355 | "to-regex-range": { 356 | "version": "5.0.1", 357 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 358 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 359 | "dev": true, 360 | "requires": { 361 | "is-number": "^7.0.0" 362 | } 363 | }, 364 | "vite": { 365 | "version": "2.6.14", 366 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.6.14.tgz", 367 | "integrity": "sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA==", 368 | "dev": true, 369 | "requires": { 370 | "esbuild": "^0.13.2", 371 | "fsevents": "~2.3.2", 372 | "postcss": "^8.3.8", 373 | "resolve": "^1.20.0", 374 | "rollup": "^2.57.0" 375 | } 376 | } 377 | } 378 | } 379 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "css-framework", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "serve": "vite preview" 8 | }, 9 | "devDependencies": { 10 | "sass": "^1.43.5", 11 | "vite": "^2.6.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /sass/abstracts/_breakpoints.scss: -------------------------------------------------------------------------------- 1 | $breakpoints: ( 2 | small: 35em, 3 | medium: 50em, 4 | large: 65em 5 | ) -------------------------------------------------------------------------------- /sass/abstracts/_colors.scss: -------------------------------------------------------------------------------- 1 | $colors: ( 2 | neutral: ( 3 | 100: 0 0% 100%, 4 | 200: 0 0% 90%, 5 | 300: 0 0% 70%, 6 | 400: 0 0% 60%, 7 | 500: 0 0% 50%, 8 | 600: 0 0% 40%, 9 | 700: 0 0% 30%, 10 | 800: 0 0% 10%, 11 | 900: 0 0% 0%, 12 | ), 13 | primary: ( 14 | 100: 214 100% 90%, 15 | 200: 214 100% 80%, 16 | 300: 214 100% 70%, 17 | 400: 214 100% 60%, 18 | 500: 214 100% 50%, 19 | 600: 214 100% 40%, 20 | 700: 214 100% 30%, 21 | 800: 214 100% 20%, 22 | 900: 214 100% 10%, 23 | ), 24 | secondary: ( 25 | 100: 284 71% 90%, 26 | 200: 284 71% 80%, 27 | 300: 284 71% 70%, 28 | 400: 284 71% 60%, 29 | 500: 284 71% 50%, 30 | 600: 284 71% 40%, 31 | 700: 284 71% 30%, 32 | 800: 284 71% 20%, 33 | 900: 284 71% 10%, 34 | ), 35 | accent: ( 36 | 100: 346 80% 90%, 37 | 200: 346 80% 80%, 38 | 300: 346 80% 70%, 39 | 400: 346 80% 60%, 40 | 500: 346 80% 50%, 41 | 600: 346 80% 40%, 42 | 700: 346 80% 30%, 43 | 800: 346 80% 20%, 44 | 900: 346 80% 10%, 45 | ) 46 | ) -------------------------------------------------------------------------------- /sass/abstracts/_font-families.scss: -------------------------------------------------------------------------------- 1 | 2 | $ff-primary: 'Heebo', sans-serif; 3 | $ff-secondary: 'Bungee', cursive; 4 | $ff-accent: 'Bungee Shade', cursive; 5 | -------------------------------------------------------------------------------- /sass/abstracts/_font-sizes.scss: -------------------------------------------------------------------------------- 1 | $font-sizes: ( 2 | small ( 3 | 100: .625rem, 4 | 200: .7625rem, 5 | 300: .8975rem, 6 | 400: 1.125rem, 7 | 500: 1.25rem, 8 | 600: 1.75rem, 9 | 700: 2.25rem, 10 | 800: 2.75rem, 11 | 900: 3.25rem, 12 | ), 13 | medium ( 14 | 100: .725rem, 15 | 200: .875rem, 16 | 300: 1rem, 17 | 400: 1.125rem, 18 | 500: 1.325rem, 19 | 600: 2rem, 20 | 700: 2.75rem, 21 | 800: 3.25rem, 22 | 900: 4rem, 23 | ), 24 | large ( 25 | 100: .725rem, 26 | 200: .875rem, 27 | 300: 1rem, 28 | 400: 1.125rem, 29 | 500: 1.325rem, 30 | 600: 2rem, 31 | 700: 2.75rem, 32 | 800: 3.5rem, 33 | 900: 5rem, 34 | ), 35 | ) 36 | 37 | // $base-font-sizes ( 38 | // small: 1.125rem, 39 | // medium: 1.25rem, 40 | // large: 1.5rem 41 | // ) 42 | // TODO: build @for loop for a font-scale 43 | 44 | 45 | -------------------------------------------------------------------------------- /sass/abstracts/_index.scss: -------------------------------------------------------------------------------- 1 | @forward 'colors'; 2 | @forward 'font-sizes'; 3 | @forward 'font-families'; 4 | @forward 'mixins'; 5 | @forward 'spacing'; -------------------------------------------------------------------------------- /sass/abstracts/_mixins.scss: -------------------------------------------------------------------------------- 1 | @use 'breakpoints' as *; 2 | 3 | @mixin mq($key) { 4 | 5 | $size: map-get($breakpoints, $key); 6 | 7 | @media only screen and (min-width: $size) { 8 | @content; 9 | } 10 | } -------------------------------------------------------------------------------- /sass/abstracts/_spacing.scss: -------------------------------------------------------------------------------- 1 | $spacer: 1rem; -------------------------------------------------------------------------------- /sass/base/_base.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: var(--ff-primary); 3 | } 4 | 5 | header { 6 | 7 | } -------------------------------------------------------------------------------- /sass/base/_index.scss: -------------------------------------------------------------------------------- 1 | @forward 'root'; 2 | @forward 'reset'; 3 | @forward 'base'; -------------------------------------------------------------------------------- /sass/base/_reset.scss: -------------------------------------------------------------------------------- 1 | /* Box sizing rules */ 2 | *, 3 | *::before, 4 | *::after { 5 | box-sizing: border-box; 6 | } 7 | 8 | /* Remove default margin */ 9 | body, 10 | h1, 11 | h2, 12 | h3, 13 | h4, 14 | p, 15 | figure, 16 | blockquote, 17 | dl, 18 | dd { 19 | margin: 0; 20 | } 21 | 22 | /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ 23 | ul[role='list'], 24 | ol[role='list'] { 25 | list-style: none; 26 | } 27 | 28 | /* Set core root defaults */ 29 | html:focus-within { 30 | scroll-behavior: smooth; 31 | } 32 | 33 | /* Set core body defaults */ 34 | body { 35 | min-height: 100vh; 36 | text-rendering: optimizeSpeed; 37 | line-height: 1.5; 38 | } 39 | 40 | /* A elements that don't have a class get default styles */ 41 | a:not([class]) { 42 | text-decoration-skip-ink: auto; 43 | } 44 | 45 | /* Make images easier to work with */ 46 | img, 47 | picture { 48 | max-width: 100%; 49 | display: block; 50 | } 51 | 52 | /* Inherit fonts for inputs and buttons */ 53 | input, 54 | button, 55 | textarea, 56 | select { 57 | font: inherit; 58 | } 59 | 60 | /* Remove all animations, transitions and smooth scroll for people that prefer not to see them */ 61 | @media (prefers-reduced-motion: reduce) { 62 | html:focus-within { 63 | scroll-behavior: auto; 64 | } 65 | 66 | *, 67 | *::before, 68 | *::after { 69 | animation-duration: 0.01ms !important; 70 | animation-iteration-count: 1 !important; 71 | transition-duration: 0.01ms !important; 72 | scroll-behavior: auto !important; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /sass/base/_root.scss: -------------------------------------------------------------------------------- 1 | @use '../abstracts' as *; 2 | 3 | :root { 4 | --ff-primary: #{$ff-primary}; 5 | --ff-secondary: #{$ff-secondary}; 6 | --ff-accent: #{$ff-accent}; 7 | 8 | --spacer: #{$spacer}; 9 | 10 | @each $color, $shade in $colors { 11 | 12 | @each $property, $value in $shade { 13 | --clr-#{$color}-#{$property}: #{$value}; 14 | } 15 | } 16 | 17 | @each $screen-size, $property in $font-sizes { 18 | @if $screen-size == small { 19 | @each $prop, $value in $property { 20 | --fs-#{$prop}: #{$value}; 21 | } 22 | } @else { 23 | @include mq($screen-size) { 24 | @each $prop, 25 | $value in $property { 26 | --fs-#{$prop}: #{$value}; 27 | } 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /sass/components/_card.scss: -------------------------------------------------------------------------------- 1 | 2 | .card { 3 | padding: var(--spacer); 4 | box-shadow: var(--shadow, var(--shadow-1)); 5 | } 6 | 7 | -------------------------------------------------------------------------------- /sass/components/_index.scss: -------------------------------------------------------------------------------- 1 | @forward 'card'; -------------------------------------------------------------------------------- /sass/layout/_index.scss: -------------------------------------------------------------------------------- 1 | @forward 'main-layout'; 2 | @forward 'with-sidebar'; -------------------------------------------------------------------------------- /sass/layout/_main-layout.scss: -------------------------------------------------------------------------------- 1 | @use '../utilities/grid' as *; 2 | 3 | .main-layout { 4 | @extend .grid !optional; 5 | grid-template-rows: auto 1fr auto; 6 | min-height: 100vh; 7 | } -------------------------------------------------------------------------------- /sass/layout/_with-sidebar.scss: -------------------------------------------------------------------------------- 1 | @use '../utilities/grid' as *; 2 | 3 | .with-sidebar { 4 | @extend .grid !optional; 5 | grid-template-columns: 1fr 20rem; 6 | } -------------------------------------------------------------------------------- /sass/style.scss: -------------------------------------------------------------------------------- 1 | @use 'base'; 2 | @use 'utilities'; 3 | @use 'components'; 4 | @use 'layout'; 5 | -------------------------------------------------------------------------------- /sass/utilities/_colors.scss: -------------------------------------------------------------------------------- 1 | @use '../abstracts'as *; 2 | 3 | @each $color, $shade in $colors { 4 | 5 | @each $property, $value in $shade { 6 | .text-#{$color}-#{$property} { 7 | color: hsl(var(--clr-#{$color}-#{$property})); 8 | } 9 | 10 | .bg-#{$color}-#{$property} { 11 | background-color: hsl(var(--clr-#{$color}-#{$property})); 12 | } 13 | } 14 | } 15 | 16 | .bg-gradient { 17 | color: hsl(var(--clr-neutral-100)); 18 | background-image: 19 | linear-gradient(var(--bg-deg, -45deg), 20 | hsl(var(--clr-primary-400)), 21 | hsl(var(--clr-secondary-500)), 22 | hsl(var(--clr-accent-500))); 23 | } 24 | -------------------------------------------------------------------------------- /sass/utilities/_columns.scss: -------------------------------------------------------------------------------- 1 | @use 'grid' as *; 2 | @use '../abstracts/' as *; 3 | 4 | .even-columns { 5 | @extend .grid; 6 | 7 | @include mq(medium) { 8 | grid-auto-flow: column; 9 | grid-auto-columns: 1fr; 10 | } 11 | } -------------------------------------------------------------------------------- /sass/utilities/_container.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: var(--width, 60ch); 3 | margin-inline: auto; 4 | padding-inline: var(--spacer); 5 | } -------------------------------------------------------------------------------- /sass/utilities/_flex.scss: -------------------------------------------------------------------------------- 1 | .flex { 2 | display: flex; 3 | gap: var(--gap, var(--spacer)); 4 | } 5 | 6 | @mixin flex($align: center, $justify: between) { 7 | @extend .flex; 8 | align-items: $align; 9 | justify-content: $justify; 10 | } -------------------------------------------------------------------------------- /sass/utilities/_flow.scss: -------------------------------------------------------------------------------- 1 | .flow > :where(:not(:first-child)) { 2 | margin-inline-start: var(--flow-spacer, var(--spacer)); 3 | } -------------------------------------------------------------------------------- /sass/utilities/_font-sizes.scss: -------------------------------------------------------------------------------- 1 | @use '../abstracts/' as *; 2 | 3 | @each $screen-size, $property in $font-sizes { 4 | @if $screen-size == small { 5 | @each $prop, $value in $property { 6 | .fs-#{$prop} { font-size: var(--fs-#{$prop}) } 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /sass/utilities/_grid.scss: -------------------------------------------------------------------------------- 1 | .grid { 2 | display: grid; 3 | gap: var(--gap, var(--spacer)); 4 | } 5 | 6 | // @mixin grid($align: start, $justify: between) { 7 | // @extend .grid; 8 | // align-items: $align; 9 | // justify-content: $justify; 10 | // } -------------------------------------------------------------------------------- /sass/utilities/_index.scss: -------------------------------------------------------------------------------- 1 | @forward 'colors'; 2 | @forward 'font-sizes'; 3 | @forward 'flow'; 4 | @forward 'container'; 5 | @forward 'flex'; 6 | @forward 'columns'; -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --ff-primary: Heebo, sans-serif; 3 | --ff-secondary: Bungee, cursive; 4 | --ff-accent: Bungee Shade, cursive; 5 | --spacer: 1rem; 6 | --clr-neutral-100: 0 0% 100%; 7 | --clr-neutral-200: 0 0% 90%; 8 | --clr-neutral-300: 0 0% 70%; 9 | --clr-neutral-400: 0 0% 60%; 10 | --clr-neutral-500: 0 0% 50%; 11 | --clr-neutral-600: 0 0% 40%; 12 | --clr-neutral-700: 0 0% 30%; 13 | --clr-neutral-800: 0 0% 10%; 14 | --clr-neutral-900: 0 0% 0%; 15 | --clr-primary-100: 214 100% 90%; 16 | --clr-primary-200: 214 100% 80%; 17 | --clr-primary-300: 214 100% 70%; 18 | --clr-primary-400: 214 100% 60%; 19 | --clr-primary-500: 214 100% 50%; 20 | --clr-primary-600: 214 100% 40%; 21 | --clr-primary-700: 214 100% 30%; 22 | --clr-primary-800: 214 100% 20%; 23 | --clr-primary-900: 214 100% 10%; 24 | --clr-secondary-100: 284 71% 90%; 25 | --clr-secondary-200: 284 71% 80%; 26 | --clr-secondary-300: 284 71% 70%; 27 | --clr-secondary-400: 284 71% 60%; 28 | --clr-secondary-500: 284 71% 50%; 29 | --clr-secondary-600: 284 71% 40%; 30 | --clr-secondary-700: 284 71% 30%; 31 | --clr-secondary-800: 284 71% 20%; 32 | --clr-secondary-900: 284 71% 10%; 33 | --clr-accent-100: 346 80% 90%; 34 | --clr-accent-200: 346 80% 80%; 35 | --clr-accent-300: 346 80% 70%; 36 | --clr-accent-400: 346 80% 60%; 37 | --clr-accent-500: 346 80% 50%; 38 | --clr-accent-600: 346 80% 40%; 39 | --clr-accent-700: 346 80% 30%; 40 | --clr-accent-800: 346 80% 20%; 41 | --clr-accent-900: 346 80% 10%; 42 | --fs-100: 0.625rem; 43 | --fs-200: 0.7625rem; 44 | --fs-300: 0.8975rem; 45 | --fs-400: 1.125rem; 46 | --fs-500: 1.25rem; 47 | --fs-600: 1.75rem; 48 | --fs-700: 2.25rem; 49 | --fs-800: 2.75rem; 50 | --fs-900: 3.25rem; 51 | } 52 | @media only screen and (min-width: 50em) { 53 | :root { 54 | --fs-100: 0.725rem; 55 | --fs-200: 0.875rem; 56 | --fs-300: 1rem; 57 | --fs-400: 1.125rem; 58 | --fs-500: 1.325rem; 59 | --fs-600: 2rem; 60 | --fs-700: 2.75rem; 61 | --fs-800: 3.25rem; 62 | --fs-900: 4rem; 63 | } 64 | } 65 | @media only screen and (min-width: 65em) { 66 | :root { 67 | --fs-100: 0.725rem; 68 | --fs-200: 0.875rem; 69 | --fs-300: 1rem; 70 | --fs-400: 1.125rem; 71 | --fs-500: 1.325rem; 72 | --fs-600: 2rem; 73 | --fs-700: 2.75rem; 74 | --fs-800: 3.5rem; 75 | --fs-900: 5rem; 76 | } 77 | } 78 | 79 | /* Box sizing rules */ 80 | *, 81 | *::before, 82 | *::after { 83 | box-sizing: border-box; 84 | } 85 | 86 | /* Remove default margin */ 87 | body, 88 | h1, 89 | h2, 90 | h3, 91 | h4, 92 | p, 93 | figure, 94 | blockquote, 95 | dl, 96 | dd { 97 | margin: 0; 98 | } 99 | 100 | /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */ 101 | ul[role=list], 102 | ol[role=list] { 103 | list-style: none; 104 | } 105 | 106 | /* Set core root defaults */ 107 | html:focus-within { 108 | scroll-behavior: smooth; 109 | } 110 | 111 | /* Set core body defaults */ 112 | body { 113 | min-height: 100vh; 114 | text-rendering: optimizeSpeed; 115 | line-height: 1.5; 116 | } 117 | 118 | /* A elements that don't have a class get default styles */ 119 | a:not([class]) { 120 | text-decoration-skip-ink: auto; 121 | } 122 | 123 | /* Make images easier to work with */ 124 | img, 125 | picture { 126 | max-width: 100%; 127 | display: block; 128 | } 129 | 130 | /* Inherit fonts for inputs and buttons */ 131 | input, 132 | button, 133 | textarea, 134 | select { 135 | font: inherit; 136 | } 137 | 138 | /* Remove all animations, transitions and smooth scroll for people that prefer not to see them */ 139 | @media (prefers-reduced-motion: reduce) { 140 | html:focus-within { 141 | scroll-behavior: auto; 142 | } 143 | 144 | *, 145 | *::before, 146 | *::after { 147 | animation-duration: 0.01ms !important; 148 | animation-iteration-count: 1 !important; 149 | transition-duration: 0.01ms !important; 150 | scroll-behavior: auto !important; 151 | } 152 | } 153 | body { 154 | font-family: var(--ff-primary); 155 | } 156 | 157 | .text-neutral-100 { 158 | color: hsl(var(--clr-neutral-100)); 159 | } 160 | 161 | .bg-neutral-100 { 162 | background-color: hsl(var(--clr-neutral-100)); 163 | } 164 | 165 | .text-neutral-200 { 166 | color: hsl(var(--clr-neutral-200)); 167 | } 168 | 169 | .bg-neutral-200 { 170 | background-color: hsl(var(--clr-neutral-200)); 171 | } 172 | 173 | .text-neutral-300 { 174 | color: hsl(var(--clr-neutral-300)); 175 | } 176 | 177 | .bg-neutral-300 { 178 | background-color: hsl(var(--clr-neutral-300)); 179 | } 180 | 181 | .text-neutral-400 { 182 | color: hsl(var(--clr-neutral-400)); 183 | } 184 | 185 | .bg-neutral-400 { 186 | background-color: hsl(var(--clr-neutral-400)); 187 | } 188 | 189 | .text-neutral-500 { 190 | color: hsl(var(--clr-neutral-500)); 191 | } 192 | 193 | .bg-neutral-500 { 194 | background-color: hsl(var(--clr-neutral-500)); 195 | } 196 | 197 | .text-neutral-600 { 198 | color: hsl(var(--clr-neutral-600)); 199 | } 200 | 201 | .bg-neutral-600 { 202 | background-color: hsl(var(--clr-neutral-600)); 203 | } 204 | 205 | .text-neutral-700 { 206 | color: hsl(var(--clr-neutral-700)); 207 | } 208 | 209 | .bg-neutral-700 { 210 | background-color: hsl(var(--clr-neutral-700)); 211 | } 212 | 213 | .text-neutral-800 { 214 | color: hsl(var(--clr-neutral-800)); 215 | } 216 | 217 | .bg-neutral-800 { 218 | background-color: hsl(var(--clr-neutral-800)); 219 | } 220 | 221 | .text-neutral-900 { 222 | color: hsl(var(--clr-neutral-900)); 223 | } 224 | 225 | .bg-neutral-900 { 226 | background-color: hsl(var(--clr-neutral-900)); 227 | } 228 | 229 | .text-primary-100 { 230 | color: hsl(var(--clr-primary-100)); 231 | } 232 | 233 | .bg-primary-100 { 234 | background-color: hsl(var(--clr-primary-100)); 235 | } 236 | 237 | .text-primary-200 { 238 | color: hsl(var(--clr-primary-200)); 239 | } 240 | 241 | .bg-primary-200 { 242 | background-color: hsl(var(--clr-primary-200)); 243 | } 244 | 245 | .text-primary-300 { 246 | color: hsl(var(--clr-primary-300)); 247 | } 248 | 249 | .bg-primary-300 { 250 | background-color: hsl(var(--clr-primary-300)); 251 | } 252 | 253 | .text-primary-400 { 254 | color: hsl(var(--clr-primary-400)); 255 | } 256 | 257 | .bg-primary-400 { 258 | background-color: hsl(var(--clr-primary-400)); 259 | } 260 | 261 | .text-primary-500 { 262 | color: hsl(var(--clr-primary-500)); 263 | } 264 | 265 | .bg-primary-500 { 266 | background-color: hsl(var(--clr-primary-500)); 267 | } 268 | 269 | .text-primary-600 { 270 | color: hsl(var(--clr-primary-600)); 271 | } 272 | 273 | .bg-primary-600 { 274 | background-color: hsl(var(--clr-primary-600)); 275 | } 276 | 277 | .text-primary-700 { 278 | color: hsl(var(--clr-primary-700)); 279 | } 280 | 281 | .bg-primary-700 { 282 | background-color: hsl(var(--clr-primary-700)); 283 | } 284 | 285 | .text-primary-800 { 286 | color: hsl(var(--clr-primary-800)); 287 | } 288 | 289 | .bg-primary-800 { 290 | background-color: hsl(var(--clr-primary-800)); 291 | } 292 | 293 | .text-primary-900 { 294 | color: hsl(var(--clr-primary-900)); 295 | } 296 | 297 | .bg-primary-900 { 298 | background-color: hsl(var(--clr-primary-900)); 299 | } 300 | 301 | .text-secondary-100 { 302 | color: hsl(var(--clr-secondary-100)); 303 | } 304 | 305 | .bg-secondary-100 { 306 | background-color: hsl(var(--clr-secondary-100)); 307 | } 308 | 309 | .text-secondary-200 { 310 | color: hsl(var(--clr-secondary-200)); 311 | } 312 | 313 | .bg-secondary-200 { 314 | background-color: hsl(var(--clr-secondary-200)); 315 | } 316 | 317 | .text-secondary-300 { 318 | color: hsl(var(--clr-secondary-300)); 319 | } 320 | 321 | .bg-secondary-300 { 322 | background-color: hsl(var(--clr-secondary-300)); 323 | } 324 | 325 | .text-secondary-400 { 326 | color: hsl(var(--clr-secondary-400)); 327 | } 328 | 329 | .bg-secondary-400 { 330 | background-color: hsl(var(--clr-secondary-400)); 331 | } 332 | 333 | .text-secondary-500 { 334 | color: hsl(var(--clr-secondary-500)); 335 | } 336 | 337 | .bg-secondary-500 { 338 | background-color: hsl(var(--clr-secondary-500)); 339 | } 340 | 341 | .text-secondary-600 { 342 | color: hsl(var(--clr-secondary-600)); 343 | } 344 | 345 | .bg-secondary-600 { 346 | background-color: hsl(var(--clr-secondary-600)); 347 | } 348 | 349 | .text-secondary-700 { 350 | color: hsl(var(--clr-secondary-700)); 351 | } 352 | 353 | .bg-secondary-700 { 354 | background-color: hsl(var(--clr-secondary-700)); 355 | } 356 | 357 | .text-secondary-800 { 358 | color: hsl(var(--clr-secondary-800)); 359 | } 360 | 361 | .bg-secondary-800 { 362 | background-color: hsl(var(--clr-secondary-800)); 363 | } 364 | 365 | .text-secondary-900 { 366 | color: hsl(var(--clr-secondary-900)); 367 | } 368 | 369 | .bg-secondary-900 { 370 | background-color: hsl(var(--clr-secondary-900)); 371 | } 372 | 373 | .text-accent-100 { 374 | color: hsl(var(--clr-accent-100)); 375 | } 376 | 377 | .bg-accent-100 { 378 | background-color: hsl(var(--clr-accent-100)); 379 | } 380 | 381 | .text-accent-200 { 382 | color: hsl(var(--clr-accent-200)); 383 | } 384 | 385 | .bg-accent-200 { 386 | background-color: hsl(var(--clr-accent-200)); 387 | } 388 | 389 | .text-accent-300 { 390 | color: hsl(var(--clr-accent-300)); 391 | } 392 | 393 | .bg-accent-300 { 394 | background-color: hsl(var(--clr-accent-300)); 395 | } 396 | 397 | .text-accent-400 { 398 | color: hsl(var(--clr-accent-400)); 399 | } 400 | 401 | .bg-accent-400 { 402 | background-color: hsl(var(--clr-accent-400)); 403 | } 404 | 405 | .text-accent-500 { 406 | color: hsl(var(--clr-accent-500)); 407 | } 408 | 409 | .bg-accent-500 { 410 | background-color: hsl(var(--clr-accent-500)); 411 | } 412 | 413 | .text-accent-600 { 414 | color: hsl(var(--clr-accent-600)); 415 | } 416 | 417 | .bg-accent-600 { 418 | background-color: hsl(var(--clr-accent-600)); 419 | } 420 | 421 | .text-accent-700 { 422 | color: hsl(var(--clr-accent-700)); 423 | } 424 | 425 | .bg-accent-700 { 426 | background-color: hsl(var(--clr-accent-700)); 427 | } 428 | 429 | .text-accent-800 { 430 | color: hsl(var(--clr-accent-800)); 431 | } 432 | 433 | .bg-accent-800 { 434 | background-color: hsl(var(--clr-accent-800)); 435 | } 436 | 437 | .text-accent-900 { 438 | color: hsl(var(--clr-accent-900)); 439 | } 440 | 441 | .bg-accent-900 { 442 | background-color: hsl(var(--clr-accent-900)); 443 | } 444 | 445 | .bg-gradient { 446 | color: hsl(var(--clr-neutral-100)); 447 | background-image: linear-gradient(var(--bg-deg, -45deg), hsl(var(--clr-primary-400)), hsl(var(--clr-secondary-500)), hsl(var(--clr-accent-500))); 448 | } 449 | 450 | .fs-100 { 451 | font-size: var(--fs-100); 452 | } 453 | 454 | .fs-200 { 455 | font-size: var(--fs-200); 456 | } 457 | 458 | .fs-300 { 459 | font-size: var(--fs-300); 460 | } 461 | 462 | .fs-400 { 463 | font-size: var(--fs-400); 464 | } 465 | 466 | .fs-500 { 467 | font-size: var(--fs-500); 468 | } 469 | 470 | .fs-600 { 471 | font-size: var(--fs-600); 472 | } 473 | 474 | .fs-700 { 475 | font-size: var(--fs-700); 476 | } 477 | 478 | .fs-800 { 479 | font-size: var(--fs-800); 480 | } 481 | 482 | .fs-900 { 483 | font-size: var(--fs-900); 484 | } 485 | 486 | .flow > :where(:not(:first-child)) { 487 | margin-inline-start: var(--flow-spacer, var(--spacer)); 488 | } 489 | 490 | .container { 491 | max-width: var(--width, 60ch); 492 | margin-inline: auto; 493 | padding-inline: var(--spacer); 494 | } 495 | 496 | .flex { 497 | display: flex; 498 | gap: var(--gap, var(--spacer)); 499 | } 500 | 501 | .grid, .with-sidebar, .main-layout, .even-columns { 502 | display: grid; 503 | gap: var(--gap, var(--spacer)); 504 | } 505 | 506 | @media only screen and (min-width: 50em) { 507 | .even-columns { 508 | grid-auto-flow: column; 509 | grid-auto-columns: 1fr; 510 | } 511 | } 512 | 513 | .card { 514 | padding: var(--spacer); 515 | box-shadow: var(--shadow, var(--shadow-1)); 516 | } 517 | 518 | .main-layout { 519 | grid-template-rows: auto 1fr auto; 520 | min-height: 100vh; 521 | } 522 | 523 | .with-sidebar { 524 | grid-template-columns: 1fr 20rem; 525 | } 526 | 527 | /*# sourceMappingURL=style.css.map */ 528 | -------------------------------------------------------------------------------- /style.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sourceRoot":"","sources":["sass/base/_root.scss","sass/abstracts/_mixins.scss","sass/base/_reset.scss","sass/base/_base.scss","sass/utilities/_colors.scss","sass/utilities/_font-sizes.scss","sass/utilities/_flow.scss","sass/utilities/_container.scss","sass/utilities/_flex.scss","sass/utilities/_grid.scss","sass/utilities/_columns.scss","sass/components/_card.scss","sass/layout/_main-layout.scss","sass/layout/_with-sidebar.scss"],"names":[],"mappings":"AAEA;EACE;EACA;EACA;EAEA;EAKI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAOE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;;ACbN;EDJF;IAuBU;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;;;ACnBR;EDJF;IAuBU;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;;;;AEzBV;AACA;AAAA;AAAA;EAGE;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;AAAA;EAEE;EACA;;;AAGF;AACA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AACA;EACE;IACE;;;EAGF;AAAA;AAAA;IAGE;IACA;IACA;IACA;;;ACvEJ;EACE;;;ACIE;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AALF;EACE;;;AAGF;EACE;;;AAKN;EACE;EACA,kBACE;;;ACbE;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;AAAf;EAAe;;;ACLrB;EACE;;;ACDF;EACE;EACA;EACA;;;ACHF;EACE;EACA;;;ACFF;EACE;EACA;;;ARIA;ESHF;IAII;IACA;;;;ACPJ;EACE;EACA;;;ACDF;EAEE;EACA;;;ACHF;EAEE","file":"style.css"} --------------------------------------------------------------------------------