├── .gitignore ├── .prettierignore ├── .replit ├── LICENSE ├── README.md ├── csscomb.config.json ├── dist ├── js │ └── toggle.min.js ├── v1 │ ├── dark.css │ ├── dark.min.css │ ├── library.css │ ├── library.min.css │ ├── light.css │ └── light.min.css └── v2 │ ├── forms.css │ ├── forms.min.css │ ├── full │ ├── dark.css │ ├── dark.min.css │ ├── light.css │ └── light.min.css │ ├── images.css │ ├── images.min.css │ ├── tables.css │ ├── tables.min.css │ ├── themes │ ├── dark.css │ ├── dark.min.css │ ├── light.css │ └── light.min.css │ ├── typography.css │ └── typography.min.css ├── eslint.config.json ├── package.json ├── prettier.config.json ├── replit.nix ├── src ├── builds │ ├── forms.css │ ├── full │ │ ├── dark.css │ │ └── light.css │ ├── images.css │ ├── tables.css │ ├── themes │ │ ├── dark.css │ │ └── light.css │ └── typography.css ├── preview │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── files.html │ ├── furretcss │ │ ├── js │ │ │ └── theme-toggle.js │ │ └── v1 │ │ │ ├── dark.css │ │ │ ├── dark.min.css │ │ │ ├── library.css │ │ │ ├── library.min.css │ │ │ ├── light.css │ │ │ └── light.min.css │ ├── highlightjs │ │ ├── dark.css │ │ ├── highlight.js │ │ └── light.css │ ├── index.html │ ├── logo.png │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ ├── site.webmanifest │ └── theming.html └── styles │ ├── assets │ ├── mail.svg │ ├── message.svg │ └── phone.svg │ ├── core.css │ ├── partials │ ├── _code.css │ ├── _footer.css │ ├── _forms.css │ ├── _images.css │ ├── _lists.css │ ├── _meta.css │ ├── _misc.css │ ├── _nav.css │ ├── _tables.css │ └── _typography.css │ ├── themes │ ├── variables-dark.css │ └── variables-light.css │ └── variables.css ├── stylelint.config.json ├── website ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── files.html ├── furretcss │ ├── js │ │ ├── theme-toggle.js │ │ └── theme-toggle.js.map │ ├── v1 │ │ ├── dark.css │ │ ├── dark.min.css │ │ ├── library.css │ │ ├── library.min.css │ │ ├── light.css │ │ └── light.min.css │ └── v2 │ │ ├── forms.css │ │ ├── forms.min.css │ │ ├── full │ │ ├── dark.css │ │ ├── dark.min.css │ │ ├── light.css │ │ └── light.min.css │ │ ├── images.css │ │ ├── images.min.css │ │ ├── tables.css │ │ ├── tables.min.css │ │ ├── themes │ │ ├── dark.css │ │ ├── dark.min.css │ │ ├── light.css │ │ └── light.min.css │ │ ├── typography.css │ │ └── typography.min.css ├── highlightjs │ ├── dark.css │ ├── furret.css │ ├── highlight.js │ ├── highlight.js.map │ └── light.css ├── index.html ├── logo.png ├── mstile-150x150.png ├── safari-pinned-tab.svg ├── site.webmanifest └── theming.html └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | 93 | # Gatsby files 94 | .cache/ 95 | # Comment in the public line in if your project uses Gatsby and not Next.js 96 | # https://nextjs.org/blog/next-9-1#public-directory-support 97 | # public 98 | 99 | # vuepress build output 100 | .vuepress/dist 101 | 102 | # vuepress v2.x temp and cache directory 103 | .temp 104 | .cache 105 | 106 | # Docusaurus cache and generated files 107 | .docusaurus 108 | 109 | # Serverless directories 110 | .serverless/ 111 | 112 | # FuseBox cache 113 | .fusebox/ 114 | 115 | # DynamoDB Local files 116 | .dynamodb/ 117 | 118 | # TernJS port file 119 | .tern-port 120 | 121 | # Stores VSCode versions used for testing VSCode extensions 122 | .vscode-test 123 | 124 | # yarn v2 125 | .yarn/cache 126 | .yarn/unplugged 127 | .yarn/build-state.yml 128 | .yarn/install-state.gz 129 | .pnp.* 130 | yarn-error.log 131 | 132 | # replit 133 | .upm 134 | .config 135 | .cache -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | yarn-error.log 132 | 133 | # distribution files 134 | dist/ 135 | website/ 136 | 137 | # replit 138 | .upm/ 139 | .config/ 140 | .cache/ -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | entrypoint = "src/styles/core.css" 2 | run = "yarn prod" 3 | 4 | hidden = [".config"] 5 | 6 | [nix] 7 | channel = "stable-21_11" 8 | 9 | [env] 10 | XDG_CONFIG_HOME = "/home/runner/.config" 11 | 12 | [packager] 13 | language = "nodejs" 14 | 15 | [packager.features] 16 | packageSearch = true 17 | guessImports = true 18 | enabledForHosting = false 19 | 20 | [languages.javascript] 21 | pattern = "**/{*.js,*.jsx,*.ts,*.tsx}" 22 | 23 | [languages.javascript.languageServer] 24 | start = [ "typescript-language-server", "--stdio" ] 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Ray Arayilakath 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # furret.css 2 | 3 | My personal website styling toolkit, modeled after the lovely [Water.css](https://watercss.kognise.dev/) 4 | by Kognise. Written to allow quick and beautiful styling for simple document-like 5 | websites. Visit the [website](https://css.furret.codes/) see it in action and get 6 | started! 7 | 8 | You can also use a batteries-in furret.css template [on Replit](https://replit.com/@RayhanADev/furretcss). 9 | 10 | [![Run on Replit](https://replit.com/badge/github/RayhanADev/furretcss)](https://replit.com/@RayhanADev/furretcss) 11 | 12 | Or even more simply, paste the following into the `` of your HTML: 13 | 14 | ```html 15 | 16 | ``` 17 | 18 | ![](https://edge.furret.codes/f/furretcss-v2-preview.gif) 19 | -------------------------------------------------------------------------------- /csscomb.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "always-semicolon": true, 3 | "color-case": "lower", 4 | "block-indent": "\t", 5 | "color-shorthand": false, 6 | "element-case": "lower", 7 | "eof-newline": true, 8 | "leading-zero": true, 9 | "quotes": "double", 10 | "sort-order-fallback": "abc", 11 | "space-before-colon": "", 12 | "space-after-colon": " ", 13 | "space-before-combinator": " ", 14 | "space-after-combinator": " ", 15 | "space-between-declarations": "\n", 16 | "space-before-opening-brace": " ", 17 | "space-after-opening-brace": "\n", 18 | "space-after-selector-delimiter": "\n", 19 | "space-before-selector-delimiter": "", 20 | "space-before-closing-brace": "\n", 21 | "strip-spaces": true, 22 | "unitless-zero": true, 23 | "vendor-prefix-align": true 24 | } 25 | -------------------------------------------------------------------------------- /dist/js/toggle.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function _createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function(){};return{s:F,n:function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function(){it=it.call(o)},n:function(){var step=it.next();return normalCompletion=step.done,step},e:function(_e2){didErr=!0,err=_e2},f:function(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i li { 231 | color: var(--color-main); 232 | font-family: var(--font-body); 233 | font-size: 1.6rem; 234 | font-weight: 400; 235 | line-height: 1.8em; 236 | list-style: none; 237 | padding: 0 0 0 20px; 238 | position: relative; 239 | }ul > li:before { 240 | border-width: 1px; 241 | border-bottom: 0 solid var(--accent-main); 242 | border-left: 0 solid var(--accent-main); 243 | border-right: 2px solid var(--accent-main); 244 | border-top: 2px solid var(--accent-main); 245 | content: ""; 246 | height: 5px; 247 | left: 0; 248 | position: absolute; 249 | top: 14px; 250 | transform: rotate(45deg); 251 | width: 5px; 252 | }@media (max-width:375px) { 253 | ul > li:before { 254 | top: 8px; 255 | } 256 | }ol { 257 | counter-reset: item; 258 | margin: 5px 0 15px; 259 | padding: 0; 260 | }ol > li { 261 | color: var(--color-main); 262 | counter-increment: item; 263 | font-weight: 400; 264 | line-height: 1.8em; 265 | list-style: none; 266 | padding: 0 0 0 20px; 267 | position: relative; 268 | }ol > li, 269 | ol > li:before { 270 | font-family: var(--font-body); 271 | font-size: 1.6rem; 272 | }ol > li:before { 273 | color: var(--accent-main); 274 | content: counter(item) ")"; 275 | height: 5px; 276 | left: -4px; 277 | position: absolute; 278 | top: 0; 279 | width: 5px; 280 | }@media (max-width:375px) { 281 | ol > li:before { 282 | left: 0; 283 | } 284 | }form { 285 | align-content: flex-start; 286 | display: flex; 287 | flex-wrap: wrap; 288 | justify-content: flex-start; 289 | margin: 25px auto 50px; 290 | min-height: 50px; 291 | padding: 10px 0; 292 | width: 100%; 293 | }form header { 294 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 295 | background-position: 0 40%; 296 | background-repeat: no-repeat; 297 | background-size: 100% 30%; 298 | color: var(--color-main); 299 | display: table; 300 | font-family: var(--font-display); 301 | font-size: 3rem; 302 | font-weight: 700; 303 | line-height: 3em; 304 | padding: 0 5px; 305 | z-index: 20; 306 | }form header, 307 | form p { 308 | margin-left: 10px; 309 | }form fieldset { 310 | align-content: center; 311 | border: none; 312 | display: flex; 313 | flex-basis: 100%; 314 | flex-wrap: wrap; 315 | justify-content: flex-start; 316 | margin-bottom: 20px; 317 | }form fieldset legend { 318 | color: var(--color-main); 319 | display: table; 320 | line-height: 2.4rem; 321 | }form fieldset legend, 322 | form label { 323 | font-family: var(--font-display); 324 | font-size: 2rem; 325 | font-weight: 700; 326 | margin-left: 10px; 327 | padding: 0 5px; 328 | z-index: 20; 329 | }form label { 330 | color: var(--color-strong); 331 | display: inline-block; 332 | line-height: 2.2em; 333 | }form label + input, 334 | form label + textarea { 335 | background: var(--background-darker); 336 | border: none; 337 | border-radius: 0.5rem; 338 | color: var(--color-main); 339 | display: block; 340 | font-family: var(--font-body); 341 | font-size: 1.6rem; 342 | font-weight: 400; 343 | line-height: 2.5em; 344 | margin-bottom: 20px; 345 | margin-top: -25px; 346 | outline: none; 347 | padding: 0.5rem 1rem; 348 | width: 100%; 349 | z-index: 10; 350 | }form label + textarea { 351 | flex-basis: 100%; 352 | }form input:hover, 353 | form textarea:hover, 354 | input:focus, 355 | textarea:focus { 356 | background: var(--background-dark); 357 | }form input:disabled { 358 | background-color: var(--background-dark); 359 | cursor: not-allowed; 360 | }form input[type=submit] { 361 | background: var(--background-darker); 362 | border: none; 363 | border-radius: 0.5rem; 364 | color: var(--color-main); 365 | cursor: pointer; 366 | display: block; 367 | flex-grow: 1; 368 | font-family: var(--font-display); 369 | font-size: 1.6rem; 370 | font-weight: 700; 371 | line-height: 2.5em; 372 | margin: 5px 5px 19px; 373 | outline: none; 374 | padding: 0.5rem 1rem; 375 | z-index: 10; 376 | }form input[type=submit]:hover, 377 | input[type=submit]:focus { 378 | background-color: var(--background-dark); 379 | }form input[type=reset] { 380 | background: var(--background-darker); 381 | border: none; 382 | border-radius: 0.5rem; 383 | color: var(--color-main); 384 | cursor: pointer; 385 | display: block; 386 | flex-grow: 1; 387 | font-family: var(--font-display); 388 | font-size: 1.6rem; 389 | font-weight: 700; 390 | line-height: 2.5em; 391 | margin: 5px 5px 19px; 392 | outline: none; 393 | padding: 0.5rem 1rem; 394 | z-index: 10; 395 | }form input[type=reset]:hover, 396 | input[type=reset]:focus { 397 | background-color: var(--background-dark); 398 | }form input[type=checkbox], 399 | input[type=radio] { 400 | appearance: none; 401 | background: var(--background-darkest); 402 | border: 2px solid var(--color-main); 403 | border-radius: 50%; 404 | color: var(--background-darkest); 405 | display: grid; 406 | font: inherit; 407 | height: 20px; 408 | margin: 0; 409 | place-content: center; 410 | transform: translateY(6.5px); 411 | width: 20px; 412 | }form input[type=checkbox]:before, 413 | input[type=radio]:before { 414 | border-radius: 50%; 415 | box-shadow: inset 10px 10px var(--accent-main); 416 | content: ""; 417 | height: 12px; 418 | transform: scale(0); 419 | transition: transform 0.12s ease-in-out; 420 | width: 12px; 421 | }form input[type=checkbox]:checked:before, 422 | input[type=radio]:checked:before { 423 | transform: scale(1); 424 | }form input[type=checkbox]:disabled, 425 | input[type=radio]:disabled { 426 | border-color: var(--color-dim); 427 | }form input[type=checkbox] + label, 428 | input[type=radio] + label { 429 | color: var(--color-strong); 430 | display: inline-block; 431 | font-family: var(--font-display); 432 | font-size: 1.6rem; 433 | font-weight: 400; 434 | line-height: 1.6em; 435 | margin: 0; 436 | padding: 0 5px; 437 | z-index: 20; 438 | }form input[type=checkbox]:disabled + label, 439 | input[type=radio]:disabled + label { 440 | color: var(--color-dim); 441 | cursor: not-allowed; 442 | }@media (max-width:375px) { 443 | form { 444 | width: 100%; 445 | }form label + input, 446 | form label + textarea { 447 | margin-top: -16px; 448 | }form input[type=checkbox], 449 | input[type=radio] { 450 | height: 15px; 451 | transform: translateY(3px); 452 | width: 15px; 453 | }form input[type=checkbox]:before, 454 | input[type=radio]:before { 455 | height: 10px; 456 | width: 10px; 457 | } 458 | }button { 459 | background: var(--background-darker); 460 | border: none; 461 | border-radius: 0.5rem; 462 | color: var(--color-main); 463 | cursor: pointer; 464 | display: block; 465 | font-family: var(--font-display); 466 | font-size: 1.6rem; 467 | font-weight: 700; 468 | line-height: 2.5em; 469 | margin: 5px 5px 19px; 470 | min-width: 125px; 471 | outline: none; 472 | padding: 0.5rem 1rem; 473 | z-index: 10; 474 | }button:disabled, 475 | button:focus, 476 | button:hover { 477 | background-color: var(--background-dark); 478 | }button:disabled { 479 | cursor: not-allowed; 480 | }footer { 481 | border-top: 2px solid var(--accent-main); 482 | color: var(--color-main); 483 | font-size: 1rem; 484 | letter-spacing: 1px; 485 | line-height: normal; 486 | margin-top: 50px; 487 | padding-top: 8px; 488 | text-align: center; 489 | text-transform: uppercase; 490 | }footer a { 491 | transform-origin: 0 -10px; 492 | }footer a:before { 493 | transform-origin: 0 15px; 494 | }footer a:after { 495 | border: 5.5px solid transparent; 496 | bottom: -3px; 497 | }@media (prefers-reduced-motion:no-preference) { 498 | footer a:hover:before { 499 | background: var(--accent-main); 500 | transform: scaleY(0.25); 501 | transition: 0.1s ease-out; 502 | }footer a:after { 503 | right: -7.75px; 504 | transform: none; 505 | transition: transform 50ms ease-out 0.1s; 506 | }footer a:hover:after { 507 | border-left-color: var(--accent-main); 508 | } 509 | }@media (max-width:375px) { 510 | footer a:before { 511 | transform-origin: 0 9px; 512 | }footer a:after { 513 | border: 4px solid transparent; 514 | bottom: -1px; 515 | }footer a:hover:after { 516 | right: -6px; 517 | } 518 | }img { 519 | height: auto; 520 | max-width: 100%; 521 | }flex-break { 522 | flex-basis: 100%; 523 | width: 0; 524 | } 525 | -------------------------------------------------------------------------------- /dist/v1/library.min.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-strong: #000000; 3 | --color-main: #434242; 4 | --color-dim: #737373; 5 | --accent-strong: #0676a2; 6 | --accent-main: #7ddaff; 7 | --accent-dim: #a8dff5; 8 | --highlight-color: rgba(125,218,255,0.8); 9 | --selection-color: rgba(125,218,255,0.2); 10 | --background-dark: #e3e3e3; 11 | --background-darker: #f3f3f3; 12 | --background-darkest: #ffffff; 13 | }@media (prefers-color-scheme:dark) { 14 | :root { 15 | --color-strong: #ebebeb; 16 | --color-main: #e3dede; 17 | --color-dim: #a2a2a2; 18 | --accent-strong: #0676a2; 19 | --accent-main: #0f9ad2; 20 | --accent-dim: #a8dff5; 21 | --highlight-color: rgba(15,154,210,0.8); 22 | --selection-color: rgba(15,154,210,0.2); 23 | --background-dark: #212121; 24 | --background-darker: #121212; 25 | --background-darkest: #050505; 26 | } 27 | }:root { 28 | --font-display: -apple-system,blinkmacsystemfont,"Segoe UI",roboto,helvetica,arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 29 | --font-body: georgia,"Times New Roman",times,serif; 30 | --font-monospace: monospace; 31 | }*, 32 | :after, 33 | :before { 34 | box-sizing: inherit; 35 | }html { 36 | background-color: var(--background-darkest); 37 | box-sizing: border-box; 38 | }body, 39 | html { 40 | -webkit-font-smoothing: antialiased; 41 | font-family: var(--font-display); 42 | font-size: 78.125%; 43 | line-height: 78.125%; 44 | margin: 0; 45 | padding: 0; 46 | }::selection { 47 | background-color: var(--selection-color); 48 | }::-webkit-scrollbar { 49 | height: 5px; 50 | width: 5px; 51 | }::-webkit-scrollbar-track { 52 | background: var(--background-dark); 53 | border-radius: 0.5rem; 54 | }::-webkit-scrollbar-thumb { 55 | background: var(--color-dim); 56 | border-radius: 0.5rem; 57 | }::-webkit-scrollbar-thumb:hover { 58 | background: var(--color-main); 59 | border-radius: 0.5rem; 60 | }.container { 61 | margin: 40px auto 0; 62 | max-width: 700px; 63 | padding: 20px; 64 | }@media (max-width:375px) { 65 | body, 66 | html { 67 | font-size: 50%; 68 | }.container { 69 | margin: 2rem auto 0; 70 | padding: 10px 20px; 71 | width: 350px; 72 | } 73 | }h1 { 74 | font-size: 6rem; 75 | line-height: 6rem; 76 | padding: 10px 20px 0 13.25px; 77 | }h1, 78 | h2 { 79 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 80 | background-position: 0 30%; 81 | background-repeat: no-repeat; 82 | background-size: 100% 65%; 83 | color: var(--color-strong); 84 | display: table; 85 | letter-spacing: -1px; 86 | margin: 0 0 5rem; 87 | }h2 { 88 | font-size: 5rem; 89 | line-height: 5rem; 90 | padding: 8.75px 17.5px 0 13.25px; 91 | }h3 { 92 | font-size: 4rem; 93 | line-height: 4rem; 94 | padding: 7.5px 15px 0 13.25px; 95 | }h3, 96 | h4 { 97 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 98 | background-position: 0 30%; 99 | background-repeat: no-repeat; 100 | background-size: 100% 65%; 101 | color: var(--color-strong); 102 | display: table; 103 | letter-spacing: -1px; 104 | margin: 0 0 5rem; 105 | }h4 { 106 | font-size: 3rem; 107 | line-height: 3rem; 108 | padding: 9px 13.25px 0; 109 | }h5 { 110 | font-size: 2.5rem; 111 | line-height: 2.5rem; 112 | }h5, 113 | h6 { 114 | color: var(--color-strong); 115 | display: table; 116 | letter-spacing: -1px; 117 | margin: 0 0 5rem; 118 | padding: 9px 13.25px 0; 119 | }h6 { 120 | font-size: 2rem; 121 | line-height: 2rem; 122 | }p { 123 | color: var(--color-main); 124 | font-family: var(--font-body); 125 | font-size: 1.6rem; 126 | font-weight: 400; 127 | line-height: 1.8em; 128 | }strong { 129 | color: var(--accent-strong); 130 | }b, 131 | strong { 132 | font-family: var(--font-body); 133 | font-size: 1.6rem; 134 | font-weight: 700; 135 | line-height: 1.8em; 136 | }b, 137 | em { 138 | color: var(--color-main); 139 | }em { 140 | font-family: var(--font-body); 141 | font-size: 1.6rem; 142 | font-style: italic; 143 | font-weight: 300; 144 | line-height: 1.8em; 145 | }a { 146 | color: var(--color-strong); 147 | cursor: pointer; 148 | display: inline-block; 149 | margin: 0; 150 | padding: 0 4px; 151 | position: relative; 152 | text-decoration: none; 153 | }a:after, 154 | a:before { 155 | content: ""; 156 | display: block; 157 | position: absolute; 158 | z-index: -1; 159 | }a:before { 160 | background: var(--highlight-color); 161 | height: 100%; 162 | left: 0; 163 | top: 0; 164 | transform-origin: 0 25px; 165 | transition: 0.1s ease-out 50ms; 166 | width: 100%; 167 | }a:after { 168 | border: 7px solid transparent; 169 | bottom: 4.75px; 170 | right: -4.5px; 171 | transform: scaleX(1); 172 | transform-origin: left center; 173 | transition: 50ms ease-out; 174 | }@media (prefers-reduced-motion:no-preference) { 175 | a:hover { 176 | color: var(--color-main); 177 | }a:hover:before { 178 | background: var(--accent-main); 179 | transform: scaleY(0.15); 180 | transition: 0.1s ease-out; 181 | }a:after { 182 | right: -14px; 183 | transform: none; 184 | transition: transform 50ms ease-out 0.1s; 185 | }a:hover:after { 186 | border-left-color: var(--accent-main); 187 | } 188 | }@media (max-width:375px) { 189 | a:before { 190 | transform-origin: 0 17.5px; 191 | }a:after { 192 | border: 5.5px solid transparent; 193 | bottom: 1px; 194 | right: -10px; 195 | } 196 | }blockquote { 197 | border-left: 8px solid var(--accent-main); 198 | color: var(--color-main); 199 | font-family: var(--font-body); 200 | font-size: 1.6rem; 201 | font-weight: 400; 202 | line-height: 1.8em; 203 | margin: 0; 204 | padding: 1.25px 0; 205 | }blockquote p { 206 | margin-left: 10px; 207 | }blockquote footer { 208 | border: none; 209 | color: var(--color-dim); 210 | font-size: 1.4rem; 211 | font-style: none; 212 | letter-spacing: 0; 213 | line-height: 1.4rem; 214 | margin: 20px 0 20px 10px; 215 | text-align: left; 216 | text-transform: none; 217 | }code { 218 | background: var(--background-darker); 219 | color: var(--color-main); 220 | overflow-x: auto; 221 | }code, 222 | kbd { 223 | border-radius: 0.5rem; 224 | font-family: monospace; 225 | font-size: 1.6rem; 226 | line-height: 1.6rem; 227 | padding: 0.25rem; 228 | }kbd { 229 | background: var(--background-dark); 230 | color: var(--color-strong); 231 | cursor: help; 232 | text-transform: uppercase; 233 | }pre { 234 | background: var(--background-darker); 235 | border-radius: 0.5rem; 236 | color: var(--color-main); 237 | font-family: monospace; 238 | font-size: 1.6rem; 239 | line-height: 2.2rem; 240 | overflow-x: auto; 241 | padding: 0.5rem; 242 | }ul { 243 | margin: 5px 0 15px; 244 | padding: 0; 245 | }ul > li { 246 | color: var(--color-main); 247 | font-family: var(--font-body); 248 | font-size: 1.6rem; 249 | font-weight: 400; 250 | line-height: 1.8em; 251 | list-style: none; 252 | padding: 0 0 0 20px; 253 | position: relative; 254 | }ul > li:before { 255 | border-width: 1px; 256 | border-bottom: 0 solid var(--accent-main); 257 | border-left: 0 solid var(--accent-main); 258 | border-right: 2px solid var(--accent-main); 259 | border-top: 2px solid var(--accent-main); 260 | content: ""; 261 | height: 5px; 262 | left: 0; 263 | position: absolute; 264 | top: 14px; 265 | transform: rotate(45deg); 266 | width: 5px; 267 | }@media (max-width:375px) { 268 | ul > li:before { 269 | top: 8px; 270 | } 271 | }ol { 272 | counter-reset: item; 273 | margin: 5px 0 15px; 274 | padding: 0; 275 | }ol > li { 276 | color: var(--color-main); 277 | counter-increment: item; 278 | font-weight: 400; 279 | line-height: 1.8em; 280 | list-style: none; 281 | padding: 0 0 0 20px; 282 | position: relative; 283 | }ol > li, 284 | ol > li:before { 285 | font-family: var(--font-body); 286 | font-size: 1.6rem; 287 | }ol > li:before { 288 | color: var(--accent-main); 289 | content: counter(item) ")"; 290 | height: 5px; 291 | left: -4px; 292 | position: absolute; 293 | top: 0; 294 | width: 5px; 295 | }@media (max-width:375px) { 296 | ol > li:before { 297 | left: 0; 298 | } 299 | }form { 300 | align-content: flex-start; 301 | display: flex; 302 | flex-wrap: wrap; 303 | justify-content: flex-start; 304 | margin: 25px auto 50px; 305 | min-height: 50px; 306 | padding: 10px 0; 307 | width: 100%; 308 | }form header { 309 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 310 | background-position: 0 40%; 311 | background-repeat: no-repeat; 312 | background-size: 100% 30%; 313 | color: var(--color-main); 314 | display: table; 315 | font-family: var(--font-display); 316 | font-size: 3rem; 317 | font-weight: 700; 318 | line-height: 3em; 319 | padding: 0 5px; 320 | z-index: 20; 321 | }form header, 322 | form p { 323 | margin-left: 10px; 324 | }form fieldset { 325 | align-content: center; 326 | border: none; 327 | display: flex; 328 | flex-basis: 100%; 329 | flex-wrap: wrap; 330 | justify-content: flex-start; 331 | margin-bottom: 20px; 332 | }form fieldset legend { 333 | color: var(--color-main); 334 | display: table; 335 | line-height: 2.4rem; 336 | }form fieldset legend, 337 | form label { 338 | font-family: var(--font-display); 339 | font-size: 2rem; 340 | font-weight: 700; 341 | margin-left: 10px; 342 | padding: 0 5px; 343 | z-index: 20; 344 | }form label { 345 | color: var(--color-strong); 346 | display: inline-block; 347 | line-height: 2.2em; 348 | }form label + input, 349 | form label + textarea { 350 | background: var(--background-darker); 351 | border: none; 352 | border-radius: 0.5rem; 353 | color: var(--color-main); 354 | display: block; 355 | font-family: var(--font-body); 356 | font-size: 1.6rem; 357 | font-weight: 400; 358 | line-height: 2.5em; 359 | margin-bottom: 20px; 360 | margin-top: -25px; 361 | outline: none; 362 | padding: 0.5rem 1rem; 363 | width: 100%; 364 | z-index: 10; 365 | }form label + textarea { 366 | flex-basis: 100%; 367 | }form input:hover, 368 | form textarea:hover, 369 | input:focus, 370 | textarea:focus { 371 | background: var(--background-dark); 372 | }form input:disabled { 373 | background-color: var(--background-dark); 374 | cursor: not-allowed; 375 | }form input[type=submit] { 376 | background: var(--background-darker); 377 | border: none; 378 | border-radius: 0.5rem; 379 | color: var(--color-main); 380 | cursor: pointer; 381 | display: block; 382 | flex-grow: 1; 383 | font-family: var(--font-display); 384 | font-size: 1.6rem; 385 | font-weight: 700; 386 | line-height: 2.5em; 387 | margin: 5px 5px 19px; 388 | outline: none; 389 | padding: 0.5rem 1rem; 390 | z-index: 10; 391 | }form input[type=submit]:hover, 392 | input[type=submit]:focus { 393 | background-color: var(--background-dark); 394 | }form input[type=reset] { 395 | background: var(--background-darker); 396 | border: none; 397 | border-radius: 0.5rem; 398 | color: var(--color-main); 399 | cursor: pointer; 400 | display: block; 401 | flex-grow: 1; 402 | font-family: var(--font-display); 403 | font-size: 1.6rem; 404 | font-weight: 700; 405 | line-height: 2.5em; 406 | margin: 5px 5px 19px; 407 | outline: none; 408 | padding: 0.5rem 1rem; 409 | z-index: 10; 410 | }form input[type=reset]:hover, 411 | input[type=reset]:focus { 412 | background-color: var(--background-dark); 413 | }form input[type=checkbox], 414 | input[type=radio] { 415 | appearance: none; 416 | background: var(--background-darkest); 417 | border: 2px solid var(--color-main); 418 | border-radius: 50%; 419 | color: var(--background-darkest); 420 | display: grid; 421 | font: inherit; 422 | height: 20px; 423 | margin: 0; 424 | place-content: center; 425 | transform: translateY(6.5px); 426 | width: 20px; 427 | }form input[type=checkbox]:before, 428 | input[type=radio]:before { 429 | border-radius: 50%; 430 | box-shadow: inset 10px 10px var(--accent-main); 431 | content: ""; 432 | height: 12px; 433 | transform: scale(0); 434 | transition: transform 0.12s ease-in-out; 435 | width: 12px; 436 | }form input[type=checkbox]:checked:before, 437 | input[type=radio]:checked:before { 438 | transform: scale(1); 439 | }form input[type=checkbox]:disabled, 440 | input[type=radio]:disabled { 441 | border-color: var(--color-dim); 442 | }form input[type=checkbox] + label, 443 | input[type=radio] + label { 444 | color: var(--color-strong); 445 | display: inline-block; 446 | font-family: var(--font-display); 447 | font-size: 1.6rem; 448 | font-weight: 400; 449 | line-height: 1.6em; 450 | margin: 0; 451 | padding: 0 5px; 452 | z-index: 20; 453 | }form input[type=checkbox]:disabled + label, 454 | input[type=radio]:disabled + label { 455 | color: var(--color-dim); 456 | cursor: not-allowed; 457 | }@media (max-width:375px) { 458 | form { 459 | width: 100%; 460 | }form label + input, 461 | form label + textarea { 462 | margin-top: -16px; 463 | }form input[type=checkbox], 464 | input[type=radio] { 465 | height: 15px; 466 | transform: translateY(3px); 467 | width: 15px; 468 | }form input[type=checkbox]:before, 469 | input[type=radio]:before { 470 | height: 10px; 471 | width: 10px; 472 | } 473 | }button { 474 | background: var(--background-darker); 475 | border: none; 476 | border-radius: 0.5rem; 477 | color: var(--color-main); 478 | cursor: pointer; 479 | display: block; 480 | font-family: var(--font-display); 481 | font-size: 1.6rem; 482 | font-weight: 700; 483 | line-height: 2.5em; 484 | margin: 5px 5px 19px; 485 | min-width: 125px; 486 | outline: none; 487 | padding: 0.5rem 1rem; 488 | z-index: 10; 489 | }button:disabled, 490 | button:focus, 491 | button:hover { 492 | background-color: var(--background-dark); 493 | }button:disabled { 494 | cursor: not-allowed; 495 | }footer { 496 | border-top: 2px solid var(--accent-main); 497 | color: var(--color-main); 498 | font-size: 1rem; 499 | letter-spacing: 1px; 500 | line-height: normal; 501 | margin-top: 50px; 502 | padding-top: 8px; 503 | text-align: center; 504 | text-transform: uppercase; 505 | }footer a { 506 | transform-origin: 0 -10px; 507 | }footer a:before { 508 | transform-origin: 0 15px; 509 | }footer a:after { 510 | border: 5.5px solid transparent; 511 | bottom: -3px; 512 | }@media (prefers-reduced-motion:no-preference) { 513 | footer a:hover:before { 514 | background: var(--accent-main); 515 | transform: scaleY(0.25); 516 | transition: 0.1s ease-out; 517 | }footer a:after { 518 | right: -7.75px; 519 | transform: none; 520 | transition: transform 50ms ease-out 0.1s; 521 | }footer a:hover:after { 522 | border-left-color: var(--accent-main); 523 | } 524 | }@media (max-width:375px) { 525 | footer a:before { 526 | transform-origin: 0 9px; 527 | }footer a:after { 528 | border: 4px solid transparent; 529 | bottom: -1px; 530 | }footer a:hover:after { 531 | right: -6px; 532 | } 533 | }img { 534 | height: auto; 535 | max-width: 100%; 536 | }flex-break { 537 | flex-basis: 100%; 538 | width: 0; 539 | } 540 | -------------------------------------------------------------------------------- /dist/v1/light.min.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-strong: #000000; 3 | --color-main: #434242; 4 | --color-dim: #737373; 5 | --accent-strong: #0676a2; 6 | --accent-main: #7ddaff; 7 | --accent-dim: #a8dff5; 8 | --highlight-color: rgba(125,218,255,0.8); 9 | --selection-color: rgba(125,218,255,0.2); 10 | --background-dark: #e3e3e3; 11 | --background-darker: #f3f3f3; 12 | --background-darkest: #ffffff; 13 | --font-display: -apple-system,blinkmacsystemfont,"Segoe UI",roboto,helvetica,arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 14 | --font-body: georgia,"Times New Roman",times,serif; 15 | --font-monospace: monospace; 16 | }*, 17 | :after, 18 | :before { 19 | box-sizing: inherit; 20 | }html { 21 | background-color: var(--background-darkest); 22 | box-sizing: border-box; 23 | }body, 24 | html { 25 | -webkit-font-smoothing: antialiased; 26 | font-family: var(--font-display); 27 | font-size: 78.125%; 28 | line-height: 78.125%; 29 | margin: 0; 30 | padding: 0; 31 | }::selection { 32 | background-color: var(--selection-color); 33 | }::-webkit-scrollbar { 34 | height: 5px; 35 | width: 5px; 36 | }::-webkit-scrollbar-track { 37 | background: var(--background-dark); 38 | border-radius: 0.5rem; 39 | }::-webkit-scrollbar-thumb { 40 | background: var(--color-dim); 41 | border-radius: 0.5rem; 42 | }::-webkit-scrollbar-thumb:hover { 43 | background: var(--color-main); 44 | border-radius: 0.5rem; 45 | }.container { 46 | margin: 40px auto 0; 47 | max-width: 700px; 48 | padding: 20px; 49 | }@media (max-width:375px) { 50 | body, 51 | html { 52 | font-size: 50%; 53 | }.container { 54 | margin: 2rem auto 0; 55 | padding: 10px 20px; 56 | width: 350px; 57 | } 58 | }h1 { 59 | font-size: 6rem; 60 | line-height: 6rem; 61 | padding: 10px 20px 0 13.25px; 62 | }h1, 63 | h2 { 64 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 65 | background-position: 0 30%; 66 | background-repeat: no-repeat; 67 | background-size: 100% 65%; 68 | color: var(--color-strong); 69 | display: table; 70 | letter-spacing: -1px; 71 | margin: 0 0 5rem; 72 | }h2 { 73 | font-size: 5rem; 74 | line-height: 5rem; 75 | padding: 8.75px 17.5px 0 13.25px; 76 | }h3 { 77 | font-size: 4rem; 78 | line-height: 4rem; 79 | padding: 7.5px 15px 0 13.25px; 80 | }h3, 81 | h4 { 82 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 83 | background-position: 0 30%; 84 | background-repeat: no-repeat; 85 | background-size: 100% 65%; 86 | color: var(--color-strong); 87 | display: table; 88 | letter-spacing: -1px; 89 | margin: 0 0 5rem; 90 | }h4 { 91 | font-size: 3rem; 92 | line-height: 3rem; 93 | padding: 9px 13.25px 0; 94 | }h5 { 95 | font-size: 2.5rem; 96 | line-height: 2.5rem; 97 | }h5, 98 | h6 { 99 | color: var(--color-strong); 100 | display: table; 101 | letter-spacing: -1px; 102 | margin: 0 0 5rem; 103 | padding: 9px 13.25px 0; 104 | }h6 { 105 | font-size: 2rem; 106 | line-height: 2rem; 107 | }p { 108 | color: var(--color-main); 109 | font-family: var(--font-body); 110 | font-size: 1.6rem; 111 | font-weight: 400; 112 | line-height: 1.8em; 113 | }strong { 114 | color: var(--accent-strong); 115 | }b, 116 | strong { 117 | font-family: var(--font-body); 118 | font-size: 1.6rem; 119 | font-weight: 700; 120 | line-height: 1.8em; 121 | }b, 122 | em { 123 | color: var(--color-main); 124 | }em { 125 | font-family: var(--font-body); 126 | font-size: 1.6rem; 127 | font-style: italic; 128 | font-weight: 300; 129 | line-height: 1.8em; 130 | }a { 131 | color: var(--color-strong); 132 | cursor: pointer; 133 | display: inline-block; 134 | margin: 0; 135 | padding: 0 4px; 136 | position: relative; 137 | text-decoration: none; 138 | }a:after, 139 | a:before { 140 | content: ""; 141 | display: block; 142 | position: absolute; 143 | z-index: -1; 144 | }a:before { 145 | background: var(--highlight-color); 146 | height: 100%; 147 | left: 0; 148 | top: 0; 149 | transform-origin: 0 25px; 150 | transition: 0.1s ease-out 50ms; 151 | width: 100%; 152 | }a:after { 153 | border: 7px solid transparent; 154 | bottom: 4.75px; 155 | right: -4.5px; 156 | transform: scaleX(1); 157 | transform-origin: left center; 158 | transition: 50ms ease-out; 159 | }@media (prefers-reduced-motion:no-preference) { 160 | a:hover { 161 | color: var(--color-main); 162 | }a:hover:before { 163 | background: var(--accent-main); 164 | transform: scaleY(0.15); 165 | transition: 0.1s ease-out; 166 | }a:after { 167 | right: -14px; 168 | transform: none; 169 | transition: transform 50ms ease-out 0.1s; 170 | }a:hover:after { 171 | border-left-color: var(--accent-main); 172 | } 173 | }@media (max-width:375px) { 174 | a:before { 175 | transform-origin: 0 17.5px; 176 | }a:after { 177 | border: 5.5px solid transparent; 178 | bottom: 1px; 179 | right: -10px; 180 | } 181 | }blockquote { 182 | border-left: 8px solid var(--accent-main); 183 | color: var(--color-main); 184 | font-family: var(--font-body); 185 | font-size: 1.6rem; 186 | font-weight: 400; 187 | line-height: 1.8em; 188 | margin: 0; 189 | padding: 1.25px 0; 190 | }blockquote p { 191 | margin-left: 10px; 192 | }blockquote footer { 193 | border: none; 194 | color: var(--color-dim); 195 | font-size: 1.4rem; 196 | font-style: none; 197 | letter-spacing: 0; 198 | line-height: 1.4rem; 199 | margin: 20px 0 20px 10px; 200 | text-align: left; 201 | text-transform: none; 202 | }code { 203 | background: var(--background-darker); 204 | color: var(--color-main); 205 | overflow-x: auto; 206 | }code, 207 | kbd { 208 | border-radius: 0.5rem; 209 | font-family: monospace; 210 | font-size: 1.6rem; 211 | line-height: 1.6rem; 212 | padding: 0.25rem; 213 | }kbd { 214 | background: var(--background-dark); 215 | color: var(--color-strong); 216 | cursor: help; 217 | text-transform: uppercase; 218 | }pre { 219 | background: var(--background-darker); 220 | border-radius: 0.5rem; 221 | color: var(--color-main); 222 | font-family: monospace; 223 | font-size: 1.6rem; 224 | line-height: 2.2rem; 225 | overflow-x: auto; 226 | padding: 0.5rem; 227 | }ul { 228 | margin: 5px 0 15px; 229 | padding: 0; 230 | }ul > li { 231 | color: var(--color-main); 232 | font-family: var(--font-body); 233 | font-size: 1.6rem; 234 | font-weight: 400; 235 | line-height: 1.8em; 236 | list-style: none; 237 | padding: 0 0 0 20px; 238 | position: relative; 239 | }ul > li:before { 240 | border-width: 1px; 241 | border-bottom: 0 solid var(--accent-main); 242 | border-left: 0 solid var(--accent-main); 243 | border-right: 2px solid var(--accent-main); 244 | border-top: 2px solid var(--accent-main); 245 | content: ""; 246 | height: 5px; 247 | left: 0; 248 | position: absolute; 249 | top: 14px; 250 | transform: rotate(45deg); 251 | width: 5px; 252 | }@media (max-width:375px) { 253 | ul > li:before { 254 | top: 8px; 255 | } 256 | }ol { 257 | counter-reset: item; 258 | margin: 5px 0 15px; 259 | padding: 0; 260 | }ol > li { 261 | color: var(--color-main); 262 | counter-increment: item; 263 | font-weight: 400; 264 | line-height: 1.8em; 265 | list-style: none; 266 | padding: 0 0 0 20px; 267 | position: relative; 268 | }ol > li, 269 | ol > li:before { 270 | font-family: var(--font-body); 271 | font-size: 1.6rem; 272 | }ol > li:before { 273 | color: var(--accent-main); 274 | content: counter(item) ")"; 275 | height: 5px; 276 | left: -4px; 277 | position: absolute; 278 | top: 0; 279 | width: 5px; 280 | }@media (max-width:375px) { 281 | ol > li:before { 282 | left: 0; 283 | } 284 | }form { 285 | align-content: flex-start; 286 | display: flex; 287 | flex-wrap: wrap; 288 | justify-content: flex-start; 289 | margin: 25px auto 50px; 290 | min-height: 50px; 291 | padding: 10px 0; 292 | width: 100%; 293 | }form header { 294 | background: linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%); 295 | background-position: 0 40%; 296 | background-repeat: no-repeat; 297 | background-size: 100% 30%; 298 | color: var(--color-main); 299 | display: table; 300 | font-family: var(--font-display); 301 | font-size: 3rem; 302 | font-weight: 700; 303 | line-height: 3em; 304 | padding: 0 5px; 305 | z-index: 20; 306 | }form header, 307 | form p { 308 | margin-left: 10px; 309 | }form fieldset { 310 | align-content: center; 311 | border: none; 312 | display: flex; 313 | flex-basis: 100%; 314 | flex-wrap: wrap; 315 | justify-content: flex-start; 316 | margin-bottom: 20px; 317 | }form fieldset legend { 318 | color: var(--color-main); 319 | display: table; 320 | line-height: 2.4rem; 321 | }form fieldset legend, 322 | form label { 323 | font-family: var(--font-display); 324 | font-size: 2rem; 325 | font-weight: 700; 326 | margin-left: 10px; 327 | padding: 0 5px; 328 | z-index: 20; 329 | }form label { 330 | color: var(--color-strong); 331 | display: inline-block; 332 | line-height: 2.2em; 333 | }form label + input, 334 | form label + textarea { 335 | background: var(--background-darker); 336 | border: none; 337 | border-radius: 0.5rem; 338 | color: var(--color-main); 339 | display: block; 340 | font-family: var(--font-body); 341 | font-size: 1.6rem; 342 | font-weight: 400; 343 | line-height: 2.5em; 344 | margin-bottom: 20px; 345 | margin-top: -25px; 346 | outline: none; 347 | padding: 0.5rem 1rem; 348 | width: 100%; 349 | z-index: 10; 350 | }form label + textarea { 351 | flex-basis: 100%; 352 | }form input:hover, 353 | form textarea:hover, 354 | input:focus, 355 | textarea:focus { 356 | background: var(--background-dark); 357 | }form input:disabled { 358 | background-color: var(--background-dark); 359 | cursor: not-allowed; 360 | }form input[type=submit] { 361 | background: var(--background-darker); 362 | border: none; 363 | border-radius: 0.5rem; 364 | color: var(--color-main); 365 | cursor: pointer; 366 | display: block; 367 | flex-grow: 1; 368 | font-family: var(--font-display); 369 | font-size: 1.6rem; 370 | font-weight: 700; 371 | line-height: 2.5em; 372 | margin: 5px 5px 19px; 373 | outline: none; 374 | padding: 0.5rem 1rem; 375 | z-index: 10; 376 | }form input[type=submit]:hover, 377 | input[type=submit]:focus { 378 | background-color: var(--background-dark); 379 | }form input[type=reset] { 380 | background: var(--background-darker); 381 | border: none; 382 | border-radius: 0.5rem; 383 | color: var(--color-main); 384 | cursor: pointer; 385 | display: block; 386 | flex-grow: 1; 387 | font-family: var(--font-display); 388 | font-size: 1.6rem; 389 | font-weight: 700; 390 | line-height: 2.5em; 391 | margin: 5px 5px 19px; 392 | outline: none; 393 | padding: 0.5rem 1rem; 394 | z-index: 10; 395 | }form input[type=reset]:hover, 396 | input[type=reset]:focus { 397 | background-color: var(--background-dark); 398 | }form input[type=checkbox], 399 | input[type=radio] { 400 | appearance: none; 401 | background: var(--background-darkest); 402 | border: 2px solid var(--color-main); 403 | border-radius: 50%; 404 | color: var(--background-darkest); 405 | display: grid; 406 | font: inherit; 407 | height: 20px; 408 | margin: 0; 409 | place-content: center; 410 | transform: translateY(6.5px); 411 | width: 20px; 412 | }form input[type=checkbox]:before, 413 | input[type=radio]:before { 414 | border-radius: 50%; 415 | box-shadow: inset 10px 10px var(--accent-main); 416 | content: ""; 417 | height: 12px; 418 | transform: scale(0); 419 | transition: transform 0.12s ease-in-out; 420 | width: 12px; 421 | }form input[type=checkbox]:checked:before, 422 | input[type=radio]:checked:before { 423 | transform: scale(1); 424 | }form input[type=checkbox]:disabled, 425 | input[type=radio]:disabled { 426 | border-color: var(--color-dim); 427 | }form input[type=checkbox] + label, 428 | input[type=radio] + label { 429 | color: var(--color-strong); 430 | display: inline-block; 431 | font-family: var(--font-display); 432 | font-size: 1.6rem; 433 | font-weight: 400; 434 | line-height: 1.6em; 435 | margin: 0; 436 | padding: 0 5px; 437 | z-index: 20; 438 | }form input[type=checkbox]:disabled + label, 439 | input[type=radio]:disabled + label { 440 | color: var(--color-dim); 441 | cursor: not-allowed; 442 | }@media (max-width:375px) { 443 | form { 444 | width: 100%; 445 | }form label + input, 446 | form label + textarea { 447 | margin-top: -16px; 448 | }form input[type=checkbox], 449 | input[type=radio] { 450 | height: 15px; 451 | transform: translateY(3px); 452 | width: 15px; 453 | }form input[type=checkbox]:before, 454 | input[type=radio]:before { 455 | height: 10px; 456 | width: 10px; 457 | } 458 | }button { 459 | background: var(--background-darker); 460 | border: none; 461 | border-radius: 0.5rem; 462 | color: var(--color-main); 463 | cursor: pointer; 464 | display: block; 465 | font-family: var(--font-display); 466 | font-size: 1.6rem; 467 | font-weight: 700; 468 | line-height: 2.5em; 469 | margin: 5px 5px 19px; 470 | min-width: 125px; 471 | outline: none; 472 | padding: 0.5rem 1rem; 473 | z-index: 10; 474 | }button:disabled, 475 | button:focus, 476 | button:hover { 477 | background-color: var(--background-dark); 478 | }button:disabled { 479 | cursor: not-allowed; 480 | }footer { 481 | border-top: 2px solid var(--accent-main); 482 | color: var(--color-main); 483 | font-size: 1rem; 484 | letter-spacing: 1px; 485 | line-height: normal; 486 | margin-top: 50px; 487 | padding-top: 8px; 488 | text-align: center; 489 | text-transform: uppercase; 490 | }footer a { 491 | transform-origin: 0 -10px; 492 | }footer a:before { 493 | transform-origin: 0 15px; 494 | }footer a:after { 495 | border: 5.5px solid transparent; 496 | bottom: -3px; 497 | }@media (prefers-reduced-motion:no-preference) { 498 | footer a:hover:before { 499 | background: var(--accent-main); 500 | transform: scaleY(0.25); 501 | transition: 0.1s ease-out; 502 | }footer a:after { 503 | right: -7.75px; 504 | transform: none; 505 | transition: transform 50ms ease-out 0.1s; 506 | }footer a:hover:after { 507 | border-left-color: var(--accent-main); 508 | } 509 | }@media (max-width:375px) { 510 | footer a:before { 511 | transform-origin: 0 9px; 512 | }footer a:after { 513 | border: 4px solid transparent; 514 | bottom: -1px; 515 | }footer a:hover:after { 516 | right: -6px; 517 | } 518 | }img { 519 | height: auto; 520 | max-width: 100%; 521 | }flex-break { 522 | flex-basis: 100%; 523 | width: 0; 524 | } 525 | -------------------------------------------------------------------------------- /dist/v2/forms.min.css: -------------------------------------------------------------------------------- 1 | form{align-content:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start;margin:25px auto 50px;min-height:50px;padding:10px 0;width:100%}form header{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 42.5%;background-repeat:no-repeat;background-size:100% 25%;color:var(--primary-2);display:table;font-family:var(--font-display);font-size:3rem;font-weight:700;line-height:3em;margin-bottom:-40px;padding:0 5px;z-index:20}@media (--breakpoint-mobile ){form header{margin-bottom:-25px}}form p{margin-left:10px}form fieldset{align-content:center;border:none;display:flex;flex-basis:100%;flex-wrap:wrap;justify-content:flex-start;margin-bottom:20px}form fieldset legend{color:var(--primary-2);display:table;line-height:2.4rem}form fieldset legend,form label{font-family:var(--font-display);font-size:2rem;font-weight:700;margin-left:10px;padding:0 5px;z-index:20}form label{color:var(--primary-1);display:inline-block;line-height:2.2em}form label+input,form label+textarea{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);display:block;font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:2.5em;margin-bottom:20px;margin-top:-25px;outline:none;padding:.5rem 1rem;width:100%;z-index:10}form label+textarea{flex-basis:100%}form input:active,form input:focus-visible,form input:hover,form textarea:active,form textarea:focus-visible,form textarea:hover{background:var(--background-1)}form input:-webkit-autofill{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-2) inset!important}form input:-webkit-autofill:active,form input:-webkit-autofill:focus-visible,form input:-webkit-autofill:hover{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-1) inset!important}form label[disabled]{color:var(--primary-3)}form input:disabled,form label[disabled]{background-color:var(--background-3);cursor:not-allowed}form input:disabled{border:2px solid var(--background-2)}form input[type=button]{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;min-width:125px;outline:none;padding:.5rem 1rem;z-index:10}form input[type=button]:active,form input[type=button]:focus-visible,form input[type=button]:hover{background-color:var(--background-1)}form input[type=button]:disabled:hover{background-color:var(--background-2)}form input[type=button]:disabled{cursor:not-allowed;opacity:.5}form input[type=submit]{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;flex-grow:1;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;outline:none;padding:.5rem 1rem;z-index:10}form input[type=submit]:active,form input[type=submit]:focus-visible,form input[type=submit]:hover{background-color:var(--background-1)}form input[type=submit]:disabled:hover{background-color:var(--background-2)}form input[type=submit]:disabled{cursor:not-allowed;opacity:.5}form input[type=reset]{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;flex-grow:1;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;outline:none;padding:.5rem 1rem;z-index:10}form input[type=reset]:active,form input[type=reset]:focus-visible,form input[type=reset]:hover{background-color:var(--background-1)}form input[type=reset]:disabled:hover{background-color:var(--background-2)}form input[type=reset]:disabled{cursor:not-allowed;opacity:.5}form input[type=checkbox],form input[type=radio]{appearance:none;background:var(--background-3);border:2px solid var(--primary-2);color:var(--background-3);cursor:pointer;display:grid;font:inherit;height:20px;margin:0;place-content:center;transform:translateY(6.5px);width:20px}form input[type=checkbox]{border-radius:25%}form input[type=radio]{border-radius:50%}form input[type=checkbox]:before,form input[type=radio]:before{box-shadow:inset 10px 10px var(--accent-2);content:"";cursor:pointer;height:12px;transform:scale(0);transition:transform .12s ease-in-out;width:12px}form input[type=checkbox]:before{border-radius:25%;clip-path:polygon(14% 44%,0 65%,50% 100%,100% 16%,80% 0,43% 62%);transform-origin:bottom left}form input[type=radio]:before{border-radius:50%}form input[type=checkbox]:checked:before,form input[type=radio]:checked:before{transform:scale(1)}form input[type=checkbox]:disabled,form input[type=radio]:disabled{background-color:var(--background-3);border-color:var(--background-1)}form input[type=checkbox]+label,form input[type=radio]+label{color:var(--primary-1);cursor:pointer;display:inline-block;font-family:var(--font-display);font-size:1.6rem;font-weight:400;line-height:1.6em;margin:0;padding:0 5px;z-index:20}form input[type=checkbox]:disabled+label,form input[type=radio]:disabled+label{color:var(--primary-3);cursor:not-allowed}@media (--breakpoint-mobile ){form{width:100%}form label+input,form label+textarea{margin-top:-16px}form input[type=checkbox],form input[type=radio]{height:15px;transform:translateY(3px);width:15px}form input[type=checkbox]:before,form input[type=radio]:before{height:10px;width:10px}}form input[type=date],form input[type=datetime-local],form input[type=month],form input[type=time],form input[type=week]{cursor:text}form input::-webkit-calendar-picker-indicator{border-radius:4px;cursor:pointer;filter:var(--date-icon-filter);margin-right:2px;opacity:.8}form input::-webkit-calendar-picker-indicator:hover{opacity:1}form input[type=number]::-webkit-inner-spin-button,form input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}form input[type=number]{-moz-appearance:textfield}form input[type=range]{-webkit-appearance:none;background:transparent;height:36px;margin:auto;padding:0;width:75%}form input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{background:var(--background-2);border-radius:100px;cursor:pointer;height:24px;width:80%}form input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--background-1);border-radius:50%;cursor:pointer;height:36px;margin-top:-6px;width:36px}form input[type=range]:hover::-webkit-slider-thumb{background:var(--accent-1);margin-top:-6px}form input[type=range]:active::-webkit-slider-thumb,form input[type=range]:focus-visible::-webkit-slider-thumb{background:var(--accent-2);margin-top:-6px}form input[type=range]::-moz-range-track{background:var(--background-2);border-radius:100px;cursor:pointer;height:24px;width:80%}form input[type=range]::-moz-range-thumb{-webkit-appearance:none;background:var(--background-1);border:none;border-radius:50%;cursor:pointer;height:36px;width:36px}form input[type=range]:hover::-moz-range-thumb{background:var(--primary-3)}form input[type=range]:active::-moz-range-thumb,form input[type=range]:focus-visible::-moz-range-thumb{background:var(--primary-1)}form input[type=range]::-ms-track{background:var(--background-2);border-radius:100px;cursor:pointer;height:24px;width:80%}form input[type=range]::-ms-fill-lower,form input[type=range]::-ms-fill-upper{background:var(--background-2)}form input[type=range]::-ms-thumb{-webkit-appearance:none;background:var(--primary-2);border:none;border-radius:50%;cursor:pointer;height:36px;width:36px}form input[type=range]:hover::-ms-thumb{background:var(--primary-3)}form input[type=range]:active::-ms-thumb,form input[type=range]:focus-visible::-ms-thumb{background:var(--primary-1)}@media (--breakpoint-mobile ){form input[type=range]{height:30px;width:60%}form input[type=range]::-webkit-slider-runnable-track{height:18px}form input[type=range]::-webkit-slider-thumb{height:24px;margin-top:-3px;width:24px}form input[type=range]:hover::-webkit-slider-thumb{margin-top:-3px}form input[type=range]:active::-webkit-slider-thumb,form input[type=range]:focus-visible::-webkit-slider-thumb{margin-top:-3px}form input[type=range]::-moz-range-track{height:18px}form input[type=range]::-ms-track{height:18px}}form input[type=file]{cursor:pointer}form input[type=file]::-webkit-file-upload-button{display:none;padding:0;width:0}form input[type=file]::file-selector-button{display:none;padding:0;width:0}form input[type=file]::-ms-browse{display:none;padding:0;width:0}button{background:var(--accent-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;min-width:125px;outline:none;padding:.5rem 1rem;z-index:10}button:active,button:focus-visible,button:hover{background-color:var(--accent-1)}button:disabled:hover{background-color:var(--accent-2)}button:disabled{cursor:not-allowed;opacity:.5}form label+select{appearance:none;background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:grid;font-family:var(--font-body);font-size:1.6rem;font-weight:400;grid-template-areas:"select";line-height:2.5em;margin-bottom:20px;margin-top:-25px;outline:none;padding:.5rem 1rem;width:100%;z-index:10}form select::-ms-expand{display:none}form select:active,form select:focus-visible,form select:hover{background:var(--background-1)}form select::-webkit-autofill{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-2) inset!important}form select:active::-webkit-autofill,form select:focus-visible::-webkit-autofill,form select:hover::-webkit-autofill{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-1) inset!important}form select:disabled{background-color:var(--background-3);border:2px solid var(--background-2);cursor:not-allowed}@media (--breakpoint-mobile ){form label+select{margin-top:-16px}} -------------------------------------------------------------------------------- /dist/v2/images.css: -------------------------------------------------------------------------------- 1 | img, 2 | video, 3 | object, 4 | canvas { 5 | height: auto; 6 | max-width: 100%; 7 | } 8 | 9 | figure { 10 | width: 100%; 11 | display: flex; 12 | align-content: center; 13 | justify-content: center; 14 | flex-wrap: wrap; 15 | margin: 20px 0 20px 0; 16 | flex-direction: column; 17 | } 18 | 19 | figure img { 20 | height: auto; 21 | max-width: 80%; 22 | margin: auto; 23 | } 24 | 25 | figure figcaption p { 26 | flex-basis: 100%; 27 | color: var(--primary-3); 28 | font-size: 1.6rem; 29 | line-height: 2.2rem; 30 | text-align: center; 31 | margin-top: 10px; 32 | } 33 | -------------------------------------------------------------------------------- /dist/v2/images.min.css: -------------------------------------------------------------------------------- 1 | canvas,img,object,video{height:auto;max-width:100%}figure{align-content:center;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;margin:20px 0;width:100%}figure img{height:auto;margin:auto;max-width:80%}figure figcaption p{color:var(--primary-3);flex-basis:100%;font-size:1.6rem;line-height:2.2rem;margin-top:10px;text-align:center} -------------------------------------------------------------------------------- /dist/v2/tables.css: -------------------------------------------------------------------------------- 1 | table { 2 | width: 100%; 3 | max-width: 100%; 4 | border: 1px solid var(--background-2); 5 | border-collapse: collapse; 6 | border-spacing: 0; 7 | display: block; 8 | overflow-x: auto; 9 | margin: 20px 0 20px 0; 10 | } 11 | 12 | table thead { 13 | display: table-header-group; 14 | width: 100%; 15 | } 16 | 17 | table thead tr { 18 | border: 1px solid var(--accent-2); 19 | width: auto; 20 | min-width: 100%; 21 | } 22 | 23 | table thead tr th { 24 | border: 1px solid var(--accent-2); 25 | background-color: var(--accent-2); 26 | color: var(--primary-2); 27 | font-size: 1.6rem; 28 | line-height: 2.2rem; 29 | height: 2.8rem; 30 | padding: 10px; 31 | overflow-x: auto; 32 | min-width: 220px; 33 | } 34 | 35 | table tbody { 36 | display: table-row-group; 37 | width: 100%; 38 | } 39 | 40 | table tbody tr { 41 | border: 1px solid var(--background-2); 42 | width: auto; 43 | min-width: 100%; 44 | } 45 | 46 | table tbody tr td { 47 | border: 1px solid var(--background-2); 48 | color: var(--primary-2); 49 | font-size: 1.6rem; 50 | line-height: 2.2rem; 51 | height: 2.8rem; 52 | padding: 10px; 53 | overflow-x: auto; 54 | min-width: 220px; 55 | } 56 | 57 | table tbody tr th { 58 | border: 1px solid var(--background-2); 59 | color: var(--primary-2); 60 | font-size: 1.6rem; 61 | font-weight: 700; 62 | line-height: 2.2rem; 63 | height: 2.8rem; 64 | padding: 10px; 65 | overflow-x: auto; 66 | min-width: 220px; 67 | } 68 | 69 | table tfoot { 70 | display: table-footer-group; 71 | width: 100%; 72 | } 73 | 74 | table tfoot tr { 75 | border: 1px solid var(--background-2); 76 | width: auto; 77 | min-width: 100%; 78 | } 79 | 80 | table tfoot tr td { 81 | border: 1px solid var(--background-2); 82 | color: var(--primary-3); 83 | font-size: 1.6rem; 84 | line-height: 2.2rem; 85 | height: 2.8rem; 86 | padding: 10px; 87 | overflow-x: auto; 88 | min-width: 220px; 89 | } 90 | 91 | table tfoot tr th { 92 | border: 1px solid var(--background-2); 93 | color: var(--primary-3); 94 | font-size: 1.6rem; 95 | font-weight: 700; 96 | line-height: 2.2rem; 97 | height: 2.8rem; 98 | padding: 10px; 99 | overflow-x: auto; 100 | min-width: 220px; 101 | } 102 | 103 | table caption { 104 | caption-side: bottom; 105 | color: var(--primary-2); 106 | font-size: 1.6rem; 107 | line-height: 2.2rem; 108 | height: 2.8rem; 109 | text-align: center; 110 | } 111 | -------------------------------------------------------------------------------- /dist/v2/tables.min.css: -------------------------------------------------------------------------------- 1 | table{border:1px solid var(--background-2);border-collapse:collapse;border-spacing:0;display:block;margin:20px 0;max-width:100%;overflow-x:auto;width:100%}table thead{display:table-header-group;width:100%}table thead tr{border:1px solid var(--accent-2);min-width:100%;width:auto}table thead tr th{background-color:var(--accent-2);border:1px solid var(--accent-2);color:var(--primary-2);font-size:1.6rem;height:2.8rem;line-height:2.2rem;min-width:220px;overflow-x:auto;padding:10px}table tbody{display:table-row-group;width:100%}table tbody tr{border:1px solid var(--background-2);min-width:100%;width:auto}table tbody tr td,table tbody tr th{border:1px solid var(--background-2);color:var(--primary-2);font-size:1.6rem;height:2.8rem;line-height:2.2rem;min-width:220px;overflow-x:auto;padding:10px}table tbody tr th{font-weight:700}table tfoot{display:table-footer-group;width:100%}table tfoot tr{border:1px solid var(--background-2);min-width:100%;width:auto}table tfoot tr td,table tfoot tr th{border:1px solid var(--background-2);color:var(--primary-3);font-size:1.6rem;height:2.8rem;line-height:2.2rem;min-width:220px;overflow-x:auto;padding:10px}table tfoot tr th{font-weight:700}table caption{caption-side:bottom;color:var(--primary-2);font-size:1.6rem;height:2.8rem;line-height:2.2rem;text-align:center} -------------------------------------------------------------------------------- /dist/v2/themes/dark.css: -------------------------------------------------------------------------------- 1 | :root, 2 | :before, 3 | :after { 4 | --primary-1: #f3f3f3; 5 | --primary-2: #e3e3e3; 6 | --primary-3: #bfbfbf; 7 | --accent-1: #59a6b8; 8 | --accent-2: #107fae; 9 | --accent-3: #3b6678; 10 | --background-1: #41405c; 11 | --background-2: #272639; 12 | --background-3: #14131e; 13 | --highlight-color: rgba(15, 154, 210, 0.8); 14 | --marked-color: rgba(68, 50, 100, 0.8); 15 | --selection-color: rgba(15, 154, 210, 0.2); 16 | --date-icon-filter: invert(87%) sepia(35%) saturate(1833%) 17 | hue-rotate(161deg) brightness(77%) contrast(83%); 18 | } 19 | -------------------------------------------------------------------------------- /dist/v2/themes/dark.min.css: -------------------------------------------------------------------------------- 1 | :after,:before,:root{--primary-1:#f3f3f3;--primary-2:#e3e3e3;--primary-3:#bfbfbf;--accent-1:#59a6b8;--accent-2:#107fae;--accent-3:#3b6678;--background-1:#41405c;--background-2:#272639;--background-3:#14131e;--highlight-color:rgba(15,154,210,.8);--marked-color:rgba(68,50,100,.8);--selection-color:rgba(15,154,210,.2);--date-icon-filter:invert(87%) sepia(35%) saturate(1833%) hue-rotate(161deg) brightness(77%) contrast(83%)} -------------------------------------------------------------------------------- /dist/v2/themes/light.css: -------------------------------------------------------------------------------- 1 | :before, 2 | :after, 3 | :root { 4 | --primary-1: #14131e; 5 | --primary-2: #272639; 6 | --primary-3: #41405c; 7 | --accent-1: #63accb; 8 | --accent-2: #7ad3e9; 9 | --accent-3: #ace3f0; 10 | --background-1: #e3e3e3; 11 | --background-2: #f3f3f3; 12 | --background-3: #ffffff; 13 | --highlight-color: rgba(122, 211, 233, 0.8); 14 | --marked-color: rgba(227, 227, 227, 0.6); 15 | --selection-color: rgba(122, 211, 233, 0.2); 16 | --date-icon-filter: invert(73%) sepia(31%) saturate(593%) hue-rotate(158deg) 17 | brightness(82%) contrast(92%); 18 | } 19 | -------------------------------------------------------------------------------- /dist/v2/themes/light.min.css: -------------------------------------------------------------------------------- 1 | :after,:before,:root{--primary-1:#14131e;--primary-2:#272639;--primary-3:#41405c;--accent-1:#63accb;--accent-2:#7ad3e9;--accent-3:#ace3f0;--background-1:#e3e3e3;--background-2:#f3f3f3;--background-3:#fff;--highlight-color:rgba(122,211,233,.8);--marked-color:hsla(0,0%,89%,.6);--selection-color:rgba(122,211,233,.2);--date-icon-filter:invert(73%) sepia(31%) saturate(593%) hue-rotate(158deg) brightness(82%) contrast(92%)} -------------------------------------------------------------------------------- /dist/v2/typography.min.css: -------------------------------------------------------------------------------- 1 | code,samp{background:var(--background-2);border-radius:.5rem;color:var(--primary-2);font-family:var(--font-monospace);font-size:1.6rem;line-height:2.2rem;overflow-x:auto;padding:.25rem}samp:before{color:var(--primary-3);content:"~$ "}kbd{background:var(--background-1);color:var(--color-strong);cursor:help;line-height:1.6rem;padding:.25rem;text-transform:uppercase}kbd,pre{border-radius:.5rem;font-family:var(--font-monospace);font-size:1.6rem}pre{background:var(--background-2);line-height:2.2rem;overflow-x:auto;padding:.5rem}pre,var{color:var(--primary-2)}var{font-family:var(--font-monospace);font-style:italic}footer{border-top:2px solid var(--accent-2);color:var(--primary-2);font-size:1.2rem;letter-spacing:1.2px;line-height:normal;margin-top:50px;padding-top:8px;text-align:center;text-transform:uppercase}footer a{transform-origin:0 -10px}footer a:before{transform-origin:0 11px}footer a:after{border:5.5px solid transparent;bottom:0}@media (prefers-reduced-motion:no-preference){footer a:hover:before{background:var(--accent-2);transform:scaleY(.25);transition:.1s ease-out}footer a:after{right:-7.75px;transform:none;transition:transform 50ms ease-out .1s}}@media (--breakpoint-mobile ){footer a:before{transform-origin:0 9px}footer a:after{border:4px solid transparent;bottom:-1px}footer a:hover:after{right:-6px}}ul{margin:5px 0 15px;padding:0}ul>li{color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:1.8em;list-style:none;padding:0 0 0 20px;position:relative}ul>li:before{border-width:1px;border-bottom:0 solid var(--accent-2);border-left:0 solid var(--accent-2);border-right:2px solid var(--accent-2);border-top:2px solid var(--accent-2);content:"";height:5px;left:0;position:absolute;top:14px;transform:rotate(45deg);width:5px}@media (--breakpoint-mobile ){ul>li:before{top:8px}}ul input~li:before{list-style-type:none}ul input[type=checkbox]{appearance:none;background:var(--background-3);border:2px solid var(--primary-2);border-radius:25%;color:var(--background-3);cursor:pointer;display:inline-grid;font:inherit;height:20px;margin:0 10px 0 0;place-content:center;width:20px}ul input[type=checkbox]:before{border-radius:25%;box-shadow:inset 10px 10px var(--accent-2);clip-path:polygon(14% 44%,0 65%,50% 100%,100% 16%,80% 0,43% 62%);content:"";cursor:pointer;height:12px;transform:scale(0);transform-origin:bottom left;transition:transform .12s ease-in-out;width:12px}ul input[type=checkbox]:checked:before{transform:scale(1)}ul input[type=checkbox]:disabled{background-color:var(--background-3);border-color:var(--background-1)}ul input[type=checkbox]:disabled+label{color:var(--primary-3);cursor:not-allowed}@media (--breakpoint-mobile ){ul input[type=checkbox]{height:15px;transform:translateY(3px);width:15px}ul input[type=checkbox]:before{height:10px;width:10px}}ol{counter-reset:item;margin:5px 0 15px;padding:0}ol>li{color:var(--primary-2);counter-increment:item;font-weight:400;line-height:1.8em;list-style:none;padding:0 0 0 20px;position:relative}ol>li,ol>li:before{font-family:var(--font-body);font-size:1.6rem}ol>li:before{color:var(--accent-2);content:counter(item) ")";height:5px;left:-4px;position:absolute;top:0;width:5px}dl{margin:5px 0 15px;padding:0}dl>dd,dl>dt{color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:1.8em;position:relative}dl>dd{margin-top:-20px;margin-inline-start:30px}@media (--breakpoint-mobile ){ol>li:before{left:0}dl>dd{margin-top:-15px;margin-inline-start:20px}}address{display:flex;flex-direction:column;font-style:normal;margin:-5px 0;width:100%}address a{font-size:1.6rem;line-height:2rem;margin:5px 0}address a:active:before,address a:before,address a:focus-visible:before,address a:hover:before{background:none;border:none;transform:none}address a:active:before,address a:focus-visible:before,address a:hover:before{animation:shake .82s cubic-bezier(.36,.07,.19,.97) both}address a:after{border:none}address a[href^="mailto\:"]:before{content:"📧 "}address a[href^="mailto\:"]:before,address a[href^="tel\:"]:before{display:inline-block;margin-right:5px;position:relative;text-decoration:none;transform-origin:center;width:25px}address a[href^="tel\:"]:before{content:"📞 "}address a[href^="sms\:"]:before{content:"💬 ";display:inline-block;margin-right:5px;position:relative;text-decoration:none;transform-origin:center;width:25px}@keyframes shake{0%{transform:translateX(0)}25%{transform:translateY(-9px)}35%{transform:translateY(-9px) rotate(17deg)}55%{transform:translateY(-9px) rotate(-17deg)}65%{transform:translateY(-9px) rotate(17deg)}75%{transform:translateY(-9px) rotate(-17deg)}to{transform:translateY(0) rotate(0)}}*,:after,:before{box-sizing:inherit}html{background-color:var(--background-3);box-sizing:border-box;overflow-x:hidden;transition:all .44s ease}body,html{-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;font-family:var(--font-display);font-size:70%;line-height:70%;margin:0;padding:0}body{height:fit-content;margin:40px auto 0;max-width:700px;padding:20px}p:target{background-color:var(--background-1);padding-left:5px}::selection{background-color:var(--selection-color)}::-webkit-scrollbar{height:5px;width:7.5px}::-webkit-scrollbar-track{background:var(--background-1);border-radius:.5rem}::-webkit-scrollbar-thumb{background:var(--primary-3);border-radius:.5rem}::-webkit-scrollbar-thumb:hover{background:var(--primary-2);border-radius:.5rem}@media (--breakpoint-mobile ){body,html{font-size:50%}}flex-break{flex-basis:100%;width:0}hr{border:2px solid var(--background-2)}.theme-toggle-btn{background:none;border:none;border-radius:50%;bottom:20px;font-size:2.4rem;height:75px;margin:0 0 0 -275px;min-width:75px;padding:0;position:fixed;right:20px;width:75px}.theme-toggle-btn:hover{width:75px}@media (--breakpoint-mobile-outer ){.theme-toggle-btn{float:right;font-size:2.4rem;font-size:1.6rem;margin:0 0 10px;position:relative;top:auto}.theme-toggle-btn,.theme-toggle-btn:hover{height:48px;min-width:48px;width:48px}}nav{margin-left:-275px;margin-top:-10px;max-height:400px;overflow-x:hidden;overflow-y:auto;padding-right:10px;position:fixed;top:200px;width:250px}nav button{margin:-20px;z-index:20}nav button,nav header{padding:20px 20px 5px;position:fixed}nav header{color:var(--accent-2);content:"Navigation:";flex-basis:100%;font:var(--font-display);font-size:3.6rem;font-weight:700;line-height:4rem;margin:0;text-align:right;z-index:10}nav a{background:none;border:none;color:var(--primary-3);margin:2px 10px;padding:0;text-decoration:underline;text-decoration-color:var(--primary-3);text-decoration-thickness:1px;transition:color .1s ease;transition:text-decoration-color .1s ease}nav a:active:before,nav a:focus-visible:before,nav a:hover:before{background:none;border:none;text-decoration-color:var(--accent-2)}nav a:active:after,nav a:focus-visible:after,nav a:hover:after{bottom:5px}nav ul{align-content:flex-end;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-end;margin-top:65px;width:auto}nav ul>li{list-style:none;padding:0;text-align:right}nav ul>li:before{content:none}@media (--breakpoint-mobile-outer ){nav{margin:0;position:relative;top:auto;width:100%}nav ul{align-content:flex-start;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;margin-top:10px;max-height:80px;width:auto}nav header{margin:0;padding:0;position:relative;width:min-content}nav ul>li{text-align:left}}nav::-webkit-scrollbar{width:3px}h1{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 30%;background-repeat:no-repeat;background-size:100% 65%;color:var(--primary-1);display:table;font-size:6rem;letter-spacing:-1px;line-height:6rem;margin:5rem 0 1.5rem;padding:10px 20px 0 13.25px}h2{font-size:5rem;line-height:5rem;padding:8.75px 17.5px 0 13.25px}h2,h3{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 30%;background-repeat:no-repeat;background-size:100% 65%;color:var(--primary-1);display:table;letter-spacing:-1px;margin:3.5rem 0 1.5rem}h3{font-size:4rem;line-height:4rem;padding:7.5px 15px 0 13.25px}h4{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 30%;background-repeat:no-repeat;background-size:100% 65%;font-size:3rem;line-height:3rem}h4,h5{color:var(--primary-1);display:table;letter-spacing:-1px;margin:3.5rem 0 1.5rem;padding:9px 13.25px 0}h5{font-size:2.5rem;line-height:2.5rem}h6{color:var(--primary-1);display:table;font-size:2rem;letter-spacing:-1px;line-height:2rem;margin:3.5rem 0 1.5rem;padding:9px 13.25px 0}p{color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:2.88rem}strong{color:var(--accent-2)}b,strong{font-weight:700}em{color:var(--accent-1)}em,i{font-style:italic;font-weight:300}u{text-decoration-color:var(--accent-3)}s{color:var(--primary-3)}s:after,s:before{clip:rect(1px,1px,1px,1px);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}s:before{content:" [start of stricken text] "}s:after{content:" [end of stricken text] "}del{color:var(--primary-3)}del:after,del:before{clip:rect(1px,1px,1px,1px);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}del:before{content:" [deletion start] "}del:after{content:" [deletion end] "}ins{text-decoration-color:var(--accent-3);text-decoration-style:wavy}ins:after,ins:before{clip:rect(1px,1px,1px,1px);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}ins:before{content:" [insertion start] "}ins:after{content:" [insertion end] "}mark{background:var(--marked-color);color:var(--primary-1);padding:2px}small{color:var(--primary-3);line-height:1.6rem}abbr{text-decoration:underline;text-decoration-color:var(--accent-3)!important;text-decoration-style:dotted!important}abbr,dfn{cursor:help}a,a:after,a:before{background:none;border:none;color:var(--primary-2);padding:0;text-decoration:underline;text-decoration-color:var(--primary-2);text-decoration-thickness:1px;transition:text-decoration-color .1s ease}a:hover,a:hover:after,a:hover:before{background:none;border:none;text-decoration-color:var(--accent-2)}sup a{color:var(--primary-2)}sup a:active,sup a:focus-visible,sup a:hover{color:var(--primary-1);cursor:pointer}sup a:after,sup a:before,sup a:hover:after,sup a:hover:before{background:none;border:none}blockquote{border-left:8px solid var(--accent-2);color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:1.8em;margin:0;padding:1.25px 0 1.25px 10px}blockquote p{margin:2.5px 0}blockquote footer{border:none;color:var(--primary-3);font-size:1.4rem;font-style:none;letter-spacing:0;line-height:1.4rem;margin:20px 0;text-align:left;text-transform:none}aside{height:0;left:110%;margin:0;padding:0;position:relative;top:15px;width:60%}@media (--breakpoint-mobile-outer ){aside{height:auto;left:0;padding:1.25px 0 1.25px 75px;text-align:right;top:0;width:100%}}section{background-color:var(--background-2);border-radius:5px;color:var(--primary-2);margin:20px 0;padding:10px}section header{color:var(--accent-2);font-size:2.6rem;font-weight:700;line-height:2.8rem;margin-top:1rem} -------------------------------------------------------------------------------- /eslint.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignorePatterns": "dist/**", 3 | "env": { 4 | "es2021": true, 5 | "browser": true 6 | }, 7 | "extends": ["eslint:recommended", "prettier"], 8 | "parserOptions": { 9 | "ecmaVersion": 12, 10 | "sourceType": "module" 11 | }, 12 | "rules": {} 13 | } 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "furret.css", 3 | "version": "2.2.1", 4 | "description": "A lightweight, beautiful stylesheet that allows for high-quality, semantically correct HTML markup.", 5 | "main": "./dist/v2/full/light.min.css", 6 | "exports": { 7 | ".": "./dist/v2/full/light.min.css", 8 | "./js/theme-toggle.js": "./dist/js/theme-toggle.min.js", 9 | "./v1/light": "./dist/v1/light.min.css", 10 | "./v1/library": "./dist/v1/library.min.css", 11 | "./v1/dark": "./dist/v1/dark.min.css", 12 | "./v2/light": "./dist/v2/full/light.min.css", 13 | "./v2/dark": "./dist/v2/full/dark.min.css", 14 | "./v2/full/light": "./dist/v2/full/light.min.css", 15 | "./v2/full/dark": "./dist/v2/full/dark.min.css", 16 | "./v2/themes/light": "./dist/v2/themes/light.min.css", 17 | "./v2/themes/dark": "./dist/v2/themes/dark.min.css", 18 | "./v2/forms": "./dist/v2/forms.min.css", 19 | "./v2/images": "./dist/v2/images.min.css", 20 | "./v2/tables": "./dist/v2/tables.min.css", 21 | "./v2/typography": "./dist/v2/typography.min.css" 22 | }, 23 | "files": [ 24 | "dist" 25 | ], 26 | "author": "Ray Arayilakath (https://www.furret.codes)", 27 | "license": "MIT", 28 | "scripts": { 29 | "dev": "yarn gulp --gulpfile .config/gulpfile.js --cwd . watch", 30 | "build": "yarn gulp --gulpfile .config/gulpfile.js --cwd . build", 31 | "prod": "node .config/server.js", 32 | "lint": "yarn lint:js && yarn lint:css", 33 | "lint:fix": "yarn lint:js --fix && yarn lint:css --fix", 34 | "lint:js": "eslint src/**/*.js --config ./eslint.config.json", 35 | "lint:css": "stylelint src/**/*.css --config ./stylelint.config.json", 36 | "format": "prettier --check . --config ./prettier.config.json", 37 | "format:fix": "csscomb --config ./csscomb.config.json . && prettier --write . --config ./prettier.config.json" 38 | }, 39 | "devDependencies": { 40 | "@babel/cli": "^7.17.10", 41 | "@babel/core": "^7.18.5", 42 | "@babel/preset-env": "^7.18.2", 43 | "autoprefixer": "^10.4.7", 44 | "chalk": "4.1.2", 45 | "csscomb": "^4.3.0", 46 | "cssnano": "^5.1.12", 47 | "eslint": "^8.18.0", 48 | "eslint-config-prettier": "^8.5.0", 49 | "express": "^4.18.1", 50 | "gulp": "^4.0.2", 51 | "gulp-babel": "^8.0.0", 52 | "gulp-bytediff": "^1.0.0", 53 | "gulp-filter": "^7.0.0", 54 | "gulp-flatten": "^0.4.0", 55 | "gulp-postcss": "^9.0.1", 56 | "gulp-posthtml": "^3.0.5", 57 | "gulp-rename": "^2.0.0", 58 | "gulp-sizereport": "^1.2.1", 59 | "gulp-sourcemaps": "^3.0.0", 60 | "gulp-terser": "^2.1.0", 61 | "htmlnano": "^2.0.2", 62 | "postcss": "^8.4.14", 63 | "postcss-css-variables": "^0.18.0", 64 | "postcss-custom-media": "^8.0.2", 65 | "postcss-import": "^14.1.0", 66 | "postcss-inline-svg": "^5.0.0", 67 | "prettier": "^2.7.1", 68 | "stylelint": "^14.9.1", 69 | "stylelint-config-prettier": "^9.0.3", 70 | "stylelint-config-standard": "^26.0.0" 71 | }, 72 | "dependencies": {} 73 | } 74 | -------------------------------------------------------------------------------- /prettier.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "useTabs": true, 4 | "tabWidth": 4, 5 | "singleQuote": true, 6 | "embeddedLanguageFormatting": "off" 7 | } 8 | -------------------------------------------------------------------------------- /replit.nix: -------------------------------------------------------------------------------- 1 | { pkgs }: { 2 | deps = [ 3 | pkgs.nodejs-16_x 4 | pkgs.nodePackages.typescript-language-server 5 | pkgs.yarn 6 | ]; 7 | } -------------------------------------------------------------------------------- /src/builds/forms.css: -------------------------------------------------------------------------------- 1 | @import "../styles/partials/_forms.css"; 2 | -------------------------------------------------------------------------------- /src/builds/full/dark.css: -------------------------------------------------------------------------------- 1 | @import "../../styles/themes/variables-dark.css"; 2 | @import "../../styles/core.css"; 3 | -------------------------------------------------------------------------------- /src/builds/full/light.css: -------------------------------------------------------------------------------- 1 | @import "../../styles/themes/variables-light.css"; 2 | @import "../../styles/core.css"; 3 | -------------------------------------------------------------------------------- /src/builds/images.css: -------------------------------------------------------------------------------- 1 | @import "../styles/partials/_images.css"; 2 | -------------------------------------------------------------------------------- /src/builds/tables.css: -------------------------------------------------------------------------------- 1 | @import "../styles/partials/_tables.css"; 2 | -------------------------------------------------------------------------------- /src/builds/themes/dark.css: -------------------------------------------------------------------------------- 1 | @import "../../styles/themes/variables-dark.css"; 2 | -------------------------------------------------------------------------------- /src/builds/themes/light.css: -------------------------------------------------------------------------------- 1 | @import "../../styles/themes/variables-light.css"; 2 | -------------------------------------------------------------------------------- /src/builds/typography.css: -------------------------------------------------------------------------------- 1 | @import "../styles/partials/_code.css"; 2 | @import "../styles/partials/_footer.css"; 3 | @import "../styles/partials/_lists.css"; 4 | @import "../styles/partials/_meta.css"; 5 | @import "../styles/partials/_misc.css"; 6 | @import "../styles/partials/_nav.css"; 7 | @import "../styles/partials/_typography.css"; 8 | -------------------------------------------------------------------------------- /src/preview/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/android-chrome-192x192.png -------------------------------------------------------------------------------- /src/preview/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/android-chrome-512x512.png -------------------------------------------------------------------------------- /src/preview/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/apple-touch-icon.png -------------------------------------------------------------------------------- /src/preview/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #603cba 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/preview/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/favicon-16x16.png -------------------------------------------------------------------------------- /src/preview/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/favicon-32x32.png -------------------------------------------------------------------------------- /src/preview/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/favicon.ico -------------------------------------------------------------------------------- /src/preview/files.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | [files] ~ furret.css 9 | 10 | 11 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 29 | 35 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 53 | 57 | 58 | 59 | 60 | 61 |

