@fraziersoft/wisp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Chris Frazier
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.
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ <a name="readme-top"></a>
2
+
3
+ <!-- PROJECT LOGO -->
4
+ <div align="center">
5
+ <a href="https://github.com/Frazier-Software/wisp">
6
+ <img src="private/logo.png" alt="Logo" width="254" height="258">
7
+ </a>
8
+
9
+ <h3 align="center">Wisp</h3>
10
+
11
+ <p align="center">
12
+ A dead simple CSS boilerplate.
13
+ <br />
14
+ <a href="https://wisp.frazier.software"><strong>Explore the docs »</strong></a>
15
+ </p>
16
+ </div>
17
+
18
+ <!-- BADGES -->
19
+
20
+ [![Issues][issues-shield]][issues-url]
21
+ [![MIT License][license-shield]][license-url]
22
+ [![LinkedIn][linkedin-shield]][linkedin-url]
23
+
24
+ <!-- ABOUT THE PROJECT -->
25
+
26
+ ## About The Project
27
+
28
+ - Light as a feather at ~500 lines & built with mobile in mind.
29
+ - Styles designed to be a starting point, not a UI framework.
30
+ - Quick to start with zero compiling or installing necessary.
31
+
32
+ You should use Wisp if you're embarking on a smaller project or just don't feel like you need all
33
+ the utility of larger frameworks. Wisp only styles a handful of standard HTML elements, but that's
34
+ often more than enough to get started.
35
+
36
+ <p align="right">(<a href="#readme-top">back to top</a>)</p>
37
+
38
+ <!-- GETTING STARTED -->
39
+
40
+ ## Getting Started
41
+
42
+ To start using Wisp, just link to the CSS stylesheet (and optional JS file):
43
+
44
+ ```html
45
+ <link
46
+ rel="stylesheet"
47
+ href="https://unpkg.com/@fraziersoft/wisp@latest/dist/wisp.css"
48
+ />
49
+ ```
50
+
51
+ <p align="right">(<a href="#readme-top">back to top</a>)</p>
52
+
53
+ <!-- CONTRIBUTING -->
54
+
55
+ ## Contributing
56
+
57
+ Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
58
+
59
+ If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
60
+ Don't forget to give the project a star! Thanks again!
61
+
62
+ 1. Fork the Project
63
+ 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
64
+ 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
65
+ 4. Push to the Branch (`git push origin feature/AmazingFeature`)
66
+ 5. Open a Pull Request
67
+
68
+ <p align="right">(<a href="#readme-top">back to top</a>)</p>
69
+
70
+ <!-- LICENSE -->
71
+
72
+ ## License
73
+
74
+ Distributed under the MIT License. See `LICENSE.txt` for more information.
75
+
76
+ <p align="right">(<a href="#readme-top">back to top</a>)</p>
77
+
78
+ <!-- ACKNOWLEDGMENTS -->
79
+
80
+ ## Acknowledgments
81
+
82
+ This project started as a fork of a CSS boilerplate by [Dave Gamache][dave-url]. I wanted to update some of
83
+ the base classes, remove some of the obsolete cruft, and add a few common web UI components that I thought
84
+ warranted an inclusion. The original project was named Skeleton, but due to the rising popularity of the
85
+ similarly named [Skeleton][skeleton-url] svelte toolkit, I decided a re-branding was also in order.
86
+
87
+ Thank you Dave for all the hard work. The original version of Skeleton was useful for a ton of old projects
88
+ and customer sites. Hopefully someone enjoys this refreshed edition as much as I enjoyed the original.
89
+
90
+ <p align="right">(<a href="#readme-top">back to top</a>)</p>
91
+
92
+ <!-- MARKDOWN LINKS & IMAGES -->
93
+
94
+ [issues-shield]: https://img.shields.io/github/issues/Frazier-Software/wisp.svg?style=for-the-badge
95
+ [issues-url]: https://github.com/Frazier-Software/wisp/issues
96
+ [license-shield]: https://img.shields.io/github/license/Frazier-Software/wisp.svg?color=44CC11&style=for-the-badge
97
+ [license-url]: https://github.com/Frazier-Software/wisp/blob/master/LICENSE.txt
98
+ [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555
99
+ [linkedin-url]: https://linkedin.com/in/linkedin_username
100
+ [dave-url]: https://github.com/dhg
101
+ [skeleton-url]: https://www.skeleton.dev/
package/dist/wisp.css ADDED
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Wisp v1.0.0
3
+ * https://wisp.frazier.software/
4
+ *
5
+ * Copyright (c) 2024 Chris Frazier
6
+ * Licensed under the MIT license
7
+ */
8
+ :root{--color-bg:#FDFDFD;--color-font:#222;--color-font-light:#FFF;--color-primary:#1EAEDB;--color-primary-light:#33C3F0;--color-primary-dark:#0FA0CE;--color-secondary:#B90E0A;--color-secondary-light:#D21404;--color-secondary-dark:#990F02;--color-neutral-1:#F1F1F1;--color-neutral-2:#D1D1D1;--color-neutral-3:#BBB;--color-neutral-4:#888;--color-neutral-5:#555;--color-neutral-6:#333;--font-family:"HelveticaNeue","Helvetica Neue",Helvetica,Arial,sans-serif;--border-radius:4px}html{font-size:62.5%}body{background:var(--color-bg);font-size:1.6em;line-height:1.6;font-weight:400;font-family:var(--font-family);color:var(--color-font)}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:2rem;font-weight:300}h1{font-size:4rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.6rem;line-height:1.6;letter-spacing:0;font-weight:400}@media (min-width:640px){h1{font-size:5rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3rem}h5{font-size:2.4rem}h6{font-size:1.6rem}}p{margin-top:0}a{color:var(--color-primary)}a:hover{color:var(--color-primary-dark)}.btn,button:not(.hljs-copy-button),input[type=button],input[type=reset],input[type=submit]{display:inline-block;height:38px;padding:0 30px;color:var(--color-neutral-5);text-align:center;font-size:11px;font-weight:600;line-height:38px;letter-spacing:.1rem;text-transform:uppercase;text-decoration:none;white-space:nowrap;background-color:transparent;border-radius:var(--border-radius);border:1px solid var(--color-neutral-3);cursor:pointer;box-sizing:border-box;transition:background .4s,color .4s}.btn:hover,button:hover,input[type=button]:hover,input[type=reset]:hover,input[type=submit]:hover{color:var(--color-neutral-6);border-color:var(--color-neutral-4);outline:0}.btn.btn--primary,button.btn--primary,input[type=button].btn--primary,input[type=reset].btn--primary,input[type=submit].btn--primary{color:var(--color-font-light);background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.btn.btn--primary:hover,button.btn--primary:hover,input[type=button].btn--primary:hover,input[type=reset].btn--primary:hover,input[type=submit].btn--primary:hover{color:var(--color-font-light);background-color:var(--color-primary);border-color:var(--color-primary)}.btn.btn--warning,button.btn--warning,input[type=button].btn--warning,input[type=reset].btn--warning,input[type=submit].btn--warning{color:var(--color-secondary-light);border-color:var(--color-secondary-light)}.btn.btn--warning:hover,button.btn--warning:hover,input[type=button].btn--warning:hover,input[type=reset].btn--warning:hover,input[type=submit].btn--warning:hover{color:var(--color-secondary-dark);border-color:var(--color-secondary-dark)}.btn.btn--danger,button.btn--danger,input[type=button].btn--danger,input[type=reset].btn--danger,input[type=submit].btn--danger{color:var(--color-font-light);background:var(--color-secondary-light);border-color:var(--color-secondary-light)}.btn.btn--danger:hover,button.btn--danger:hover,input[type=button].btn--danger:hover,input[type=reset].btn--danger:hover,input[type=submit].btn--danger:hover{background:var(--color-secondary);border-color:var(--color-secondary)}.btn--ripple{position:relative;overflow:hidden}.btn--ripple .ripple{position:absolute;border-radius:50%;background-color:rgba(255,255,255,.4);transform:scale(0);animation:ripple .6s linear}@keyframes ripple{to{transform:scale(4);opacity:0}}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{height:38px;padding:6px 10px;background-color:var(--color-bg);border:1px solid var(--color-neutral-2);border-radius:var(--border-radius);box-shadow:none;box-sizing:border-box}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}textarea{min-height:65px;padding-top:6px;padding-bottom:6px}input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border:1px solid var(--color-primary-light);outline:0}label,legend{display:block;margin-bottom:.5rem;font-weight:600}fieldset{padding:0;border-width:0}input[type=checkbox],input[type=radio]{display:inline}label>.label-body{display:inline-block;cursor:pointer;margin-left:.5rem;font-weight:400}.toggle{font-size:61%;position:relative;top:.2em}.toggle input[type=checkbox]{appearance:none;position:relative;display:inline-block;box-sizing:content-box;width:4.5em;height:2em;padding:.2em;margin-bottom:0;border:none;cursor:pointer;border-radius:1.5em;overflow:hidden;background-color:var(--color-neutral-4);transition:background ease .3s}.toggle input[type=checkbox]:before{content:"on off";display:block;position:absolute;z-index:2;width:2em;height:2em;font-family:system-ui;font-size:1em;line-height:2em;font-weight:500;text-transform:uppercase;text-indent:-2em;word-spacing:2.55em;text-shadow:-1px -1px rgba(0,0,0,.15);white-space:nowrap;background:var(--color-font-light);color:var(--color-font-light);border-radius:1.5em;transition:transform cubic-bezier(.3, 1.5, .7, 1) .3s}.toggle input[type=checkbox]:checked{background-color:var(--color-primary-light)}.toggle input[type=checkbox]:checked:before{transform:translateX(2.5em)}.accordion-tab{border:1px solid var(--color-neutral-2);border-radius:var(--border-radius);margin-bottom:.5rem}.accordion-tab input{display:none}.accordion-tab label{display:flex;justify-content:space-between;margin-bottom:0;padding:5px 5px 5px 10px;cursor:pointer}.accordion-tab:not(.accordion-tab--close) label::after{content:"\276F";color:var(--color-neutral-5);width:1em;height:1em;text-align:center}.accordion-tab:not(.accordion-tab--close) input:checked+label::after{transform:rotate(90deg)}.accordion-tab.accordion-tab--close{border:none;margin-top:12px}.accordion-tab.accordion-tab--close label{font-size:75%;padding:0 0 0 10px}.accordion-content{max-height:0;overflow:hidden;padding:0 5px 0 10px;transition:max-height 650ms}.accordion-content p{margin-bottom:10px}.accordion-content p:first-child{margin-top:15px}.accordion-tab input:checked~.accordion-content{max-height:500rem}ul{list-style:circle inside}ol{list-style:decimal inside}ol,ul{padding-left:0;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin:1.5rem 0 1.5rem 3rem}li{margin-bottom:1rem}code{padding:2px 5px;margin:0 2px;font-size:90%;white-space:nowrap;background:var(--color-neutral-1);border:1px solid var(--color-neutral-2);border-radius:var(--border-radius)}pre>code{display:block;padding:10px 15px;white-space:pre}td,th{padding:12px 15px;text-align:left;border-bottom:1px solid var(--color-neutral-2)}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}.tooltip{cursor:help;border-bottom:1px dotted var(--color-neutral-5);position:relative}.tooltip::after,.tooltip::before{position:absolute;left:50%;opacity:0;z-index:-100}.tooltip:focus::after,.tooltip:focus::before,.tooltip:hover::after,.tooltip:hover::before{opacity:1;transform:scale(1) translateY(0);z-index:100}.tooltip::before{content:"";border-style:solid;border-width:1em .75em 0 .75em;border-color:var(--color-neutral-6) transparent transparent transparent;bottom:100%;margin-left:-.5em;transition:all .65s cubic-bezier(.84, -.18, .31, 1.26),opacity .65s .5s;transform:scale(.6) translateY(-90%)}.tooltip:focus::before,.tooltip:hover::before{transition:all .65s cubic-bezier(.84,-.18,.31,1.26) .2s}.tooltip::after{background:var(--color-neutral-6);border-radius:var(--border-radius);bottom:180%;color:var(--color-font-light);content:attr(data-tip);margin-left:-8.75em;padding:1em;transition:all .65s cubic-bezier(.84,-.18,.31,1.26) .2s;transform:scale(.6) translateY(50%);font-size:.9em;width:16em}.tooltip:focus::after,.tooltip:hover::after{transition:all .65s cubic-bezier(.84,-.18,.31,1.26)}.tooltip.tooltip--sm::after{font-size:.75em;margin-left:-5em;width:10em}@media (max-width:768px){.tooltip::after{font-size:.75em;margin-left:-5em;width:10em}}.btn,button:not(.hljs-copy-button){margin-bottom:1rem}fieldset,input,select,textarea{margin-bottom:1.5rem}blockquote,dl,figure,form,ol,p,pre,table,ul{margin-bottom:2.5rem}hr{margin-top:30px;margin-bottom:35px;border-width:0;border-top:1px solid var(--color-neutral-2)}#back-to-top{display:inline-block;background-color:var(--color-primary-light);width:50px;height:50px;text-align:center;border-radius:var(--border-radius);position:fixed;bottom:30px;right:30px;transition:background-color .3s,opacity .5s,visibility .5s;opacity:0;visibility:hidden;z-index:1000}#back-to-top::after{content:"\276F";font-weight:400;font-style:normal;font-size:32px;line-height:50px;color:var(--color-bg);display:inline-block;transform:rotate(270deg)}#back-to-top:active,#back-to-top:hover{cursor:pointer;background-color:var(--color-primary)}#back-to-top.back-to-top--show{opacity:1;visibility:visible}.u-full{width:100%;box-sizing:border-box}.u-max{max-width:100%;box-sizing:border-box}.u-m0{margin:0}.u-mt0{margin-top:0}.u-mb0{margin-bottom:0}.u-ml0{margin-left:0}.u-mr0{margin-right:0}.u-p0{padding:0}.u-pt0{padding-top:0}.u-pb0{padding-bottom:0}.u-pl0{padding-left:0}.u-pr0{padding-right:0}@media (min-width:640px){.sm-hide{display:none!important}}@media (max-width:639px){.sm-show{display:none!important}}@media (min-width:768px){.md-hide{display:none!important}}@media (max-width:767px){.md-show{display:none!important}}@media (min-width:1024px){.lg-hide{display:none!important}}@media (max-width:1023px){.lg-show{display:none!important}}@media (min-width:1280px){.xl-hide{display:none!important}}@media (max-width:1279px){.xl-show{display:none!important}}@media (min-width:1536px){.xxl-hide{display:none!important}}@media (max-width:1535px){.xxl-show{display:none!important}}
package/dist/wisp.js ADDED
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Wisp v1.0.0
3
+ * https://wisp.frazier.software/
4
+ *
5
+ * Copyright (c) 2024 Chris Frazier
6
+ * Licensed under the MIT license
7
+ */
8
+ function a(A){var _=A.currentTarget,B=document.createElement('span'),d=Math.max(_.clientWidth,_.clientHeight)/2,e=_.getBoundingClientRect();B.classList.add('ripple');B.style.width=B.style.height=`${2*d}px`;B.style.left=`${A.clientX-(e.left+d)}px`;B.style.top=`${A.clientY-(e.top+d)}px`;for(const el of _.querySelectorAll('.ripple'))el.remove();_.appendChild(B)}function b(C){return ()=>{document.documentElement.scrollTop>300?C.classList.add('back-to-top--show'):C.classList.remove('back-to-top--show')}}function c(_a){_a.preventDefault();document.documentElement.scrollIntoView({behavior:'smooth'})}(D=>document.readyState!=='loading'?D():document.addEventListener('DOMContentLoaded',D))(()=>{for(const E of document.querySelectorAll('.btn--ripple'))E.addEventListener('click',a);var _A=document.querySelector('#back-to-top');_A&&(document.addEventListener('scroll',b(_A)),_A.addEventListener('click',c))});
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@fraziersoft/wisp",
3
+ "version": "1.0.0",
4
+ "description": "Simple CSS boilerplate",
5
+ "homepage": "https://wisp.frazier.software",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/Frazier-Software/wisp.git"
9
+ },
10
+ "main": "dist/wisp.css",
11
+ "files": [
12
+ "dist",
13
+ "src"
14
+ ],
15
+ "license": "MIT",
16
+ "keywords": [
17
+ "css",
18
+ "boilerplate"
19
+ ],
20
+ "scripts": {
21
+ "dev": "http-server docs",
22
+ "build": "sh scripts/build.sh",
23
+ "clean": "rimraf dist"
24
+ },
25
+ "devDependencies": {
26
+ "changelogen": "^0.5.7",
27
+ "http-server": "^14.1.1",
28
+ "minify": "^12.0.0",
29
+ "rimraf": "^6.0.1"
30
+ },
31
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
32
+ }
package/src/wisp.css ADDED
@@ -0,0 +1,566 @@
1
+ /* Variables
2
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
3
+ :root {
4
+ --color-bg: #FDFDFD;
5
+ --color-font: #222;
6
+ --color-font-light: #FFF;
7
+
8
+ --color-primary: #1EAEDB;
9
+ --color-primary-light: #33C3F0;
10
+ --color-primary-dark: #0FA0CE;
11
+
12
+ --color-secondary: #B90E0A;
13
+ --color-secondary-light: #D21404;
14
+ --color-secondary-dark: #990F02;
15
+
16
+ --color-neutral-1: #F1F1F1;
17
+ --color-neutral-2: #D1D1D1;
18
+ --color-neutral-3: #BBB;
19
+ --color-neutral-4: #888;
20
+ --color-neutral-5: #555;
21
+ --color-neutral-6: #333;
22
+
23
+ --font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
24
+ --border-radius: 4px; }
25
+
26
+
27
+ /* Base styles
28
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
29
+ html {
30
+ font-size: 62.5%; }
31
+ body {
32
+ background: var(--color-bg);
33
+ font-size: 1.6em;
34
+ line-height: 1.6;
35
+ font-weight: 400;
36
+ font-family: var(--font-family);
37
+ color: var(--color-font); }
38
+
39
+
40
+ /* Typography
41
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
42
+ h1, h2, h3, h4, h5, h6 {
43
+ margin-top: 0;
44
+ margin-bottom: 2rem;
45
+ font-weight: 300; }
46
+ h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;}
47
+ h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; }
48
+ h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; }
49
+ h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; }
50
+ h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; }
51
+ h6 { font-size: 1.6rem; line-height: 1.6; letter-spacing: 0; font-weight: 400; }
52
+
53
+ /* Larger than phablet */
54
+ @media (min-width: 640px) {
55
+ h1 { font-size: 5.0rem; }
56
+ h2 { font-size: 4.2rem; }
57
+ h3 { font-size: 3.6rem; }
58
+ h4 { font-size: 3.0rem; }
59
+ h5 { font-size: 2.4rem; }
60
+ h6 { font-size: 1.6rem; }
61
+ }
62
+
63
+ p {
64
+ margin-top: 0; }
65
+
66
+
67
+ /* Links
68
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
69
+ a {
70
+ color: var(--color-primary); }
71
+ a:hover {
72
+ color: var(--color-primary-dark); }
73
+
74
+
75
+ /* Buttons
76
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
77
+ .btn,
78
+ button:not(.hljs-copy-button),
79
+ input[type="submit"],
80
+ input[type="reset"],
81
+ input[type="button"] {
82
+ display: inline-block;
83
+ height: 38px;
84
+ padding: 0 30px;
85
+ color: var(--color-neutral-5);
86
+ text-align: center;
87
+ font-size: 11px;
88
+ font-weight: 600;
89
+ line-height: 38px;
90
+ letter-spacing: .1rem;
91
+ text-transform: uppercase;
92
+ text-decoration: none;
93
+ white-space: nowrap;
94
+ background-color: transparent;
95
+ border-radius: var(--border-radius);
96
+ border: 1px solid var(--color-neutral-3);
97
+ cursor: pointer;
98
+ box-sizing: border-box;
99
+ transition: background 400ms, color 400ms;}
100
+ .btn:hover,
101
+ button:hover,
102
+ input[type="submit"]:hover,
103
+ input[type="reset"]:hover,
104
+ input[type="button"]:hover {
105
+ color: var(--color-neutral-6);
106
+ border-color: var(--color-neutral-4);
107
+ outline: 0; }
108
+ .btn.btn--primary,
109
+ button.btn--primary,
110
+ input[type="submit"].btn--primary,
111
+ input[type="reset"].btn--primary,
112
+ input[type="button"].btn--primary {
113
+ color: var(--color-font-light);
114
+ background-color: var(--color-primary-light);
115
+ border-color: var(--color-primary-light); }
116
+ .btn.btn--primary:hover,
117
+ button.btn--primary:hover,
118
+ input[type="submit"].btn--primary:hover,
119
+ input[type="reset"].btn--primary:hover,
120
+ input[type="button"].btn--primary:hover {
121
+ color: var(--color-font-light);
122
+ background-color: var(--color-primary);
123
+ border-color: var(--color-primary); }
124
+ .btn.btn--warning,
125
+ button.btn--warning,
126
+ input[type="submit"].btn--warning,
127
+ input[type="reset"].btn--warning,
128
+ input[type="button"].btn--warning {
129
+ color: var(--color-secondary-light);
130
+ border-color: var(--color-secondary-light); }
131
+ .btn.btn--warning:hover,
132
+ button.btn--warning:hover,
133
+ input[type="submit"].btn--warning:hover,
134
+ input[type="reset"].btn--warning:hover,
135
+ input[type="button"].btn--warning:hover {
136
+ color: var(--color-secondary-dark);
137
+ border-color: var(--color-secondary-dark); }
138
+ .btn.btn--danger,
139
+ button.btn--danger,
140
+ input[type="submit"].btn--danger,
141
+ input[type="reset"].btn--danger,
142
+ input[type="button"].btn--danger {
143
+ color: var(--color-font-light);
144
+ background: var(--color-secondary-light);
145
+ border-color: var(--color-secondary-light); }
146
+ .btn.btn--danger:hover,
147
+ button.btn--danger:hover,
148
+ input[type="submit"].btn--danger:hover,
149
+ input[type="reset"].btn--danger:hover,
150
+ input[type="button"].btn--danger:hover {
151
+ background: var(--color-secondary);
152
+ border-color: var(--color-secondary); }
153
+
154
+
155
+ /* Button Ripple Effect
156
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
157
+ .btn--ripple {
158
+ position: relative;
159
+ overflow: hidden; }
160
+ .btn--ripple .ripple {
161
+ position: absolute;
162
+ border-radius: 50%;
163
+ background-color: rgba(255, 255, 255, 0.4);
164
+ transform: scale(0);
165
+ animation: ripple 600ms linear; }
166
+
167
+ @keyframes ripple {
168
+ to {
169
+ transform: scale(4);
170
+ opacity: 0; }
171
+ }
172
+
173
+
174
+ /* Forms
175
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
176
+ input[type="email"],
177
+ input[type="number"],
178
+ input[type="search"],
179
+ input[type="text"],
180
+ input[type="tel"],
181
+ input[type="url"],
182
+ input[type="password"],
183
+ textarea,
184
+ select {
185
+ height: 38px;
186
+ padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
187
+ background-color: var(--color-bg);
188
+ border: 1px solid var(--color-neutral-2);
189
+ border-radius: var(--border-radius);
190
+ box-shadow: none;
191
+ box-sizing: border-box; }
192
+ input[type="email"],
193
+ input[type="number"],
194
+ input[type="search"],
195
+ input[type="text"],
196
+ input[type="tel"],
197
+ input[type="url"],
198
+ input[type="password"],
199
+ textarea {
200
+ /* Removes awkward default styles on some inputs for iOS */
201
+ -webkit-appearance: none;
202
+ -moz-appearance: none;
203
+ appearance: none; }
204
+ textarea {
205
+ min-height: 65px;
206
+ padding-top: 6px;
207
+ padding-bottom: 6px; }
208
+ input[type="email"]:focus,
209
+ input[type="number"]:focus,
210
+ input[type="search"]:focus,
211
+ input[type="text"]:focus,
212
+ input[type="tel"]:focus,
213
+ input[type="url"]:focus,
214
+ input[type="password"]:focus,
215
+ textarea:focus,
216
+ select:focus {
217
+ border: 1px solid var(--color-primary-light);
218
+ outline: 0; }
219
+ label,
220
+ legend {
221
+ display: block;
222
+ margin-bottom: .5rem;
223
+ font-weight: 600; }
224
+ fieldset {
225
+ padding: 0;
226
+ border-width: 0; }
227
+ input[type="checkbox"],
228
+ input[type="radio"] {
229
+ display: inline; }
230
+ label > .label-body {
231
+ display: inline-block;
232
+ cursor: pointer;
233
+ margin-left: .5rem;
234
+ font-weight: normal; }
235
+
236
+
237
+ /* Toggles
238
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
239
+ .toggle {
240
+ font-size: 61%;
241
+ position: relative;
242
+ top: 0.2em; }
243
+ .toggle input[type="checkbox"] {
244
+ appearance: none;
245
+ position: relative;
246
+ display: inline-block;
247
+ box-sizing: content-box;
248
+ width: 4.5em;
249
+ height: 2em;
250
+ padding: 0.2em;
251
+ margin-bottom: 0;
252
+ border: none;
253
+ cursor: pointer;
254
+ border-radius: 1.5em;
255
+ overflow: hidden;
256
+ background-color: var(--color-neutral-4);
257
+ transition: background ease 0.3s; }
258
+ .toggle input[type="checkbox"]:before {
259
+ content: "on off";
260
+ display: block;
261
+ position: absolute;
262
+ z-index: 2;
263
+ width: 2em;
264
+ height: 2em;
265
+ font-family: system-ui;
266
+ font-size: 1em;
267
+ line-height: 2em;
268
+ font-weight: 500;
269
+ text-transform: uppercase;
270
+ text-indent: -2em;
271
+ word-spacing: 2.55em;
272
+ text-shadow: -1px -1px rgba(0,0,0,0.15);
273
+ white-space: nowrap;
274
+ background: var(--color-font-light);
275
+ color: var(--color-font-light);
276
+ border-radius: 1.5em;
277
+ transition: transform cubic-bezier(0.3, 1.5, 0.7, 1) 0.3s; }
278
+ .toggle input[type="checkbox"]:checked {
279
+ background-color: var(--color-primary-light); }
280
+ .toggle input[type="checkbox"]:checked:before {
281
+ transform: translateX(2.5em); }
282
+
283
+
284
+ /* Accordion
285
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
286
+ .accordion-tab {
287
+ border: 1px solid var(--color-neutral-2);
288
+ border-radius: var(--border-radius);
289
+ margin-bottom: 0.5rem; }
290
+ .accordion-tab input {
291
+ display: none; }
292
+ .accordion-tab label {
293
+ display: flex;
294
+ justify-content: space-between;
295
+ margin-bottom: 0;
296
+ padding: 5px 5px 5px 10px;
297
+ cursor: pointer; }
298
+ .accordion-tab:not(.accordion-tab--close) label::after {
299
+ content: "\276F";
300
+ color: var(--color-neutral-5);
301
+ width: 1em;
302
+ height: 1em;
303
+ text-align: center; }
304
+ .accordion-tab:not(.accordion-tab--close) input:checked + label::after {
305
+ transform: rotate(90deg); }
306
+ .accordion-tab.accordion-tab--close {
307
+ border: none;
308
+ margin-top: 12px; }
309
+ .accordion-tab.accordion-tab--close label {
310
+ font-size: 75%;
311
+ padding: 0 0 0 10px; }
312
+ .accordion-content {
313
+ max-height: 0;
314
+ overflow: hidden;
315
+ padding: 0 5px 0 10px;
316
+ transition: max-height 650ms; }
317
+ .accordion-content p {
318
+ margin-bottom: 10px; }
319
+ .accordion-content p:first-child {
320
+ margin-top: 15px; }
321
+ .accordion-tab input:checked ~ .accordion-content {
322
+ max-height: 500rem; }
323
+
324
+
325
+ /* Lists
326
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
327
+ ul {
328
+ list-style: circle inside; }
329
+ ol {
330
+ list-style: decimal inside; }
331
+ ol, ul {
332
+ padding-left: 0;
333
+ margin-top: 0; }
334
+ ul ul,
335
+ ul ol,
336
+ ol ol,
337
+ ol ul {
338
+ margin: 1.5rem 0 1.5rem 3rem; }
339
+ li {
340
+ margin-bottom: 1rem; }
341
+
342
+
343
+ /* Code
344
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
345
+ code {
346
+ padding: 2px 5px;
347
+ margin: 0 2px;
348
+ font-size: 90%;
349
+ white-space: nowrap;
350
+ background: var(--color-neutral-1);
351
+ border: 1px solid var(--color-neutral-2);
352
+ border-radius: var(--border-radius); }
353
+ pre > code {
354
+ display: block;
355
+ padding: 10px 15px;
356
+ white-space: pre; }
357
+
358
+
359
+ /* Tables
360
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
361
+ th,
362
+ td {
363
+ padding: 12px 15px;
364
+ text-align: left;
365
+ border-bottom: 1px solid var(--color-neutral-2); }
366
+ th:first-child,
367
+ td:first-child {
368
+ padding-left: 0; }
369
+ th:last-child,
370
+ td:last-child {
371
+ padding-right: 0; }
372
+
373
+
374
+ .tooltip {
375
+ cursor: help;
376
+ border-bottom: 1px dotted var(--color-neutral-5);
377
+ position: relative; }
378
+ .tooltip::before,
379
+ .tooltip::after {
380
+ position: absolute;
381
+ left: 50%;
382
+ opacity: 0;
383
+ z-index: -100; }
384
+ .tooltip:hover::before,
385
+ .tooltip:focus::before,
386
+ .tooltip:hover::after,
387
+ .tooltip:focus::after {
388
+ opacity: 1;
389
+ transform: scale(1) translateY(0);
390
+ z-index: 100; }
391
+ .tooltip::before {
392
+ content: "";
393
+ border-style: solid;
394
+ border-width: 1em 0.75em 0 0.75em;
395
+ border-color: var(--color-neutral-6) transparent transparent transparent;
396
+ bottom: 100%;
397
+ margin-left: -0.5em;
398
+ transition: all .65s cubic-bezier(.84, -0.18, 0.31, 1.26), opacity .65s .5s;
399
+ transform: scale(.6) translateY(-90%); }
400
+ .tooltip:hover::before,
401
+ .tooltip:focus::before {
402
+ transition: all .65s cubic-bezier(.84,-0.18,.31,1.26) .2s; }
403
+ .tooltip::after {
404
+ background: var(--color-neutral-6);
405
+ border-radius: var(--border-radius);
406
+ bottom: 180%;
407
+ color: var(--color-font-light);
408
+ content: attr(data-tip);
409
+ margin-left: -8.75em;
410
+ padding: 1em;
411
+ transition: all .65s cubic-bezier(.84,-0.18,.31,1.26) .2s;
412
+ transform: scale(.6) translateY(50%);
413
+ font-size: .9em;
414
+ width: 16em; }
415
+ .tooltip:hover::after,
416
+ .tooltip:focus::after {
417
+ transition: all .65s cubic-bezier(.84,-0.18,.31,1.26); }
418
+ .tooltip.tooltip--sm::after {
419
+ font-size: .75em;
420
+ margin-left: -5em;
421
+ width: 10em; }
422
+
423
+ @media (max-width: 768px) {
424
+ .tooltip::after {
425
+ font-size: .75em;
426
+ margin-left: -5em;
427
+ width: 10em; }
428
+ }
429
+
430
+
431
+ /* Spacing
432
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
433
+ button:not(.hljs-copy-button),
434
+ .btn {
435
+ margin-bottom: 1rem; }
436
+ input,
437
+ textarea,
438
+ select,
439
+ fieldset {
440
+ margin-bottom: 1.5rem; }
441
+ pre,
442
+ blockquote,
443
+ dl,
444
+ figure,
445
+ table,
446
+ p,
447
+ ul,
448
+ ol,
449
+ form {
450
+ margin-bottom: 2.5rem; }
451
+
452
+
453
+ /* Misc
454
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
455
+ hr {
456
+ margin-top: 30px;
457
+ margin-bottom: 35px;
458
+ border-width: 0;
459
+ border-top: 1px solid var(--color-neutral-2); }
460
+
461
+
462
+ #back-to-top {
463
+ display: inline-block;
464
+ background-color: var(--color-primary-light);
465
+ width: 50px;
466
+ height: 50px;
467
+ text-align: center;
468
+ border-radius: var(--border-radius);
469
+ position: fixed;
470
+ bottom: 30px;
471
+ right: 30px;
472
+ transition: background-color 300ms, opacity 500ms, visibility 500ms;
473
+ opacity: 0;
474
+ visibility: hidden;
475
+ z-index: 1000; }
476
+ #back-to-top::after {
477
+ content: "\276F";
478
+ font-weight: normal;
479
+ font-style: normal;
480
+ font-size: 32px;
481
+ line-height: 50px;
482
+ color: var(--color-bg);
483
+ display: inline-block;
484
+ transform: rotate(270deg);
485
+ }
486
+ #back-to-top:hover,
487
+ #back-to-top:active {
488
+ cursor: pointer;
489
+ background-color: var(--color-primary); }
490
+ #back-to-top.back-to-top--show {
491
+ opacity: 1;
492
+ visibility: visible; }
493
+
494
+
495
+ /* Utilities
496
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
497
+ .u-full {
498
+ width: 100%;
499
+ box-sizing: border-box; }
500
+ .u-max {
501
+ max-width: 100%;
502
+ box-sizing: border-box; }
503
+ .u-m0 { margin: 0; }
504
+ .u-mt0 { margin-top: 0; }
505
+ .u-mb0 { margin-bottom: 0; }
506
+ .u-ml0 { margin-left: 0; }
507
+ .u-mr0 { margin-right: 0; }
508
+ .u-p0 { padding: 0; }
509
+ .u-pt0 { padding-top: 0; }
510
+ .u-pb0 { padding-bottom: 0; }
511
+ .u-pl0 { padding-left: 0; }
512
+ .u-pr0 { padding-right: 0; }
513
+
514
+
515
+ /* Media Queries
516
+ –––––––––––––––––––––––––––––––––––––––––––––––––– */
517
+
518
+ /* Larger than phablet (sm) */
519
+ @media (min-width: 640px) {
520
+ .sm-hide {
521
+ display: none !important; }
522
+ }
523
+ @media (max-width: 639px) {
524
+ .sm-show {
525
+ display: none !important; }
526
+ }
527
+
528
+ /* Larger than tablet (md) */
529
+ @media (min-width: 768px) {
530
+ .md-hide {
531
+ display: none !important; }
532
+ }
533
+ @media (max-width: 767px) {
534
+ .md-show {
535
+ display: none !important;}
536
+ }
537
+
538
+ /* Larger than desktop (lg) */
539
+ @media (min-width: 1024px) {
540
+ .lg-hide {
541
+ display: none !important; }
542
+ }
543
+ @media (max-width: 1023px) {
544
+ .lg-show {
545
+ display: none !important;}
546
+ }
547
+
548
+ /* Larger than Desktop HD (xl) */
549
+ @media (min-width: 1280px) {
550
+ .xl-hide {
551
+ display: none !important; }
552
+ }
553
+ @media (max-width: 1279px) {
554
+ .xl-show {
555
+ display: none !important;}
556
+ }
557
+
558
+ /* Extra large (2xl) */
559
+ @media (min-width: 1536px) {
560
+ .xxl-hide {
561
+ display: none !important; }
562
+ }
563
+ @media (max-width: 1535px) {
564
+ .xxl-show {
565
+ display: none !important;}
566
+ }
package/src/wisp.js ADDED
@@ -0,0 +1,48 @@
1
+ function createRipple(event) {
2
+ const btn = event.currentTarget;
3
+ const ripple = document.createElement('span');
4
+ const radius = Math.max(btn.clientWidth, btn.clientHeight) / 2;
5
+ const bounds = btn.getBoundingClientRect();
6
+
7
+ ripple.classList.add('ripple');
8
+ ripple.style.width = ripple.style.height = `${2 * radius}px`;
9
+ ripple.style.left = `${event.clientX - (bounds.left + radius)}px`;
10
+ ripple.style.top = `${event.clientY - (bounds.top + radius)}px`;
11
+
12
+ btn.querySelectorAll('.ripple').forEach(el => el.remove());
13
+ btn.appendChild(ripple);
14
+ }
15
+
16
+ function handleScroll(btt) {
17
+ return function () {
18
+ if (document.documentElement.scrollTop > 300) {
19
+ btt.classList.add('back-to-top--show');
20
+ } else {
21
+ btt.classList.remove('back-to-top--show');
22
+ }
23
+ };
24
+ }
25
+
26
+ function handleClick(event) {
27
+ event.preventDefault();
28
+ document.documentElement.scrollIntoView({
29
+ behavior: 'smooth',
30
+ });
31
+ }
32
+
33
+ const ready = cb => {
34
+ if (document.readyState !== 'loading') cb();
35
+ else document.addEventListener('DOMContentLoaded', cb);
36
+ };
37
+
38
+ ready(() => {
39
+ document.querySelectorAll('.btn--ripple').forEach(el => {
40
+ el.addEventListener('click', createRipple);
41
+ });
42
+
43
+ const btt = document.querySelector('#back-to-top');
44
+ if (btt) {
45
+ document.addEventListener('scroll', handleScroll(btt));
46
+ btt.addEventListener('click', handleClick);
47
+ }
48
+ });