Files

62 |

63 | This page includes all the files available on the furret.css CDN. 64 | Note that all .css files come with minified versions 65 | that are available by adding replacing .css with 66 | .min.css. 67 |

68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 93 | 94 | 95 | 96 | 100 | 101 | 102 | 103 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 117 | 118 | 119 | 120 | 124 | 125 | 126 | 127 | 131 | 132 | 133 | 134 | 138 | 139 | 140 | 141 | 145 | 146 | 147 | 148 | 152 | 153 | 154 | 155 | 159 | 160 | 161 | 162 | 166 | 167 | 168 |
ItemDescription
Plugins
/furretcss/js/theme-toggle.jsPlugin that allows for theme toggling capabilities.
Version 1
/furretcss/v1/dark.css 90 | Dark-themed variant of furret.css version 1. Includes 91 | all features of furret.css in one file. 92 |
/furretcss/v1/library.css 97 | Automatically-themed variant of furret.css version 1. 98 | Includes all features of furret.css in one file. 99 |
/furretcss/v1/light.css 104 | Light-themed variant of furret.css version 1. Includes 105 | all features of furret.css in one file. 106 |
Version 2
/furretcss/v2/full/dark.css 114 | Dark-themed variant of furret.css version 2. Includes 115 | all features of furret.css in one file. 116 |
/furretcss/v2/full/light.css 121 | Light-themed variant of furret.css version 2. Includes 122 | all features of furret.css in one file. 123 |
/furretcss/v2/themes/dark.css 128 | Exclusively dark theme variables for furret.css version 129 | 2. Must be paired with a cherry-picked file. 130 |
/furretcss/v2/themes/light.css 135 | Exclusively light theme variables for furret.css version 136 | 2. Must be paired with a cherry-picked file. 137 |
/furretcss/v2/forms.css 142 | Furret.css version 2 styling for all form-related 143 | elements. Must be paired with at least one themed file. 144 |
/furretcss/v2/images.css 149 | Furret.css version 2 styling for all media-related 150 | elements. Must be paired with at least one theme file. 151 |
/furretcss/v2/tables.css 156 | Furret.css version 2 styling for all table-related 157 | elements. Must be paired with at least one theme file. 158 |
/furretcss/v2/typography.css 163 | Furret.css version 2 styling for all typography-related 164 | elements. Must be paired with at least one theme file. 165 |
169 | 170 | 174 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /src/preview/furretcss/js/theme-toggle.js: -------------------------------------------------------------------------------- 1 | window.furrets = window.furrets || {}; 2 | window.USER_OVERRIDE = window.USER_OVERRIDE || {}; 3 | 4 | const noop = () => {}; 5 | 6 | var storage = (function () { 7 | var uid = new Date(); 8 | var storage; 9 | var result; 10 | try { 11 | (storage = window.localStorage).setItem(uid, uid); 12 | result = storage.getItem(uid) == uid; 13 | storage.removeItem(uid); 14 | return result && storage; 15 | } catch (exception) { 16 | noop(); 17 | } 18 | storage = function () { 19 | console.log('localStorage Disabled.'); 20 | return; 21 | }; 22 | storage.getItem = function () { 23 | console.log('localStorage Disabled.'); 24 | return; 25 | }; 26 | storage.setItem = function () { 27 | console.log('localStorage Disabled.'); 28 | return; 29 | }; 30 | return storage; 31 | })(); 32 | 33 | const acceptedHostnames = window.USER_OVERRIDE.acceptedHostnames 34 | ? window.USER_OVERRIDE.acceptedHostnames 35 | : [ 36 | 'css.furret.dev', // production server 37 | 'furretcss-lib.rayhanadev.repl.co', // development server 38 | ]; 39 | 40 | /* 41 | * @internal 42 | * Source: {@link https://stackoverflow.com/questions/16791527/can-i-use-a-regular-expression-in-queryselectorall} 43 | */ 44 | const DOMRegex = function (elem, attr, regex) { 45 | const output = []; 46 | const elements = document.querySelectorAll(elem); 47 | 48 | for (const link of elements) { 49 | const url = acceptedHostnames.includes(location.hostname) 50 | ? new URL(link[attr], location.origin) // use website hostname (self-hosting) 51 | : new URL(link[attr]); // use link hostname (cdn) 52 | 53 | if (regex.test(url.pathname)) { 54 | output.push(link); 55 | } 56 | } 57 | 58 | return output; 59 | }; 60 | 61 | /* 62 | * @internal 63 | */ 64 | const loadColorScheme = function (scheme) { 65 | if (!['light', 'dark'].includes(scheme)) scheme = 'light'; 66 | 67 | const links = []; 68 | 69 | const furretcssPath = new RegExp( 70 | '/furretcss/v2/full/(?:light|dark)(?:.min)?.css', 71 | ); 72 | 73 | links.push(...DOMRegex('link', 'href', furretcssPath)); 74 | 75 | const furretcssHljsPath = new RegExp( 76 | '/highlightjs/(?:light|dark)(?:.min)?.css', 77 | ); 78 | 79 | links.push(...DOMRegex('link', 'href', furretcssHljsPath)); 80 | 81 | for (const link of links) { 82 | const url = acceptedHostnames.includes(location.hostname) 83 | ? new URL(link.href, location.origin) // use website hostname (self-hosting) 84 | : new URL(link.href); // use link hostname (cdn) 85 | 86 | if (!acceptedHostnames.includes(url.hostname)) continue; 87 | 88 | if (link.rel === 'stylesheet') { 89 | if (link.href.includes('/furretcss/v2/full')) { 90 | const min = link.href.includes('.min') ? '.min' : ''; 91 | link.href = `${url.protocol}//${url.hostname}/furretcss/v2/full/${scheme}${min}.css`; 92 | } 93 | 94 | if (link.href.includes('/highlightjs')) { 95 | link.href = `${url.protocol}//${url.hostname}/highlightjs/${scheme}.css`; 96 | } 97 | } 98 | } 99 | }; 100 | 101 | /* 102 | * Side effect of loading the file. Sets up first interaction states 103 | * and sets localStorage keys. Does not activate theme, use 104 | * furrets.addThemeToggle() to do that. 105 | */ 106 | if (storage.getItem('furretcss-interacted') !== 'true') { 107 | if ( 108 | window.matchMedia && 109 | window.matchMedia('(prefers-color-scheme: dark)').matches 110 | ) { 111 | storage.setItem('furretcss-theme', 'dark'); 112 | storage.setItem('furretcss-interacted', 'true'); 113 | } else { 114 | storage.setItem('furretcss-theme', 'none'); 115 | } 116 | } 117 | 118 | /* 119 | * Function to manually toggle the theme. 120 | */ 121 | window.furrets.themeToggle = function (toggleBtn) { 122 | const themeToSet = 123 | storage.getItem('furretcss-theme') === 'dark' ? 'light' : 'dark'; 124 | 125 | loadColorScheme(themeToSet); 126 | storage.setItem('furretcss-theme', themeToSet); 127 | if (toggleBtn) toggleBtn.innerText = themeToSet === 'light' ? '☀️' : '🌙'; 128 | 129 | return themeToSet; 130 | }; 131 | 132 | /* 133 | * Function to initialize the theme and add a toggle to 134 | * the website. 135 | */ 136 | window.furrets.addThemeToggle = function () { 137 | const storedTheme = storage.getItem('furretcss-theme'); 138 | const themeToggle = document.createElement('button'); 139 | themeToggle.innerText = storedTheme === 'light' ? '☀️' : '🌙'; 140 | themeToggle.className = 'theme-toggle-btn'; 141 | themeToggle.addEventListener('click', () => 142 | window.furrets.themeToggle(themeToggle), 143 | ); 144 | 145 | const container = document.querySelector('body'); 146 | container.insertAdjacentElement('afterbegin', themeToggle); 147 | 148 | const furretcssPath = new RegExp( 149 | '/furretcss/v2/full/(?:light|dark)(?:.min)?.css', 150 | ); 151 | const links = DOMRegex('link', 'href', furretcssPath); 152 | 153 | if (links.length === 0) { 154 | console.warn( 155 | 'Warning: a full furretcss stylesheet was not found. Cannot choose stylesheet to preload.', 156 | ); 157 | return; 158 | } 159 | 160 | const loadedTheme = 161 | links[0].href.split('/').pop().split('.')[0] === 'light' 162 | ? 'light' 163 | : 'dark'; 164 | const themeToPreload = loadedTheme === 'light' ? 'dark' : 'light'; 165 | 166 | const preload = document.createElement('link'); 167 | preload.rel = 'preconnect'; 168 | preload.href = links[0].href.replace(loadedTheme, themeToPreload); 169 | preload.as = 'text/css'; 170 | 171 | links[0].after(preload); 172 | 173 | loadColorScheme(storedTheme); 174 | }; 175 | -------------------------------------------------------------------------------- /src/preview/furretcss/v1/dark.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/furretcss/v1/dark.css -------------------------------------------------------------------------------- /src/preview/furretcss/v1/dark.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/furretcss/v1/dark.min.css -------------------------------------------------------------------------------- /src/preview/furretcss/v1/library.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/furretcss/v1/library.css -------------------------------------------------------------------------------- /src/preview/furretcss/v1/library.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/furretcss/v1/library.min.css -------------------------------------------------------------------------------- /src/preview/furretcss/v1/light.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/furretcss/v1/light.css -------------------------------------------------------------------------------- /src/preview/furretcss/v1/light.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/furretcss/v1/light.min.css -------------------------------------------------------------------------------- /src/preview/highlightjs/dark.css: -------------------------------------------------------------------------------- 1 | /* Base2Tone-Drawbridge Dark */ 2 | /* by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes) */ 3 | /* https://github.com/atelierbram/Base2Tone-highlight.js/ */ 4 | 5 | /* Base2Tone-Drawbridge Comment */ 6 | 7 | .hljs-comment, 8 | .hljs-quote, 9 | .hljs-regexp, 10 | .hljs-attribute, 11 | .hljs-selector-id, 12 | .hljs-selector-class, 13 | .hljs-selector-attr, 14 | .hljs-selector-tag, 15 | .hljs-selector-pseudo, 16 | .hljs-tag, 17 | .hljs-symbol, 18 | .hljs-attr, 19 | .hljs-property { 20 | color: #585a81; 21 | } 22 | 23 | .hljs-string { 24 | color: #6395a3; 25 | } 26 | 27 | .hljs-number, 28 | .hljs-variable, 29 | .hljs-template-variable, 30 | .hljs-meta, 31 | .hljs-built_in, 32 | .hljs-builtin-name { 33 | color: #4f7c8a; 34 | } 35 | 36 | .hljs-keyword { 37 | color: #3c6372; 38 | } 39 | 40 | .hljs-literal { 41 | color: #2c4c59; 42 | } 43 | 44 | .hljs-type, 45 | .hljs-name, 46 | .hljs-link, 47 | .hljs-params, 48 | .hljs-bullet .hljs-title, 49 | .class_, 50 | .function_, 51 | .hljs-section { 52 | color: #d9d9d9; 53 | } 54 | 55 | .hljs-emphasis { 56 | font-style: italic; 57 | } 58 | 59 | .hljs-strong { 60 | font-weight: bold; 61 | } 62 | 63 | .hljs { 64 | display: block; 65 | overflow-x: auto; 66 | color: #4f7c8a; 67 | padding: 0.5em; 68 | } 69 | -------------------------------------------------------------------------------- /src/preview/highlightjs/light.css: -------------------------------------------------------------------------------- 1 | /* Base2Tone-Drawbridge Dark */ 2 | /* by Bram de Haan, adapted from DuoTone themes by Simurai (http://simurai.com/projects/2016/01/01/duotone-themes) */ 3 | /* https://github.com/atelierbram/Base2Tone-highlight.js/ */ 4 | 5 | /* Base2Tone-Drawbridge Comment */ 6 | 7 | .hljs-comment, 8 | .hljs-quote, 9 | .hljs-regexp, 10 | .hljs-attribute, 11 | .hljs-selector-id, 12 | .hljs-selector-class, 13 | .hljs-selector-attr, 14 | .hljs-selector-tag, 15 | .hljs-selector-pseudo, 16 | .hljs-tag, 17 | .hljs-symbol, 18 | .hljs-attr, 19 | .hljs-property { 20 | color: #bfbfbf; 21 | } 22 | 23 | .hljs-string { 24 | color: #6395a3; 25 | } 26 | 27 | .hljs-number, 28 | .hljs-variable, 29 | .hljs-template-variable, 30 | .hljs-meta, 31 | .hljs-built_in, 32 | .hljs-builtin-name { 33 | color: #4f7c8a; 34 | } 35 | 36 | .hljs-keyword { 37 | color: #3c6372; 38 | } 39 | 40 | .hljs-literal { 41 | color: #2c4c59; 42 | } 43 | 44 | .hljs-type, 45 | .hljs-name, 46 | .hljs-link, 47 | .hljs-params, 48 | .hljs-bullet .hljs-title, 49 | .class_, 50 | .function_, 51 | .hljs-section { 52 | color: #585a81; 53 | } 54 | 55 | .hljs-emphasis { 56 | font-style: italic; 57 | } 58 | 59 | .hljs-strong { 60 | font-weight: bold; 61 | } 62 | 63 | .hljs { 64 | display: block; 65 | overflow-x: auto; 66 | color: #4f7c8a; 67 | padding: 0.5em; 68 | } 69 | -------------------------------------------------------------------------------- /src/preview/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/logo.png -------------------------------------------------------------------------------- /src/preview/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/src/preview/mstile-150x150.png -------------------------------------------------------------------------------- /src/preview/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/preview/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "furret.css", 3 | "short_name": "furret.css", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#14131e", 17 | "background_color": "#14131e", 18 | "start_url": "https://css.furret.dev", 19 | "display": "standalone" 20 | } 21 | -------------------------------------------------------------------------------- /src/preview/theming.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | [theming] ~ furret.css 9 | 10 | 11 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 29 | 35 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 53 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |

Theming

64 |

65 | Furret.css was built with beauty as a key point. As such, it comes 66 | with seperate light and dark themes, along with syntax highlighting 67 | and theme toggling! 68 |

69 | 70 | 78 | 79 |

Dark Theme

80 |

81 | To use the dark theme, change the light in the stylesheet url 82 | to dark, or add the following to the to the 83 | <head> of your HTML: 84 |

85 |
<link rel="stylesheet" href="https://css.furret.dev/furretcss/v2/full/dark.min.css" />
88 | 89 |

Syntax Highlighting

90 |

91 | Furret.css does not include syntax highlighting out of the box, 92 | however it can be used with 93 | highlight.js and a custom 94 | stylesheet. To use the syntax highlighter, add the following to the 95 | <head> of your HTML: 96 |

97 |
<link rel="stylesheet" href="https://css.furret.dev/highlightjs/light.css" />
100 | <script src="https://css.furret.dev/highlightjs/highlight.js"></script>
101 |

And the following to the end of your <body>:

102 |
<script>hljs.highlightAll();</script>
105 |

106 | You can use the dark syntax highlighting theme by replacing 107 | light.css with dark.css. 108 |

109 |

Theme Toggling

110 |

111 | In order to provide the best experience with for developers and 112 | users, furret.css defaults to a single theme and comes with 113 | Javascript that allows for a toggleable light and dark theme. This 114 | will respect user preferences and allows for persisted themes. To 115 | add toggleable theming, add the following script to the 116 | <head> of your HTML: 117 |

118 |
<script src="https://css.furret.dev/furretcss/js/theme-toggle.js"></script>
121 |

And the following to the end of your <body>:

122 |
<script>furrets.addThemeToggle();</script>
125 | 126 | 130 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /src/styles/assets/mail.svg: -------------------------------------------------------------------------------- 1 | 2 | Created with Fabric.js 1.7.22 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/styles/assets/message.svg: -------------------------------------------------------------------------------- 1 | 2 | Created with Fabric.js 1.7.22 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/styles/assets/phone.svg: -------------------------------------------------------------------------------- 1 | 2 | Created with Fabric.js 1.7.22 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/styles/core.css: -------------------------------------------------------------------------------- 1 | @import "variables.css"; 2 | @import "partials/_meta.css"; 3 | @import "partials/_nav.css"; 4 | @import "partials/_typography.css"; 5 | @import "partials/_code.css"; 6 | @import "partials/_lists.css"; 7 | @import "partials/_images.css"; 8 | @import "partials/_tables.css"; 9 | @import "partials/_forms.css"; 10 | @import "partials/_footer.css"; 11 | @import "partials/_misc.css"; 12 | -------------------------------------------------------------------------------- /src/styles/partials/_code.css: -------------------------------------------------------------------------------- 1 | code, 2 | samp { 3 | font-family: var(--font-monospace); 4 | font-size: 1.6rem; 5 | line-height: 2.2rem; 6 | overflow-x: auto; 7 | padding: 0.25rem; 8 | color: var(--primary-2); 9 | border-radius: 0.5rem; 10 | background: var(--background-2); 11 | } 12 | 13 | samp:before { 14 | content: "~$ "; 15 | color: var(--primary-3); 16 | } 17 | 18 | kbd { 19 | font-family: var(--font-monospace); 20 | font-size: 1.6rem; 21 | line-height: 1.6rem; 22 | padding: 0.25rem; 23 | cursor: help; 24 | text-transform: uppercase; 25 | color: var(--color-strong); 26 | border-radius: 0.5rem; 27 | background: var(--background-1); 28 | } 29 | 30 | pre { 31 | font-family: var(--font-monospace); 32 | font-size: 1.6rem; 33 | line-height: 2.2rem; 34 | overflow-x: auto; 35 | padding: 0.5rem; 36 | color: var(--primary-2); 37 | border-radius: 0.5rem; 38 | background: var(--background-2); 39 | } 40 | 41 | var { 42 | font-family: var(--font-monospace); 43 | font-style: italic; 44 | color: var(--primary-2); 45 | } 46 | -------------------------------------------------------------------------------- /src/styles/partials/_footer.css: -------------------------------------------------------------------------------- 1 | footer { 2 | font-size: 1.2rem; 3 | line-height: initial; 4 | margin-top: 50px; 5 | padding-top: 8px; 6 | text-align: center; 7 | letter-spacing: 1.2px; 8 | text-transform: uppercase; 9 | color: var(--primary-2); 10 | border-top: 2px solid var(--accent-2); 11 | } 12 | 13 | footer a { 14 | transform-origin: 0 -10px; 15 | } 16 | 17 | footer a:before { 18 | transform-origin: 0 11px; 19 | } 20 | 21 | footer a:after { 22 | bottom: 0; 23 | border: 5.5px solid transparent; 24 | } 25 | 26 | @media (prefers-reduced-motion: no-preference) { 27 | footer a:hover:before { 28 | transition: 100ms ease-out; 29 | transform: scaleY(0.25); 30 | background: var(--accent-2); 31 | } 32 | 33 | footer a:after { 34 | right: -7.75px; 35 | transition: transform 50ms ease-out 100ms; 36 | transform: none; 37 | } 38 | } 39 | 40 | @media (--breakpoint-mobile) { 41 | footer a:before { 42 | transform-origin: 0 9px; 43 | } 44 | 45 | footer a:after { 46 | bottom: -1px; 47 | border: 4px solid transparent; 48 | } 49 | 50 | footer a:hover:after { 51 | right: -6px; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/styles/partials/_images.css: -------------------------------------------------------------------------------- 1 | img, 2 | video, 3 | object, 4 | canvas { 5 | height: auto; 6 | max-width: 100%; 7 | } 8 | 9 | figure { 10 | width: 100%; 11 | display: flex; 12 | align-content: center; 13 | justify-content: center; 14 | flex-wrap: wrap; 15 | margin: 20px 0 20px 0; 16 | flex-direction: column; 17 | } 18 | 19 | figure img { 20 | height: auto; 21 | max-width: 80%; 22 | margin: auto; 23 | } 24 | 25 | figure figcaption p { 26 | flex-basis: 100%; 27 | color: var(--primary-3); 28 | font-size: 1.6rem; 29 | line-height: 2.2rem; 30 | text-align: center; 31 | margin-top: 10px; 32 | } 33 | -------------------------------------------------------------------------------- /src/styles/partials/_lists.css: -------------------------------------------------------------------------------- 1 | ul { 2 | margin: 5px 0 15px; 3 | padding: 0; 4 | } 5 | 6 | ul > li { 7 | position: relative; 8 | padding: 0 0 0 20px; 9 | list-style: none; 10 | font-family: var(--font-body); 11 | font-size: 1.6rem; 12 | font-weight: 400; 13 | line-height: 1.8em; 14 | color: var(--primary-2); 15 | } 16 | 17 | ul > li:before { 18 | position: absolute; 19 | top: 14px; 20 | left: 0; 21 | width: 5px; 22 | height: 5px; 23 | content: ""; 24 | transform: rotate(45deg); 25 | border: 1px solid var(--accent-2); 26 | border-width: 2px 2px 0 0; 27 | } 28 | 29 | @media (--breakpoint-mobile) { 30 | ul > li:before { 31 | top: 8px; 32 | } 33 | } 34 | 35 | ul input ~ li:before { 36 | list-style-type: none; 37 | } 38 | 39 | ul input[type="checkbox"] { 40 | font: inherit; 41 | display: inline-grid; 42 | width: 20px; 43 | height: 20px; 44 | margin: 0; 45 | margin-right: 10px; 46 | color: var(--background-3); 47 | border: 2px solid var(--primary-2); 48 | background: var(--background-3); 49 | appearance: none; 50 | place-content: center; 51 | cursor: pointer; 52 | } 53 | 54 | ul input[type="checkbox"] { 55 | border-radius: 25%; 56 | } 57 | 58 | ul input[type="checkbox"]:before { 59 | width: 12px; 60 | height: 12px; 61 | content: ""; 62 | transition: 120ms transform ease-in-out; 63 | transform: scale(0); 64 | box-shadow: inset 10px 10px var(--accent-2); 65 | cursor: pointer; 66 | } 67 | 68 | ul input[type="checkbox"]:before { 69 | border-radius: 25%; 70 | transform-origin: bottom left; 71 | clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); 72 | } 73 | 74 | ul input[type="checkbox"]:checked:before { 75 | transform: scale(1); 76 | } 77 | 78 | ul input[type="checkbox"]:disabled { 79 | border-color: var(--background-1); 80 | background-color: var(--background-3); 81 | } 82 | 83 | ul input[type="checkbox"]:disabled + label { 84 | color: var(--primary-3); 85 | cursor: not-allowed; 86 | } 87 | 88 | @media (--breakpoint-mobile) { 89 | ul input[type="checkbox"] { 90 | width: 15px; 91 | height: 15px; 92 | transform: translateY(3px); 93 | } 94 | 95 | ul input[type="checkbox"]:before { 96 | width: 10px; 97 | height: 10px; 98 | } 99 | } 100 | 101 | ol { 102 | margin: 5px 0 15px; 103 | padding: 0; 104 | counter-reset: item; 105 | } 106 | 107 | ol > li { 108 | position: relative; 109 | padding: 0 0 0 20px; 110 | list-style: none; 111 | counter-increment: item; 112 | font-family: var(--font-body); 113 | font-size: 1.6rem; 114 | font-weight: 400; 115 | line-height: 1.8em; 116 | color: var(--primary-2); 117 | } 118 | 119 | ol > li:before { 120 | font-family: var(--font-body); 121 | font-size: 1.6rem; 122 | position: absolute; 123 | top: 0; 124 | left: -4px; 125 | width: 5px; 126 | height: 5px; 127 | content: counter(item) ")"; 128 | color: var(--accent-2); 129 | } 130 | 131 | dl { 132 | margin: 5px 0 15px; 133 | padding: 0; 134 | } 135 | 136 | dl > dt { 137 | position: relative; 138 | font-family: var(--font-body); 139 | font-size: 1.6rem; 140 | font-weight: 400; 141 | line-height: 1.8em; 142 | color: var(--primary-2); 143 | } 144 | 145 | dl > dd { 146 | position: relative; 147 | font-family: var(--font-body); 148 | font-size: 1.6rem; 149 | font-weight: 400; 150 | line-height: 1.8em; 151 | color: var(--primary-2); 152 | margin-top: -20px; 153 | margin-inline-start: 30px; 154 | } 155 | 156 | @media (--breakpoint-mobile) { 157 | ol > li:before { 158 | left: 0; 159 | } 160 | 161 | dl > dd { 162 | margin-top: -15px; 163 | margin-inline-start: 20px; 164 | } 165 | } 166 | 167 | address { 168 | width: 100%; 169 | display: flex; 170 | flex-direction: column; 171 | font-style: normal; 172 | margin: -5px 0 -5px 0; 173 | } 174 | 175 | address a { 176 | font-size: 1.6rem; 177 | line-height: 2rem; 178 | margin: 5px 0 5px 0; 179 | } 180 | 181 | address a:before, 182 | address a:hover:before, 183 | address a:active:before, 184 | address a:focus-visible:before { 185 | border: none; 186 | background: none; 187 | transform: none; 188 | } 189 | 190 | address a:hover:before, 191 | address a:active:before, 192 | address a:focus-visible:before { 193 | animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both; 194 | } 195 | 196 | address a:after { 197 | border: none; 198 | } 199 | 200 | address a[href^="mailto\:"]:before { 201 | content: "📧 "; 202 | display: inline-block; 203 | position: relative; 204 | transform-origin: center; 205 | width: 25px; 206 | margin-right: 5px; 207 | text-decoration: none; 208 | } 209 | 210 | address a[href^="tel\:"]:before { 211 | content: "📞 "; 212 | display: inline-block; 213 | position: relative; 214 | transform-origin: center; 215 | width: 25px; 216 | margin-right: 5px; 217 | text-decoration: none; 218 | } 219 | 220 | address a[href^="sms\:"]:before { 221 | content: "💬 "; 222 | display: inline-block; 223 | position: relative; 224 | transform-origin: center; 225 | width: 25px; 226 | margin-right: 5px; 227 | text-decoration: none; 228 | } 229 | 230 | @keyframes shake { 231 | 0% { 232 | transform: translateX(0); 233 | } 234 | 25% { 235 | transform: translateY(-9px); 236 | } 237 | 35% { 238 | transform: translateY(-9px) rotate(17deg); 239 | } 240 | 55% { 241 | transform: translateY(-9px) rotate(-17deg); 242 | } 243 | 65% { 244 | transform: translateY(-9px) rotate(17deg); 245 | } 246 | 75% { 247 | transform: translateY(-9px) rotate(-17deg); 248 | } 249 | 100% { 250 | transform: translateY(0) rotate(0); 251 | } 252 | } 253 | -------------------------------------------------------------------------------- /src/styles/partials/_meta.css: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | box-sizing: inherit; 5 | } 6 | 7 | html { 8 | box-sizing: border-box; 9 | background-color: var(--background-3); 10 | transition: all 0.44s ease; 11 | overflow-x: hidden; 12 | } 13 | 14 | html, 15 | body { 16 | font-family: var(--font-display); 17 | font-size: 70%; 18 | line-height: 70%; 19 | margin: 0; 20 | padding: 0; 21 | -webkit-font-smoothing: antialiased; 22 | -webkit-tap-highlight-color: transparent; 23 | } 24 | 25 | body { 26 | height: fit-content; 27 | margin: 40px auto 0; 28 | max-width: 700px; 29 | padding: 20px; 30 | } 31 | 32 | p:target { 33 | padding-left: 5px; 34 | background-color: var(--background-1); 35 | } 36 | 37 | ::selection { 38 | background-color: var(--selection-color); 39 | } 40 | 41 | ::-webkit-scrollbar { 42 | width: 7.5px; 43 | height: 5px; 44 | } 45 | 46 | ::-webkit-scrollbar-track { 47 | border-radius: 0.5rem; 48 | background: var(--background-1); 49 | } 50 | 51 | ::-webkit-scrollbar-thumb { 52 | border-radius: 0.5rem; 53 | background: var(--primary-3); 54 | } 55 | 56 | ::-webkit-scrollbar-thumb:hover { 57 | border-radius: 0.5rem; 58 | background: var(--primary-2); 59 | } 60 | 61 | @media (--breakpoint-mobile) { 62 | html, 63 | body { 64 | font-size: 50%; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/styles/partials/_misc.css: -------------------------------------------------------------------------------- 1 | flex-break { 2 | width: 0; 3 | flex-basis: 100%; 4 | } 5 | 6 | hr { 7 | border: 2px solid var(--background-2); 8 | } 9 | 10 | .theme-toggle-btn { 11 | background: none; 12 | border: none; 13 | height: 75px; 14 | width: 75px; 15 | min-width: 75px; 16 | margin: 0; 17 | padding: 0; 18 | position: fixed; 19 | margin-left: -275px; 20 | font-size: 2.4rem; 21 | bottom: 20px; 22 | right: 20px; 23 | border-radius: 50%; 24 | } 25 | 26 | .theme-toggle-btn:hover { 27 | width: 75px; 28 | } 29 | 30 | @media (--breakpoint-mobile-outer) { 31 | .theme-toggle-btn { 32 | font-size: 2.4rem; 33 | top: initial; 34 | margin: 0; 35 | margin-bottom: 10px; 36 | position: relative; 37 | float: right; 38 | width: 48px; 39 | height: 48px; 40 | min-width: 48px; 41 | font-size: 1.6rem; 42 | } 43 | 44 | .theme-toggle-btn:hover { 45 | width: 48px; 46 | height: 48px; 47 | min-width: 48px; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/styles/partials/_nav.css: -------------------------------------------------------------------------------- 1 | nav { 2 | margin-top: -10px; 3 | width: 250px; 4 | position: fixed; 5 | margin-left: -275px; 6 | top: 200px; 7 | max-height: 400px; 8 | overflow-x: hidden; 9 | overflow-y: auto; 10 | padding-right: 10px; 11 | } 12 | 13 | nav button { 14 | position: fixed; 15 | z-index: 20; 16 | padding: 20px 20px 5px 20px; 17 | margin: -20px; 18 | } 19 | 20 | nav header { 21 | content: "Navigation:"; 22 | flex-basis: 100%; 23 | color: var(--accent-2); 24 | font: var(--font-display); 25 | font-size: 3.6rem; 26 | font-weight: 700; 27 | line-height: 4rem; 28 | text-align: right; 29 | position: fixed; 30 | z-index: 10; 31 | padding: 20px 20px 5px 20px; 32 | margin: 0; 33 | } 34 | 35 | nav a { 36 | background: none; 37 | border: none; 38 | padding: 0; 39 | margin: 2px 10px; 40 | color: var(--primary-3); 41 | text-decoration: underline; 42 | text-decoration-thickness: 1px; 43 | text-decoration-color: var(--primary-3); 44 | transition: color 0.1s ease; 45 | transition: text-decoration-color 0.1s ease; 46 | } 47 | 48 | nav a:hover:before, 49 | nav a:active:before, 50 | nav a:focus-visible:before { 51 | background: none; 52 | border: none; 53 | text-decoration-color: var(--accent-2); 54 | } 55 | 56 | nav a:hover:after, 57 | nav a:active:after, 58 | nav a:focus-visible:after { 59 | bottom: 5px; 60 | } 61 | 62 | nav ul { 63 | display: flex; 64 | align-content: flex-end; 65 | justify-content: flex-end; 66 | flex-wrap: wrap; 67 | flex-direction: column; 68 | width: initial; 69 | margin-top: 65px; 70 | } 71 | 72 | nav ul > li { 73 | list-style: none; 74 | padding: 0; 75 | text-align: right; 76 | } 77 | 78 | nav ul > li:before { 79 | content: none; 80 | } 81 | 82 | @media (--breakpoint-mobile-outer) { 83 | nav { 84 | width: 100%; 85 | position: relative; 86 | margin: 0; 87 | top: initial; 88 | } 89 | 90 | nav ul { 91 | flex-direction: column; 92 | width: auto; 93 | align-content: flex-start; 94 | justify-content: flex-start; 95 | flex-wrap: wrap; 96 | margin-top: 10px; 97 | max-height: 80px; 98 | } 99 | 100 | nav header { 101 | margin: 0; 102 | padding: 0; 103 | position: relative; 104 | width: min-content; 105 | } 106 | 107 | nav ul > li { 108 | text-align: left; 109 | } 110 | } 111 | 112 | nav::-webkit-scrollbar { 113 | width: 3px; 114 | } 115 | -------------------------------------------------------------------------------- /src/styles/partials/_tables.css: -------------------------------------------------------------------------------- 1 | table { 2 | width: 100%; 3 | max-width: 100%; 4 | border: 1px solid var(--background-2); 5 | border-collapse: collapse; 6 | border-spacing: 0; 7 | display: block; 8 | overflow-x: auto; 9 | margin: 20px 0 20px 0; 10 | } 11 | 12 | table thead { 13 | display: table-header-group; 14 | width: 100%; 15 | } 16 | 17 | table thead tr { 18 | border: 1px solid var(--accent-2); 19 | width: auto; 20 | min-width: 100%; 21 | } 22 | 23 | table thead tr th { 24 | border: 1px solid var(--accent-2); 25 | background-color: var(--accent-2); 26 | color: var(--primary-2); 27 | font-size: 1.6rem; 28 | line-height: 2.2rem; 29 | height: 2.8rem; 30 | padding: 10px; 31 | overflow-x: auto; 32 | min-width: 220px; 33 | } 34 | 35 | table tbody { 36 | display: table-row-group; 37 | width: 100%; 38 | } 39 | 40 | table tbody tr { 41 | border: 1px solid var(--background-2); 42 | width: auto; 43 | min-width: 100%; 44 | } 45 | 46 | table tbody tr td { 47 | border: 1px solid var(--background-2); 48 | color: var(--primary-2); 49 | font-size: 1.6rem; 50 | line-height: 2.2rem; 51 | height: 2.8rem; 52 | padding: 10px; 53 | overflow-x: auto; 54 | min-width: 220px; 55 | } 56 | 57 | table tbody tr th { 58 | border: 1px solid var(--background-2); 59 | color: var(--primary-2); 60 | font-size: 1.6rem; 61 | font-weight: 700; 62 | line-height: 2.2rem; 63 | height: 2.8rem; 64 | padding: 10px; 65 | overflow-x: auto; 66 | min-width: 220px; 67 | } 68 | 69 | table tfoot { 70 | display: table-footer-group; 71 | width: 100%; 72 | } 73 | 74 | table tfoot tr { 75 | border: 1px solid var(--background-2); 76 | width: auto; 77 | min-width: 100%; 78 | } 79 | 80 | table tfoot tr td { 81 | border: 1px solid var(--background-2); 82 | color: var(--primary-3); 83 | font-size: 1.6rem; 84 | line-height: 2.2rem; 85 | height: 2.8rem; 86 | padding: 10px; 87 | overflow-x: auto; 88 | min-width: 220px; 89 | } 90 | 91 | table tfoot tr th { 92 | border: 1px solid var(--background-2); 93 | color: var(--primary-3); 94 | font-size: 1.6rem; 95 | font-weight: 700; 96 | line-height: 2.2rem; 97 | height: 2.8rem; 98 | padding: 10px; 99 | overflow-x: auto; 100 | min-width: 220px; 101 | } 102 | 103 | table caption { 104 | caption-side: bottom; 105 | color: var(--primary-2); 106 | font-size: 1.6rem; 107 | line-height: 2.2rem; 108 | height: 2.8rem; 109 | text-align: center; 110 | } 111 | -------------------------------------------------------------------------------- /src/styles/partials/_typography.css: -------------------------------------------------------------------------------- 1 | /* Headings */ 2 | 3 | h1 { 4 | font-size: 6rem; 5 | line-height: 6rem; 6 | display: table; 7 | margin: 0; 8 | margin-top: 5rem; 9 | margin-bottom: 1.5rem; 10 | padding: 10px 20px 0 13.25px; 11 | letter-spacing: -1px; 12 | color: var(--primary-1); 13 | background: linear-gradient( 14 | 120deg, 15 | var(--highlight-color) 0%, 16 | var(--highlight-color) 100% 17 | ); 18 | background-repeat: no-repeat; 19 | background-position: 0 30%; 20 | background-size: 100% 65%; 21 | } 22 | 23 | h2 { 24 | font-size: 5rem; 25 | line-height: 5rem; 26 | display: table; 27 | margin: 0; 28 | margin-top: 3.5rem; 29 | margin-bottom: 1.5rem; 30 | padding: 8.75px 17.5px 0 13.25px; 31 | letter-spacing: -1px; 32 | color: var(--primary-1); 33 | background: linear-gradient( 34 | 120deg, 35 | var(--highlight-color) 0%, 36 | var(--highlight-color) 100% 37 | ); 38 | background-repeat: no-repeat; 39 | background-position: 0 30%; 40 | background-size: 100% 65%; 41 | } 42 | 43 | h3 { 44 | font-size: 4rem; 45 | line-height: 4rem; 46 | display: table; 47 | margin: 0; 48 | margin-top: 3.5rem; 49 | margin-bottom: 1.5rem; 50 | padding: 7.5px 15px 0 13.25px; 51 | letter-spacing: -1px; 52 | color: var(--primary-1); 53 | background: linear-gradient( 54 | 120deg, 55 | var(--highlight-color) 0%, 56 | var(--highlight-color) 100% 57 | ); 58 | background-repeat: no-repeat; 59 | background-position: 0 30%; 60 | background-size: 100% 65%; 61 | } 62 | 63 | h4 { 64 | font-size: 3rem; 65 | line-height: 3rem; 66 | display: table; 67 | margin: 0; 68 | margin-top: 3.5rem; 69 | margin-bottom: 1.5rem; 70 | padding: 9px 13.25px 0 13.25px; 71 | letter-spacing: -1px; 72 | color: var(--primary-1); 73 | background: linear-gradient( 74 | 120deg, 75 | var(--highlight-color) 0%, 76 | var(--highlight-color) 100% 77 | ); 78 | background-repeat: no-repeat; 79 | background-position: 0 30%; 80 | background-size: 100% 65%; 81 | } 82 | 83 | h5 { 84 | font-size: 2.5rem; 85 | line-height: 2.5rem; 86 | display: table; 87 | margin: 0; 88 | margin-top: 3.5rem; 89 | margin-bottom: 1.5rem; 90 | padding: 9px 13.25px 0 13.25px; 91 | letter-spacing: -1px; 92 | color: var(--primary-1); 93 | } 94 | 95 | h6 { 96 | font-size: 2rem; 97 | line-height: 2rem; 98 | display: table; 99 | margin: 0; 100 | margin-top: 3.5rem; 101 | margin-bottom: 1.5rem; 102 | padding: 9px 13.25px 0 13.25px; 103 | letter-spacing: -1px; 104 | color: var(--primary-1); 105 | } 106 | 107 | /* Paragraph Text */ 108 | 109 | p { 110 | font-family: var(--font-body); 111 | font-size: 1.6rem; 112 | font-weight: 400; 113 | line-height: 2.88rem; 114 | color: var(--primary-2); 115 | } 116 | 117 | strong { 118 | font-weight: 700; 119 | color: var(--accent-2); 120 | } 121 | 122 | b { 123 | font-weight: 700; 124 | } 125 | 126 | em { 127 | font-weight: 300; 128 | font-style: italic; 129 | color: var(--accent-1); 130 | } 131 | 132 | i { 133 | font-weight: 300; 134 | font-style: italic; 135 | } 136 | 137 | u { 138 | text-decoration-color: var(--accent-3); 139 | } 140 | 141 | s { 142 | color: var(--primary-3); 143 | } 144 | 145 | s:before, 146 | s:after { 147 | clip-path: inset(100%); 148 | clip: rect(1px, 1px, 1px, 1px); 149 | height: 1px; 150 | overflow: hidden; 151 | position: absolute; 152 | white-space: nowrap; 153 | width: 1px; 154 | } 155 | 156 | s:before { 157 | content: " [start of stricken text] "; 158 | } 159 | 160 | s:after { 161 | content: " [end of stricken text] "; 162 | } 163 | 164 | del { 165 | color: var(--primary-3); 166 | } 167 | 168 | del:before, 169 | del:after { 170 | clip-path: inset(100%); 171 | clip: rect(1px, 1px, 1px, 1px); 172 | height: 1px; 173 | overflow: hidden; 174 | position: absolute; 175 | white-space: nowrap; 176 | width: 1px; 177 | } 178 | 179 | del:before { 180 | content: " [deletion start] "; 181 | } 182 | 183 | del:after { 184 | content: " [deletion end] "; 185 | } 186 | 187 | ins { 188 | text-decoration-style: wavy; 189 | text-decoration-color: var(--accent-3); 190 | } 191 | 192 | ins:before, 193 | ins:after { 194 | clip-path: inset(100%); 195 | clip: rect(1px, 1px, 1px, 1px); 196 | height: 1px; 197 | overflow: hidden; 198 | position: absolute; 199 | white-space: nowrap; 200 | width: 1px; 201 | } 202 | 203 | ins:before { 204 | content: " [insertion start] "; 205 | } 206 | 207 | ins:after { 208 | content: " [insertion end] "; 209 | } 210 | 211 | mark { 212 | color: var(--primary-1); 213 | background: var(--marked-color); 214 | padding: 2px; 215 | } 216 | 217 | small { 218 | color: var(--primary-3); 219 | line-height: 1.6rem; 220 | } 221 | 222 | abbr { 223 | cursor: help; 224 | text-decoration: underline; 225 | text-decoration-color: var(--accent-3) !important; 226 | text-decoration-style: dotted !important; 227 | } 228 | 229 | dfn { 230 | cursor: help; 231 | } 232 | 233 | a, 234 | a:before, 235 | a:after { 236 | background: none; 237 | border: none; 238 | padding: 0; 239 | text-decoration: underline; 240 | text-decoration-thickness: 1px; 241 | text-decoration-color: var(--primary-2); 242 | transition: text-decoration-color 0.1s ease; 243 | color: var(--primary-2); 244 | } 245 | 246 | a:hover, 247 | a:hover:before, 248 | a:hover:after { 249 | background: none; 250 | border: none; 251 | text-decoration-color: var(--accent-2); 252 | } 253 | 254 | sup a { 255 | color: var(--primary-2); 256 | } 257 | 258 | sup a:hover, 259 | sup a:active, 260 | sup a:focus-visible { 261 | color: var(--primary-1); 262 | cursor: pointer; 263 | } 264 | 265 | sup a:before { 266 | background: none; 267 | border: none; 268 | } 269 | 270 | sup a:hover:before { 271 | background: none; 272 | border: none; 273 | } 274 | 275 | sup a:after { 276 | background: none; 277 | border: none; 278 | } 279 | 280 | sup a:hover:after { 281 | background: none; 282 | border: none; 283 | } 284 | 285 | blockquote { 286 | font-family: var(--font-body); 287 | font-size: 1.6rem; 288 | font-weight: 400; 289 | line-height: 1.8em; 290 | margin: 0; 291 | padding: 1.25px 0 1.25px 10px; 292 | color: var(--primary-2); 293 | border-left: 8px solid var(--accent-2); 294 | } 295 | 296 | blockquote p { 297 | margin: 2.5px 0; 298 | } 299 | 300 | blockquote footer { 301 | font-size: 1.4rem; 302 | font-style: none; 303 | line-height: 1.4rem; 304 | margin: 20px 0 20px 0; 305 | text-align: left; 306 | letter-spacing: 0; 307 | text-transform: none; 308 | color: var(--primary-3); 309 | border: none; 310 | } 311 | 312 | aside { 313 | height: 0; 314 | margin: 0; 315 | padding: 0; 316 | left: 110%; 317 | position: relative; 318 | width: 60%; 319 | top: 15px; 320 | } 321 | 322 | @media (--breakpoint-mobile-outer) { 323 | aside { 324 | top: 0; 325 | left: 0; 326 | height: auto; 327 | width: 100%; 328 | padding: 1.25px 0 1.25px 75px; 329 | text-align: right; 330 | } 331 | } 332 | 333 | section { 334 | background-color: var(--background-2); 335 | color: var(--primary-2); 336 | padding: 10px; 337 | margin: 20px 0 20px 0; 338 | border-radius: 5px; 339 | } 340 | 341 | section header { 342 | font-size: 2.6rem; 343 | line-height: 2.8rem; 344 | margin-top: 1rem; 345 | font-weight: 700; 346 | color: var(--accent-2); 347 | } 348 | -------------------------------------------------------------------------------- /src/styles/themes/variables-dark.css: -------------------------------------------------------------------------------- 1 | :root, 2 | :before, 3 | :after { 4 | --primary-1: #f3f3f3; 5 | --primary-2: #e3e3e3; 6 | --primary-3: #bfbfbf; 7 | --accent-1: #59a6b8; 8 | --accent-2: #107fae; 9 | --accent-3: #3b6678; 10 | --background-1: #41405c; 11 | --background-2: #272639; 12 | --background-3: #14131e; 13 | --highlight-color: rgba(15, 154, 210, 0.8); 14 | --marked-color: rgba(68, 50, 100, 0.8); 15 | --selection-color: rgba(15, 154, 210, 0.2); 16 | --date-icon-filter: invert(87%) sepia(35%) saturate(1833%) 17 | hue-rotate(161deg) brightness(77%) contrast(83%); 18 | } 19 | -------------------------------------------------------------------------------- /src/styles/themes/variables-light.css: -------------------------------------------------------------------------------- 1 | :before, 2 | :after, 3 | :root { 4 | --primary-1: #14131e; 5 | --primary-2: #272639; 6 | --primary-3: #41405c; 7 | --accent-1: #63accb; 8 | --accent-2: #7ad3e9; 9 | --accent-3: #ace3f0; 10 | --background-1: #e3e3e3; 11 | --background-2: #f3f3f3; 12 | --background-3: #ffffff; 13 | --highlight-color: rgba(122, 211, 233, 0.8); 14 | --marked-color: rgba(227, 227, 227, 0.6); 15 | --selection-color: rgba(122, 211, 233, 0.2); 16 | --date-icon-filter: invert(73%) sepia(31%) saturate(593%) hue-rotate(158deg) 17 | brightness(82%) contrast(92%); 18 | } 19 | -------------------------------------------------------------------------------- /src/styles/variables.css: -------------------------------------------------------------------------------- 1 | :root, 2 | ::before, 3 | ::after { 4 | --font-display: "Outfit", -apple-system, blinkmacsystemfont, "Segoe UI", 5 | roboto, helvetica, arial, sans-serif, "Apple Color Emoji", 6 | "Segoe UI Emoji", "Segoe UI Symbol"; 7 | --font-body: "Outfit", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, 8 | helvetica, arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", 9 | "Segoe UI Symbol"; 10 | --font-monospace: "DM Mono", monospace; 11 | } 12 | 13 | @custom-media --breakpoint-mobile (max-width: 500px); 14 | @custom-media --breakpoint-mobile-outer (max-width: 1300px); 15 | -------------------------------------------------------------------------------- /stylelint.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["stylelint-config-standard", "stylelint-config-prettier"], 3 | "rules": { 4 | "no-descending-specificity": null 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /website/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/android-chrome-192x192.png -------------------------------------------------------------------------------- /website/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/android-chrome-512x512.png -------------------------------------------------------------------------------- /website/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/apple-touch-icon.png -------------------------------------------------------------------------------- /website/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #603cba 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /website/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/favicon-16x16.png -------------------------------------------------------------------------------- /website/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/favicon-32x32.png -------------------------------------------------------------------------------- /website/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/favicon.ico -------------------------------------------------------------------------------- /website/files.html: -------------------------------------------------------------------------------- 1 | [files] ~ furret.css

Files

This page includes all the files available on the furret.css CDN. Note that all .css files come with minified versions that are available by adding replacing .css with .min.css.

Item Description
Plugins
/furretcss/js/theme-toggle.js Plugin that allows for theme toggling capabilities.
Version 1
/furretcss/v1/dark.css Dark-themed variant of furret.css version 1. Includes all features of furret.css in one file.
/furretcss/v1/library.css Automatically-themed variant of furret.css version 1. Includes all features of furret.css in one file.
/furretcss/v1/light.css Light-themed variant of furret.css version 1. Includes all features of furret.css in one file.
Version 2
/furretcss/v2/full/dark.css Dark-themed variant of furret.css version 2. Includes all features of furret.css in one file.
/furretcss/v2/full/light.css Light-themed variant of furret.css version 2. Includes all features of furret.css in one file.
/furretcss/v2/themes/dark.css Exclusively dark theme variables for furret.css version 2. Must be paired with a cherry-picked file.
/furretcss/v2/themes/light.css Exclusively light theme variables for furret.css version 2. Must be paired with a cherry-picked file.
/furretcss/v2/forms.css Furret.css version 2 styling for all form-related elements. Must be paired with at least one themed file.
/furretcss/v2/images.css Furret.css version 2 styling for all media-related elements. Must be paired with at least one theme file.
/furretcss/v2/tables.css Furret.css version 2 styling for all table-related elements. Must be paired with at least one theme file.
/furretcss/v2/typography.css Furret.css version 2 styling for all typography-related elements. Must be paired with at least one theme file.
-------------------------------------------------------------------------------- /website/furretcss/js/theme-toggle.js: -------------------------------------------------------------------------------- 1 | "use strict";function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function(){};return{s:F,n:function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function(){it=it.call(o)},n:function(){var step=it.next();return normalCompletion=step.done,step},e:function(_e2){didErr=!0,err=_e2},f:function(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i {};\n\nvar storage = (function () {\n\tvar uid = new Date();\n\tvar storage;\n\tvar result;\n\ttry {\n\t\t(storage = window.localStorage).setItem(uid, uid);\n\t\tresult = storage.getItem(uid) == uid;\n\t\tstorage.removeItem(uid);\n\t\treturn result && storage;\n\t} catch (exception) {\n\t\tnoop();\n\t}\n\tstorage = function () {\n\t\tconsole.log('localStorage Disabled.');\n\t\treturn;\n\t};\n\tstorage.getItem = function () {\n\t\tconsole.log('localStorage Disabled.');\n\t\treturn;\n\t};\n\tstorage.setItem = function () {\n\t\tconsole.log('localStorage Disabled.');\n\t\treturn;\n\t};\n\treturn storage;\n})();\n\nconst acceptedHostnames = window.USER_OVERRIDE.acceptedHostnames\n\t? window.USER_OVERRIDE.acceptedHostnames\n\t: [\n\t\t\t'css.furret.dev', // production server\n\t\t\t'furretcss-lib.rayhanadev.repl.co', // development server\n\t ];\n\n/*\n * @internal\n * Source: {@link https://stackoverflow.com/questions/16791527/can-i-use-a-regular-expression-in-queryselectorall}\n */\nconst DOMRegex = function (elem, attr, regex) {\n\tconst output = [];\n\tconst elements = document.querySelectorAll(elem);\n\n\tfor (const link of elements) {\n\t\tconst url = acceptedHostnames.includes(location.hostname)\n\t\t\t? new URL(link[attr], location.origin) // use website hostname (self-hosting)\n\t\t\t: new URL(link[attr]); // use link hostname (cdn)\n\n\t\tif (regex.test(url.pathname)) {\n\t\t\toutput.push(link);\n\t\t}\n\t}\n\n\treturn output;\n};\n\n/*\n * @internal\n */\nconst loadColorScheme = function (scheme) {\n\tif (!['light', 'dark'].includes(scheme)) scheme = 'light';\n\n\tconst links = [];\n\n\tconst furretcssPath = new RegExp(\n\t\t'/furretcss/v2/full/(?:light|dark)(?:.min)?.css',\n\t);\n\n\tlinks.push(...DOMRegex('link', 'href', furretcssPath));\n\n\tconst furretcssHljsPath = new RegExp(\n\t\t'/highlightjs/(?:light|dark)(?:.min)?.css',\n\t);\n\n\tlinks.push(...DOMRegex('link', 'href', furretcssHljsPath));\n\n\tfor (const link of links) {\n\t\tconst url = acceptedHostnames.includes(location.hostname)\n\t\t\t? new URL(link.href, location.origin) // use website hostname (self-hosting)\n\t\t\t: new URL(link.href); // use link hostname (cdn)\n\n\t\tif (!acceptedHostnames.includes(url.hostname)) continue;\n\n\t\tif (link.rel === 'stylesheet') {\n\t\t\tif (link.href.includes('/furretcss/v2/full')) {\n\t\t\t\tconst min = link.href.includes('.min') ? '.min' : '';\n\t\t\t\tlink.href = `${url.protocol}//${url.hostname}/furretcss/v2/full/${scheme}${min}.css`;\n\t\t\t}\n\n\t\t\tif (link.href.includes('/highlightjs')) {\n\t\t\t\tlink.href = `${url.protocol}//${url.hostname}/highlightjs/${scheme}.css`;\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\n * Side effect of loading the file. Sets up first interaction states\n * and sets localStorage keys. Does not activate theme, use\n * furrets.addThemeToggle() to do that.\n */\nif (storage.getItem('furretcss-interacted') !== 'true') {\n\tif (\n\t\twindow.matchMedia &&\n\t\twindow.matchMedia('(prefers-color-scheme: dark)').matches\n\t) {\n\t\tstorage.setItem('furretcss-theme', 'dark');\n\t\tstorage.setItem('furretcss-interacted', 'true');\n\t} else {\n\t\tstorage.setItem('furretcss-theme', 'none');\n\t}\n}\n\n/*\n * Function to manually toggle the theme.\n */\nwindow.furrets.themeToggle = function (toggleBtn) {\n\tconst themeToSet =\n\t\tstorage.getItem('furretcss-theme') === 'dark' ? 'light' : 'dark';\n\n\tloadColorScheme(themeToSet);\n\tstorage.setItem('furretcss-theme', themeToSet);\n\tif (toggleBtn) toggleBtn.innerText = themeToSet === 'light' ? '☀️' : '🌙';\n\n\treturn themeToSet;\n};\n\n/*\n * Function to initialize the theme and add a toggle to\n * the website.\n */\nwindow.furrets.addThemeToggle = function () {\n\tconst storedTheme = storage.getItem('furretcss-theme');\n\tconst themeToggle = document.createElement('button');\n\tthemeToggle.innerText = storedTheme === 'light' ? '☀️' : '🌙';\n\tthemeToggle.className = 'theme-toggle-btn';\n\tthemeToggle.addEventListener('click', () =>\n\t\twindow.furrets.themeToggle(themeToggle),\n\t);\n\n\tconst container = document.querySelector('body');\n\tcontainer.insertAdjacentElement('afterbegin', themeToggle);\n\n\tconst furretcssPath = new RegExp(\n\t\t'/furretcss/v2/full/(?:light|dark)(?:.min)?.css',\n\t);\n\tconst links = DOMRegex('link', 'href', furretcssPath);\n\n\tif (links.length === 0) {\n\t\tconsole.warn(\n\t\t\t'Warning: a full furretcss stylesheet was not found. Cannot choose stylesheet to preload.',\n\t\t);\n\t\treturn;\n\t}\n\n\tconst loadedTheme =\n\t\tlinks[0].href.split('/').pop().split('.')[0] === 'light'\n\t\t\t? 'light'\n\t\t\t: 'dark';\n\tconst themeToPreload = loadedTheme === 'light' ? 'dark' : 'light';\n\n\tconst preload = document.createElement('link');\n\tpreload.rel = 'preconnect';\n\tpreload.href = links[0].href.replace(loadedTheme, themeToPreload);\n\tpreload.as = 'text/css';\n\n\tlinks[0].after(preload);\n\n\tloadColorScheme(storedTheme);\n};\n"]} -------------------------------------------------------------------------------- /website/furretcss/v1/dark.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/furretcss/v1/dark.css -------------------------------------------------------------------------------- /website/furretcss/v1/dark.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/furretcss/v1/dark.min.css -------------------------------------------------------------------------------- /website/furretcss/v1/library.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/furretcss/v1/library.css -------------------------------------------------------------------------------- /website/furretcss/v1/library.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/furretcss/v1/library.min.css -------------------------------------------------------------------------------- /website/furretcss/v1/light.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/furretcss/v1/light.css -------------------------------------------------------------------------------- /website/furretcss/v1/light.min.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/furretcss/v1/light.min.css -------------------------------------------------------------------------------- /website/furretcss/v2/forms.min.css: -------------------------------------------------------------------------------- 1 | form{align-content:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start;margin:25px auto 50px;min-height:50px;padding:10px 0;width:100%}form header{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 42.5%;background-repeat:no-repeat;background-size:100% 25%;color:var(--primary-2);display:table;font-family:var(--font-display);font-size:3rem;font-weight:700;line-height:3em;margin-bottom:-40px;padding:0 5px;z-index:20}@media (--breakpoint-mobile ){form header{margin-bottom:-25px}}form p{margin-left:10px}form fieldset{align-content:center;border:none;display:flex;flex-basis:100%;flex-wrap:wrap;justify-content:flex-start;margin-bottom:20px}form fieldset legend{color:var(--primary-2);display:table;line-height:2.4rem}form fieldset legend,form label{font-family:var(--font-display);font-size:2rem;font-weight:700;margin-left:10px;padding:0 5px;z-index:20}form label{color:var(--primary-1);display:inline-block;line-height:2.2em}form label+input,form label+textarea{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);display:block;font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:2.5em;margin-bottom:20px;margin-top:-25px;outline:none;padding:.5rem 1rem;width:100%;z-index:10}form label+textarea{flex-basis:100%}form input:active,form input:focus-visible,form input:hover,form textarea:active,form textarea:focus-visible,form textarea:hover{background:var(--background-1)}form input:-webkit-autofill{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-2) inset!important}form input:-webkit-autofill:active,form input:-webkit-autofill:focus-visible,form input:-webkit-autofill:hover{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-1) inset!important}form label[disabled]{color:var(--primary-3)}form input:disabled,form label[disabled]{background-color:var(--background-3);cursor:not-allowed}form input:disabled{border:2px solid var(--background-2)}form input[type=button]{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;min-width:125px;outline:none;padding:.5rem 1rem;z-index:10}form input[type=button]:active,form input[type=button]:focus-visible,form input[type=button]:hover{background-color:var(--background-1)}form input[type=button]:disabled:hover{background-color:var(--background-2)}form input[type=button]:disabled{cursor:not-allowed;opacity:.5}form input[type=submit]{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;flex-grow:1;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;outline:none;padding:.5rem 1rem;z-index:10}form input[type=submit]:active,form input[type=submit]:focus-visible,form input[type=submit]:hover{background-color:var(--background-1)}form input[type=submit]:disabled:hover{background-color:var(--background-2)}form input[type=submit]:disabled{cursor:not-allowed;opacity:.5}form input[type=reset]{background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;flex-grow:1;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;outline:none;padding:.5rem 1rem;z-index:10}form input[type=reset]:active,form input[type=reset]:focus-visible,form input[type=reset]:hover{background-color:var(--background-1)}form input[type=reset]:disabled:hover{background-color:var(--background-2)}form input[type=reset]:disabled{cursor:not-allowed;opacity:.5}form input[type=checkbox],form input[type=radio]{appearance:none;background:var(--background-3);border:2px solid var(--primary-2);color:var(--background-3);cursor:pointer;display:grid;font:inherit;height:20px;margin:0;place-content:center;transform:translateY(6.5px);width:20px}form input[type=checkbox]{border-radius:25%}form input[type=radio]{border-radius:50%}form input[type=checkbox]:before,form input[type=radio]:before{box-shadow:inset 10px 10px var(--accent-2);content:"";cursor:pointer;height:12px;transform:scale(0);transition:transform .12s ease-in-out;width:12px}form input[type=checkbox]:before{border-radius:25%;clip-path:polygon(14% 44%,0 65%,50% 100%,100% 16%,80% 0,43% 62%);transform-origin:bottom left}form input[type=radio]:before{border-radius:50%}form input[type=checkbox]:checked:before,form input[type=radio]:checked:before{transform:scale(1)}form input[type=checkbox]:disabled,form input[type=radio]:disabled{background-color:var(--background-3);border-color:var(--background-1)}form input[type=checkbox]+label,form input[type=radio]+label{color:var(--primary-1);cursor:pointer;display:inline-block;font-family:var(--font-display);font-size:1.6rem;font-weight:400;line-height:1.6em;margin:0;padding:0 5px;z-index:20}form input[type=checkbox]:disabled+label,form input[type=radio]:disabled+label{color:var(--primary-3);cursor:not-allowed}@media (--breakpoint-mobile ){form{width:100%}form label+input,form label+textarea{margin-top:-16px}form input[type=checkbox],form input[type=radio]{height:15px;transform:translateY(3px);width:15px}form input[type=checkbox]:before,form input[type=radio]:before{height:10px;width:10px}}form input[type=date],form input[type=datetime-local],form input[type=month],form input[type=time],form input[type=week]{cursor:text}form input::-webkit-calendar-picker-indicator{border-radius:4px;cursor:pointer;filter:var(--date-icon-filter);margin-right:2px;opacity:.8}form input::-webkit-calendar-picker-indicator:hover{opacity:1}form input[type=number]::-webkit-inner-spin-button,form input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}form input[type=number]{-moz-appearance:textfield}form input[type=range]{-webkit-appearance:none;background:transparent;height:36px;margin:auto;padding:0;width:75%}form input[type=range]:focus{outline:none}input[type=range]::-webkit-slider-runnable-track{background:var(--background-2);border-radius:100px;cursor:pointer;height:24px;width:80%}form input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--background-1);border-radius:50%;cursor:pointer;height:36px;margin-top:-6px;width:36px}form input[type=range]:hover::-webkit-slider-thumb{background:var(--accent-1);margin-top:-6px}form input[type=range]:active::-webkit-slider-thumb,form input[type=range]:focus-visible::-webkit-slider-thumb{background:var(--accent-2);margin-top:-6px}form input[type=range]::-moz-range-track{background:var(--background-2);border-radius:100px;cursor:pointer;height:24px;width:80%}form input[type=range]::-moz-range-thumb{-webkit-appearance:none;background:var(--background-1);border:none;border-radius:50%;cursor:pointer;height:36px;width:36px}form input[type=range]:hover::-moz-range-thumb{background:var(--primary-3)}form input[type=range]:active::-moz-range-thumb,form input[type=range]:focus-visible::-moz-range-thumb{background:var(--primary-1)}form input[type=range]::-ms-track{background:var(--background-2);border-radius:100px;cursor:pointer;height:24px;width:80%}form input[type=range]::-ms-fill-lower,form input[type=range]::-ms-fill-upper{background:var(--background-2)}form input[type=range]::-ms-thumb{-webkit-appearance:none;background:var(--primary-2);border:none;border-radius:50%;cursor:pointer;height:36px;width:36px}form input[type=range]:hover::-ms-thumb{background:var(--primary-3)}form input[type=range]:active::-ms-thumb,form input[type=range]:focus-visible::-ms-thumb{background:var(--primary-1)}@media (--breakpoint-mobile ){form input[type=range]{height:30px;width:60%}form input[type=range]::-webkit-slider-runnable-track{height:18px}form input[type=range]::-webkit-slider-thumb{height:24px;margin-top:-3px;width:24px}form input[type=range]:hover::-webkit-slider-thumb{margin-top:-3px}form input[type=range]:active::-webkit-slider-thumb,form input[type=range]:focus-visible::-webkit-slider-thumb{margin-top:-3px}form input[type=range]::-moz-range-track{height:18px}form input[type=range]::-ms-track{height:18px}}form input[type=file]{cursor:pointer}form input[type=file]::-webkit-file-upload-button{display:none;padding:0;width:0}form input[type=file]::file-selector-button{display:none;padding:0;width:0}form input[type=file]::-ms-browse{display:none;padding:0;width:0}button{background:var(--accent-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:block;font-family:var(--font-display);font-size:1.6rem;font-weight:700;line-height:2.5em;margin:5px 5px 19px;min-width:125px;outline:none;padding:.5rem 1rem;z-index:10}button:active,button:focus-visible,button:hover{background-color:var(--accent-1)}button:disabled:hover{background-color:var(--accent-2)}button:disabled{cursor:not-allowed;opacity:.5}form label+select{appearance:none;background:var(--background-2);border:none;border-radius:.5rem;color:var(--primary-2);cursor:pointer;display:grid;font-family:var(--font-body);font-size:1.6rem;font-weight:400;grid-template-areas:"select";line-height:2.5em;margin-bottom:20px;margin-top:-25px;outline:none;padding:.5rem 1rem;width:100%;z-index:10}form select::-ms-expand{display:none}form select:active,form select:focus-visible,form select:hover{background:var(--background-1)}form select::-webkit-autofill{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-2) inset!important}form select:active::-webkit-autofill,form select:focus-visible::-webkit-autofill,form select:hover::-webkit-autofill{-webkit-text-fill-color:var(--primary-2)!important;-webkit-box-shadow:0 0 0 35px var(--background-1) inset!important}form select:disabled{background-color:var(--background-3);border:2px solid var(--background-2);cursor:not-allowed}@media (--breakpoint-mobile ){form label+select{margin-top:-16px}} -------------------------------------------------------------------------------- /website/furretcss/v2/images.css: -------------------------------------------------------------------------------- 1 | img, 2 | video, 3 | object, 4 | canvas { 5 | height: auto; 6 | max-width: 100%; 7 | } 8 | 9 | figure { 10 | width: 100%; 11 | display: flex; 12 | align-content: center; 13 | justify-content: center; 14 | flex-wrap: wrap; 15 | margin: 20px 0 20px 0; 16 | flex-direction: column; 17 | } 18 | 19 | figure img { 20 | height: auto; 21 | max-width: 80%; 22 | margin: auto; 23 | } 24 | 25 | figure figcaption p { 26 | flex-basis: 100%; 27 | color: var(--primary-3); 28 | font-size: 1.6rem; 29 | line-height: 2.2rem; 30 | text-align: center; 31 | margin-top: 10px; 32 | } 33 | -------------------------------------------------------------------------------- /website/furretcss/v2/images.min.css: -------------------------------------------------------------------------------- 1 | canvas,img,object,video{height:auto;max-width:100%}figure{align-content:center;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;margin:20px 0;width:100%}figure img{height:auto;margin:auto;max-width:80%}figure figcaption p{color:var(--primary-3);flex-basis:100%;font-size:1.6rem;line-height:2.2rem;margin-top:10px;text-align:center} -------------------------------------------------------------------------------- /website/furretcss/v2/tables.css: -------------------------------------------------------------------------------- 1 | table { 2 | width: 100%; 3 | max-width: 100%; 4 | border: 1px solid var(--background-2); 5 | border-collapse: collapse; 6 | border-spacing: 0; 7 | display: block; 8 | overflow-x: auto; 9 | margin: 20px 0 20px 0; 10 | } 11 | 12 | table thead { 13 | display: table-header-group; 14 | width: 100%; 15 | } 16 | 17 | table thead tr { 18 | border: 1px solid var(--accent-2); 19 | width: auto; 20 | min-width: 100%; 21 | } 22 | 23 | table thead tr th { 24 | border: 1px solid var(--accent-2); 25 | background-color: var(--accent-2); 26 | color: var(--primary-2); 27 | font-size: 1.6rem; 28 | line-height: 2.2rem; 29 | height: 2.8rem; 30 | padding: 10px; 31 | overflow-x: auto; 32 | min-width: 220px; 33 | } 34 | 35 | table tbody { 36 | display: table-row-group; 37 | width: 100%; 38 | } 39 | 40 | table tbody tr { 41 | border: 1px solid var(--background-2); 42 | width: auto; 43 | min-width: 100%; 44 | } 45 | 46 | table tbody tr td { 47 | border: 1px solid var(--background-2); 48 | color: var(--primary-2); 49 | font-size: 1.6rem; 50 | line-height: 2.2rem; 51 | height: 2.8rem; 52 | padding: 10px; 53 | overflow-x: auto; 54 | min-width: 220px; 55 | } 56 | 57 | table tbody tr th { 58 | border: 1px solid var(--background-2); 59 | color: var(--primary-2); 60 | font-size: 1.6rem; 61 | font-weight: 700; 62 | line-height: 2.2rem; 63 | height: 2.8rem; 64 | padding: 10px; 65 | overflow-x: auto; 66 | min-width: 220px; 67 | } 68 | 69 | table tfoot { 70 | display: table-footer-group; 71 | width: 100%; 72 | } 73 | 74 | table tfoot tr { 75 | border: 1px solid var(--background-2); 76 | width: auto; 77 | min-width: 100%; 78 | } 79 | 80 | table tfoot tr td { 81 | border: 1px solid var(--background-2); 82 | color: var(--primary-3); 83 | font-size: 1.6rem; 84 | line-height: 2.2rem; 85 | height: 2.8rem; 86 | padding: 10px; 87 | overflow-x: auto; 88 | min-width: 220px; 89 | } 90 | 91 | table tfoot tr th { 92 | border: 1px solid var(--background-2); 93 | color: var(--primary-3); 94 | font-size: 1.6rem; 95 | font-weight: 700; 96 | line-height: 2.2rem; 97 | height: 2.8rem; 98 | padding: 10px; 99 | overflow-x: auto; 100 | min-width: 220px; 101 | } 102 | 103 | table caption { 104 | caption-side: bottom; 105 | color: var(--primary-2); 106 | font-size: 1.6rem; 107 | line-height: 2.2rem; 108 | height: 2.8rem; 109 | text-align: center; 110 | } 111 | -------------------------------------------------------------------------------- /website/furretcss/v2/tables.min.css: -------------------------------------------------------------------------------- 1 | table{border:1px solid var(--background-2);border-collapse:collapse;border-spacing:0;display:block;margin:20px 0;max-width:100%;overflow-x:auto;width:100%}table thead{display:table-header-group;width:100%}table thead tr{border:1px solid var(--accent-2);min-width:100%;width:auto}table thead tr th{background-color:var(--accent-2);border:1px solid var(--accent-2);color:var(--primary-2);font-size:1.6rem;height:2.8rem;line-height:2.2rem;min-width:220px;overflow-x:auto;padding:10px}table tbody{display:table-row-group;width:100%}table tbody tr{border:1px solid var(--background-2);min-width:100%;width:auto}table tbody tr td,table tbody tr th{border:1px solid var(--background-2);color:var(--primary-2);font-size:1.6rem;height:2.8rem;line-height:2.2rem;min-width:220px;overflow-x:auto;padding:10px}table tbody tr th{font-weight:700}table tfoot{display:table-footer-group;width:100%}table tfoot tr{border:1px solid var(--background-2);min-width:100%;width:auto}table tfoot tr td,table tfoot tr th{border:1px solid var(--background-2);color:var(--primary-3);font-size:1.6rem;height:2.8rem;line-height:2.2rem;min-width:220px;overflow-x:auto;padding:10px}table tfoot tr th{font-weight:700}table caption{caption-side:bottom;color:var(--primary-2);font-size:1.6rem;height:2.8rem;line-height:2.2rem;text-align:center} -------------------------------------------------------------------------------- /website/furretcss/v2/themes/dark.css: -------------------------------------------------------------------------------- 1 | :root, 2 | :before, 3 | :after { 4 | --primary-1: #f3f3f3; 5 | --primary-2: #e3e3e3; 6 | --primary-3: #bfbfbf; 7 | --accent-1: #59a6b8; 8 | --accent-2: #107fae; 9 | --accent-3: #3b6678; 10 | --background-1: #41405c; 11 | --background-2: #272639; 12 | --background-3: #14131e; 13 | --highlight-color: rgba(15, 154, 210, 0.8); 14 | --marked-color: rgba(68, 50, 100, 0.8); 15 | --selection-color: rgba(15, 154, 210, 0.2); 16 | --date-icon-filter: invert(87%) sepia(35%) saturate(1833%) 17 | hue-rotate(161deg) brightness(77%) contrast(83%); 18 | } 19 | -------------------------------------------------------------------------------- /website/furretcss/v2/themes/dark.min.css: -------------------------------------------------------------------------------- 1 | :after,:before,:root{--primary-1:#f3f3f3;--primary-2:#e3e3e3;--primary-3:#bfbfbf;--accent-1:#59a6b8;--accent-2:#107fae;--accent-3:#3b6678;--background-1:#41405c;--background-2:#272639;--background-3:#14131e;--highlight-color:rgba(15,154,210,.8);--marked-color:rgba(68,50,100,.8);--selection-color:rgba(15,154,210,.2);--date-icon-filter:invert(87%) sepia(35%) saturate(1833%) hue-rotate(161deg) brightness(77%) contrast(83%)} -------------------------------------------------------------------------------- /website/furretcss/v2/themes/light.css: -------------------------------------------------------------------------------- 1 | :before, 2 | :after, 3 | :root { 4 | --primary-1: #14131e; 5 | --primary-2: #272639; 6 | --primary-3: #41405c; 7 | --accent-1: #63accb; 8 | --accent-2: #7ad3e9; 9 | --accent-3: #ace3f0; 10 | --background-1: #e3e3e3; 11 | --background-2: #f3f3f3; 12 | --background-3: #ffffff; 13 | --highlight-color: rgba(122, 211, 233, 0.8); 14 | --marked-color: rgba(227, 227, 227, 0.6); 15 | --selection-color: rgba(122, 211, 233, 0.2); 16 | --date-icon-filter: invert(73%) sepia(31%) saturate(593%) hue-rotate(158deg) 17 | brightness(82%) contrast(92%); 18 | } 19 | -------------------------------------------------------------------------------- /website/furretcss/v2/themes/light.min.css: -------------------------------------------------------------------------------- 1 | :after,:before,:root{--primary-1:#14131e;--primary-2:#272639;--primary-3:#41405c;--accent-1:#63accb;--accent-2:#7ad3e9;--accent-3:#ace3f0;--background-1:#e3e3e3;--background-2:#f3f3f3;--background-3:#fff;--highlight-color:rgba(122,211,233,.8);--marked-color:hsla(0,0%,89%,.6);--selection-color:rgba(122,211,233,.2);--date-icon-filter:invert(73%) sepia(31%) saturate(593%) hue-rotate(158deg) brightness(82%) contrast(92%)} -------------------------------------------------------------------------------- /website/furretcss/v2/typography.min.css: -------------------------------------------------------------------------------- 1 | code,samp{background:var(--background-2);border-radius:.5rem;color:var(--primary-2);font-family:var(--font-monospace);font-size:1.6rem;line-height:2.2rem;overflow-x:auto;padding:.25rem}samp:before{color:var(--primary-3);content:"~$ "}kbd{background:var(--background-1);color:var(--color-strong);cursor:help;line-height:1.6rem;padding:.25rem;text-transform:uppercase}kbd,pre{border-radius:.5rem;font-family:var(--font-monospace);font-size:1.6rem}pre{background:var(--background-2);line-height:2.2rem;overflow-x:auto;padding:.5rem}pre,var{color:var(--primary-2)}var{font-family:var(--font-monospace);font-style:italic}footer{border-top:2px solid var(--accent-2);color:var(--primary-2);font-size:1.2rem;letter-spacing:1.2px;line-height:normal;margin-top:50px;padding-top:8px;text-align:center;text-transform:uppercase}footer a{transform-origin:0 -10px}footer a:before{transform-origin:0 11px}footer a:after{border:5.5px solid transparent;bottom:0}@media (prefers-reduced-motion:no-preference){footer a:hover:before{background:var(--accent-2);transform:scaleY(.25);transition:.1s ease-out}footer a:after{right:-7.75px;transform:none;transition:transform 50ms ease-out .1s}}@media (--breakpoint-mobile ){footer a:before{transform-origin:0 9px}footer a:after{border:4px solid transparent;bottom:-1px}footer a:hover:after{right:-6px}}ul{margin:5px 0 15px;padding:0}ul>li{color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:1.8em;list-style:none;padding:0 0 0 20px;position:relative}ul>li:before{border-width:1px;border-bottom:0 solid var(--accent-2);border-left:0 solid var(--accent-2);border-right:2px solid var(--accent-2);border-top:2px solid var(--accent-2);content:"";height:5px;left:0;position:absolute;top:14px;transform:rotate(45deg);width:5px}@media (--breakpoint-mobile ){ul>li:before{top:8px}}ul input~li:before{list-style-type:none}ul input[type=checkbox]{appearance:none;background:var(--background-3);border:2px solid var(--primary-2);border-radius:25%;color:var(--background-3);cursor:pointer;display:inline-grid;font:inherit;height:20px;margin:0 10px 0 0;place-content:center;width:20px}ul input[type=checkbox]:before{border-radius:25%;box-shadow:inset 10px 10px var(--accent-2);clip-path:polygon(14% 44%,0 65%,50% 100%,100% 16%,80% 0,43% 62%);content:"";cursor:pointer;height:12px;transform:scale(0);transform-origin:bottom left;transition:transform .12s ease-in-out;width:12px}ul input[type=checkbox]:checked:before{transform:scale(1)}ul input[type=checkbox]:disabled{background-color:var(--background-3);border-color:var(--background-1)}ul input[type=checkbox]:disabled+label{color:var(--primary-3);cursor:not-allowed}@media (--breakpoint-mobile ){ul input[type=checkbox]{height:15px;transform:translateY(3px);width:15px}ul input[type=checkbox]:before{height:10px;width:10px}}ol{counter-reset:item;margin:5px 0 15px;padding:0}ol>li{color:var(--primary-2);counter-increment:item;font-weight:400;line-height:1.8em;list-style:none;padding:0 0 0 20px;position:relative}ol>li,ol>li:before{font-family:var(--font-body);font-size:1.6rem}ol>li:before{color:var(--accent-2);content:counter(item) ")";height:5px;left:-4px;position:absolute;top:0;width:5px}dl{margin:5px 0 15px;padding:0}dl>dd,dl>dt{color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:1.8em;position:relative}dl>dd{margin-top:-20px;margin-inline-start:30px}@media (--breakpoint-mobile ){ol>li:before{left:0}dl>dd{margin-top:-15px;margin-inline-start:20px}}address{display:flex;flex-direction:column;font-style:normal;margin:-5px 0;width:100%}address a{font-size:1.6rem;line-height:2rem;margin:5px 0}address a:active:before,address a:before,address a:focus-visible:before,address a:hover:before{background:none;border:none;transform:none}address a:active:before,address a:focus-visible:before,address a:hover:before{animation:shake .82s cubic-bezier(.36,.07,.19,.97) both}address a:after{border:none}address a[href^="mailto\:"]:before{content:"📧 "}address a[href^="mailto\:"]:before,address a[href^="tel\:"]:before{display:inline-block;margin-right:5px;position:relative;text-decoration:none;transform-origin:center;width:25px}address a[href^="tel\:"]:before{content:"📞 "}address a[href^="sms\:"]:before{content:"💬 ";display:inline-block;margin-right:5px;position:relative;text-decoration:none;transform-origin:center;width:25px}@keyframes shake{0%{transform:translateX(0)}25%{transform:translateY(-9px)}35%{transform:translateY(-9px) rotate(17deg)}55%{transform:translateY(-9px) rotate(-17deg)}65%{transform:translateY(-9px) rotate(17deg)}75%{transform:translateY(-9px) rotate(-17deg)}to{transform:translateY(0) rotate(0)}}*,:after,:before{box-sizing:inherit}html{background-color:var(--background-3);box-sizing:border-box;overflow-x:hidden;transition:all .44s ease}body,html{-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;font-family:var(--font-display);font-size:70%;line-height:70%;margin:0;padding:0}body{height:fit-content;margin:40px auto 0;max-width:700px;padding:20px}p:target{background-color:var(--background-1);padding-left:5px}::selection{background-color:var(--selection-color)}::-webkit-scrollbar{height:5px;width:7.5px}::-webkit-scrollbar-track{background:var(--background-1);border-radius:.5rem}::-webkit-scrollbar-thumb{background:var(--primary-3);border-radius:.5rem}::-webkit-scrollbar-thumb:hover{background:var(--primary-2);border-radius:.5rem}@media (--breakpoint-mobile ){body,html{font-size:50%}}flex-break{flex-basis:100%;width:0}hr{border:2px solid var(--background-2)}.theme-toggle-btn{background:none;border:none;border-radius:50%;bottom:20px;font-size:2.4rem;height:75px;margin:0 0 0 -275px;min-width:75px;padding:0;position:fixed;right:20px;width:75px}.theme-toggle-btn:hover{width:75px}@media (--breakpoint-mobile-outer ){.theme-toggle-btn{float:right;font-size:2.4rem;font-size:1.6rem;margin:0 0 10px;position:relative;top:auto}.theme-toggle-btn,.theme-toggle-btn:hover{height:48px;min-width:48px;width:48px}}nav{margin-left:-275px;margin-top:-10px;max-height:400px;overflow-x:hidden;overflow-y:auto;padding-right:10px;position:fixed;top:200px;width:250px}nav button{margin:-20px;z-index:20}nav button,nav header{padding:20px 20px 5px;position:fixed}nav header{color:var(--accent-2);content:"Navigation:";flex-basis:100%;font:var(--font-display);font-size:3.6rem;font-weight:700;line-height:4rem;margin:0;text-align:right;z-index:10}nav a{background:none;border:none;color:var(--primary-3);margin:2px 10px;padding:0;text-decoration:underline;text-decoration-color:var(--primary-3);text-decoration-thickness:1px;transition:color .1s ease;transition:text-decoration-color .1s ease}nav a:active:before,nav a:focus-visible:before,nav a:hover:before{background:none;border:none;text-decoration-color:var(--accent-2)}nav a:active:after,nav a:focus-visible:after,nav a:hover:after{bottom:5px}nav ul{align-content:flex-end;display:flex;flex-direction:column;flex-wrap:wrap;justify-content:flex-end;margin-top:65px;width:auto}nav ul>li{list-style:none;padding:0;text-align:right}nav ul>li:before{content:none}@media (--breakpoint-mobile-outer ){nav{margin:0;position:relative;top:auto;width:100%}nav ul{align-content:flex-start;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;margin-top:10px;max-height:80px;width:auto}nav header{margin:0;padding:0;position:relative;width:min-content}nav ul>li{text-align:left}}nav::-webkit-scrollbar{width:3px}h1{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 30%;background-repeat:no-repeat;background-size:100% 65%;color:var(--primary-1);display:table;font-size:6rem;letter-spacing:-1px;line-height:6rem;margin:5rem 0 1.5rem;padding:10px 20px 0 13.25px}h2{font-size:5rem;line-height:5rem;padding:8.75px 17.5px 0 13.25px}h2,h3{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 30%;background-repeat:no-repeat;background-size:100% 65%;color:var(--primary-1);display:table;letter-spacing:-1px;margin:3.5rem 0 1.5rem}h3{font-size:4rem;line-height:4rem;padding:7.5px 15px 0 13.25px}h4{background:linear-gradient(120deg,var(--highlight-color) 0,var(--highlight-color) 100%);background-position:0 30%;background-repeat:no-repeat;background-size:100% 65%;font-size:3rem;line-height:3rem}h4,h5{color:var(--primary-1);display:table;letter-spacing:-1px;margin:3.5rem 0 1.5rem;padding:9px 13.25px 0}h5{font-size:2.5rem;line-height:2.5rem}h6{color:var(--primary-1);display:table;font-size:2rem;letter-spacing:-1px;line-height:2rem;margin:3.5rem 0 1.5rem;padding:9px 13.25px 0}p{color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:2.88rem}strong{color:var(--accent-2)}b,strong{font-weight:700}em{color:var(--accent-1)}em,i{font-style:italic;font-weight:300}u{text-decoration-color:var(--accent-3)}s{color:var(--primary-3)}s:after,s:before{clip:rect(1px,1px,1px,1px);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}s:before{content:" [start of stricken text] "}s:after{content:" [end of stricken text] "}del{color:var(--primary-3)}del:after,del:before{clip:rect(1px,1px,1px,1px);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}del:before{content:" [deletion start] "}del:after{content:" [deletion end] "}ins{text-decoration-color:var(--accent-3);text-decoration-style:wavy}ins:after,ins:before{clip:rect(1px,1px,1px,1px);clip-path:inset(100%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}ins:before{content:" [insertion start] "}ins:after{content:" [insertion end] "}mark{background:var(--marked-color);color:var(--primary-1);padding:2px}small{color:var(--primary-3);line-height:1.6rem}abbr{text-decoration:underline;text-decoration-color:var(--accent-3)!important;text-decoration-style:dotted!important}abbr,dfn{cursor:help}a,a:after,a:before{background:none;border:none;color:var(--primary-2);padding:0;text-decoration:underline;text-decoration-color:var(--primary-2);text-decoration-thickness:1px;transition:text-decoration-color .1s ease}a:hover,a:hover:after,a:hover:before{background:none;border:none;text-decoration-color:var(--accent-2)}sup a{color:var(--primary-2)}sup a:active,sup a:focus-visible,sup a:hover{color:var(--primary-1);cursor:pointer}sup a:after,sup a:before,sup a:hover:after,sup a:hover:before{background:none;border:none}blockquote{border-left:8px solid var(--accent-2);color:var(--primary-2);font-family:var(--font-body);font-size:1.6rem;font-weight:400;line-height:1.8em;margin:0;padding:1.25px 0 1.25px 10px}blockquote p{margin:2.5px 0}blockquote footer{border:none;color:var(--primary-3);font-size:1.4rem;font-style:none;letter-spacing:0;line-height:1.4rem;margin:20px 0;text-align:left;text-transform:none}aside{height:0;left:110%;margin:0;padding:0;position:relative;top:15px;width:60%}@media (--breakpoint-mobile-outer ){aside{height:auto;left:0;padding:1.25px 0 1.25px 75px;text-align:right;top:0;width:100%}}section{background-color:var(--background-2);border-radius:5px;color:var(--primary-2);margin:20px 0;padding:10px}section header{color:var(--accent-2);font-size:2.6rem;font-weight:700;line-height:2.8rem;margin-top:1rem} -------------------------------------------------------------------------------- /website/highlightjs/dark.css: -------------------------------------------------------------------------------- 1 | .hljs-attr,.hljs-attribute,.hljs-comment,.hljs-property,.hljs-quote,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-symbol,.hljs-tag{color:#585a81}.hljs-string{color:#6395a3}.hljs-built_in,.hljs-builtin-name,.hljs-meta,.hljs-number,.hljs-template-variable,.hljs-variable{color:#4f7c8a}.hljs-keyword{color:#3c6372}.hljs-literal{color:#2c4c59}.class_,.function_,.hljs-bullet .hljs-title,.hljs-link,.hljs-name,.hljs-params,.hljs-section,.hljs-type{color:#d9d9d9}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs{color:#4f7c8a;display:block;overflow-x:auto;padding:.5em} -------------------------------------------------------------------------------- /website/highlightjs/furret.css: -------------------------------------------------------------------------------- 1 | .hljs-attr, 2 | .hljs-attribute, 3 | .hljs-comment, 4 | .hljs-property, 5 | .hljs-quote, 6 | .hljs-regexp, 7 | .hljs-selector-attr, 8 | .hljs-selector-class, 9 | .hljs-selector-id, 10 | .hljs-selector-pseudo, 11 | .hljs-selector-tag, 12 | .hljs-symbol, 13 | .hljs-tag { 14 | color: #585a81; 15 | }.hljs-string { 16 | color: #6395a3; 17 | }.hljs-built_in, 18 | .hljs-builtin-name, 19 | .hljs-meta, 20 | .hljs-number, 21 | .hljs-template-variable, 22 | .hljs-variable { 23 | color: #4f7c8a; 24 | }.hljs-keyword { 25 | color: #3c6372; 26 | }.hljs-literal { 27 | color: #2c4c59; 28 | }.class_, 29 | .function_, 30 | .hljs-bullet 31 | .hljs-title, 32 | .hljs-link, 33 | .hljs-name, 34 | .hljs-params, 35 | .hljs-section, 36 | .hljs-type { 37 | color: #d9d9d9; 38 | }.hljs-emphasis { 39 | font-style: italic; 40 | }.hljs-strong { 41 | font-weight: 700; 42 | }.hljs { 43 | color: #4f7c8a; 44 | display: block; 45 | overflow-x: auto; 46 | padding: 0.5em; 47 | }@media (prefers-color-scheme:light) { 48 | .class_, 49 | .function_, 50 | .hljs-bullet 51 | .hljs-title, 52 | .hljs-link, 53 | .hljs-name, 54 | .hljs-params, 55 | .hljs-section, 56 | .hljs-type { 57 | color: #585a81; 58 | }.hljs-attr, 59 | .hljs-attribute, 60 | .hljs-comment, 61 | .hljs-property, 62 | .hljs-quote, 63 | .hljs-regexp, 64 | .hljs-selector-attr, 65 | .hljs-selector-class, 66 | .hljs-selector-id, 67 | .hljs-selector-pseudo, 68 | .hljs-selector-tag, 69 | .hljs-symbol, 70 | .hljs-tag { 71 | color: #bfbfbf; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /website/highlightjs/light.css: -------------------------------------------------------------------------------- 1 | .hljs-attr,.hljs-attribute,.hljs-comment,.hljs-property,.hljs-quote,.hljs-regexp,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag,.hljs-symbol,.hljs-tag{color:#bfbfbf}.hljs-string{color:#6395a3}.hljs-built_in,.hljs-builtin-name,.hljs-meta,.hljs-number,.hljs-template-variable,.hljs-variable{color:#4f7c8a}.hljs-keyword{color:#3c6372}.hljs-literal{color:#2c4c59}.class_,.function_,.hljs-bullet .hljs-title,.hljs-link,.hljs-name,.hljs-params,.hljs-section,.hljs-type{color:#585a81}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs{color:#4f7c8a;display:block;overflow-x:auto;padding:.5em} -------------------------------------------------------------------------------- /website/index.html: -------------------------------------------------------------------------------- 1 | furret.css

furret.css

We recently switched domains! You'll find that https://css.furret.codes will redirect here and all of our examples now use our new domain https://css.furret.dev. The old domain will be sunset permanently on March 1st, 2023 at which point it will not take any requests. Migrate on over here y'all :D.

My personal website styling toolkit, modeled after the lovely Water.css by Kognise. Written to allow quick and beautiful styling for simple document-like websites. Furret.css also allows for higher-quality and semantically correct HTML markup because of its extensive tag support. Grab a copy at the cdn.

Install

To get started quickly with furret.css, add the following to the <head> of your HTML:

<link rel="stylesheet" href="https://css.furret.dev/furretcss/v2/full/light.min.css" />

Furret.css comes in full versions and partials that allow for cherry picking. You can find more information about the partials at this page.

Furret.css also uses the fonts Outfit and DM Mono (both of which can be found in Google Fonts), however it works equally as well with the browser-based fallbacks. To use these two fonts add the following to your <head>:

<link rel="preconnect" href="https://fonts.googleapis.com/" />
 2 | <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin />
 3 | <link
 4 |   href="https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&family=Outfit:wght@100;200;300;400;500;600;700;800;900&display=swap"
 5 |   rel="stylesheet"
 6 | />

Furret.css has flexible and extensive theming options. To learn more on how to setup theming, visit the theming page.

Typography

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Animi perspiciatis iste a, quisquam nemo aut sit eligendi exercitationem iure tempore laborum necessitatibus ab odio ad, veniam debitis voluptatibus possimus perferendis.

This is strong, this is bold, this is emphasized, this is italicised, this is underlined, this is striken through, this is marked, this is small, this is deletedand inserted.

This is abbreviated, this is a definition.

This is linked.

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

The HTML blockquote Element (or HTML Block Quotation Element) indicates that the enclosed text is an extended quotation. Usually, this is rendered visually by indentation (see Notes for how to change it). A URL for the source of the quotation may be given using the cite attribute, while a text representation of the source can be given using the <cite> cite element.

MDN, "The Block Quotation element"
Header

This is a section of text. Lorem ipsum dolor sit amet consectetur adipisicing elit. Deleniti, aliquid? Voluptates ut, asperiores quibusdam, illo ipsa rem cum autem maiores officiis beatae sint odio eius laboriosam qui repellat eaque atque?

This is a variable, this is inline-code, this is CTRL+C (keyboard) and this is a block of preformatted text:

// Hello World in Javascript
 7 | class Author {
 8 |   constructor(firstName, lastName, yearBorn) {
 9 |     this.firstName = firstName;
10 |     this.lastName = lastName;
11 |     this.yearBorn = yearBorn;
12 |   }
13 | 
14 |   getFullName() {
15 |     return this.firstName + ' ' + this.lastName;
16 |   }
17 | }
18 | 
19 | // Create a new Author
20 | const author = new Author('Douglas', 'Adams', 1952);
21 | author.firstName = 'Doug';
22 | 
23 | // Prints "Doug Adams"
24 | const fullName = author.getFullName();
25 | console.log(fullName);

This text is sample output: ls -a

This is an unordered list:

  • Item A

  • Item B

  • Item C

This is an ordered list:

  1. Item 1

  2. Item 2

  3. Item 3

This is a definition list:

Item 1

About Item 1

Item 2

About Item 2

Item 3

About Item 3

This is an address:

rayhanadev@protonmail.com (+1) 817-555-0100 817-555-0100

Tables

Item Description Count Availability
Item 1 Lorem ipsum dolor sit, amet consectetur adipisicing elit. 10 True
Item 2 Lorem ipsum dolor sit, amet consectetur adipisicing elit. 10 True
Item 3 Lorem ipsum dolor sit, amet consectetur adipisicing elit. 10 False
Item 4 Lorem ipsum dolor sit, amet consectetur adipisicing elit. 10 True
Totals 40 Total Items 75% Availability

Images

rayhanadev logo
rayhanadev logo

RayhanADev's Logo

Forms

Basic Form Fields

This section has some basic fields such as: text, password, disabled, reset and submit.

Switch Form Fields

This section has switch fields such as: checkbox and radio.

Checkbox
Radios
Buttons
Time Form Fields

This section has time fields such as: date, datetime-local, month, time and week.

Numerical Form Fields

This section has numerical fields such as: number and range.

FileData Form Fields

This section has filedata fields such as: file and image.

Submit Buttons

This section has submit fields such as: submit and reset.

-------------------------------------------------------------------------------- /website/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/logo.png -------------------------------------------------------------------------------- /website/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rayhanadev/furretcss/9b69f8c9d9c8fbc4d76da92c1fd9d84ca54264f9/website/mstile-150x150.png -------------------------------------------------------------------------------- /website/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.14, written by Peter Selinger 2001-2017 9 | 10 | 12 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /website/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "furret.css", 3 | "short_name": "furret.css", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#14131e", 17 | "background_color": "#14131e", 18 | "start_url": "https://css.furret.dev", 19 | "display": "standalone" 20 | } 21 | -------------------------------------------------------------------------------- /website/theming.html: -------------------------------------------------------------------------------- 1 | [theming] ~ furret.css

Theming

Furret.css was built with beauty as a key point. As such, it comes with seperate light and dark themes, along with syntax highlighting and theme toggling!

Dark Theme

To use the dark theme, change the light in the stylesheet url to dark, or add the following to the to the <head> of your HTML:

<link rel="stylesheet" href="https://css.furret.dev/furretcss/v2/full/dark.min.css" />

Syntax Highlighting

Furret.css does not include syntax highlighting out of the box, however it can be used with highlight.js and a custom stylesheet. To use the syntax highlighter, add the following to the <head> of your HTML:

<link rel="stylesheet" href="https://css.furret.dev/highlightjs/light.css" />
2 | <script src="https://css.furret.dev/highlightjs/highlight.js"></script>

And the following to the end of your <body>:

<script>hljs.highlightAll();</script>

You can use the dark syntax highlighting theme by replacing light.css with dark.css.

Theme Toggling

In order to provide the best experience with for developers and users, furret.css defaults to a single theme and comes with Javascript that allows for a toggleable light and dark theme. This will respect user preferences and allows for persisted themes. To add toggleable theming, add the following script to the <head> of your HTML:

<script src="https://css.furret.dev/furretcss/js/theme-toggle.js"></script>

And the following to the end of your <body>:

<script>furrets.addThemeToggle();</script>
--------------------------------------------------------------------------------