App
0 parents
Showing
44 changed files
with
2125 additions
and
0 deletions
Dockerfile
0 → 100644
website/LICENSE.txt
0 → 100644
This diff is collapsed.
Click to expand it.
website/README.txt
0 → 100644
1 | Eventually by HTML5 UP | ||
2 | html5up.net | @ajlkn | ||
3 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
4 | |||
5 | |||
6 | Just a simple placeholder template for your kickass app/product/startup/whatever until it | ||
7 | launches. Includes an email signup form and a cool slideshow background (more on both below). | ||
8 | |||
9 | Demo images* courtesy of Unsplash, a radtastic collection of CC0 (public domain) images | ||
10 | you can use for pretty much whatever. | ||
11 | |||
12 | (* = not included) | ||
13 | |||
14 | AJ | ||
15 | aj@lkn.io | @ajlkn | ||
16 | |||
17 | |||
18 | Signup Form: | ||
19 | |||
20 | The signup form won't actually do anything (other than report back with a "thank you" message) | ||
21 | until you tie it to either a third party service (eg. MailChimp) or your own hosted solution. | ||
22 | In either case, there are two ways to go: | ||
23 | |||
24 | 1. The conventional (non-AJAX) way, which pretty much comes down to pointing the form's "action" | ||
25 | attribute to your service/script URL. If you go this route, remove the entire "Signup Form" code | ||
26 | block from assets/js/main.js (since it's not needed for this approach). | ||
27 | |||
28 | -or- | ||
29 | |||
30 | 2. The AJAX way. How you set this up is largely dependent on the service/solution you're using | ||
31 | so you'll need to consult their/its documentation. However, I have included some basic code | ||
32 | (under "Signup Form" in assets/js/main.js) that will at least let you interact with the | ||
33 | form itself. | ||
34 | |||
35 | |||
36 | Slideshow Background: | ||
37 | |||
38 | This is pretty straightforward, but there are two JS settings you'll want to be aware of | ||
39 | (found under "Slideshow Background" in assets/js/main.js): | ||
40 | |||
41 | images | ||
42 | |||
43 | The list of images to cycle through, given in the following format: | ||
44 | |||
45 | 'url': 'alignment' | ||
46 | |||
47 | Where 'url' is the image (eg. 'images/foo.jpg', 'http://somewhere.else/foo.jpg'), and | ||
48 | 'alignment' is how the image should be vertically aligned ('top', 'center', or 'bottom'). | ||
49 | |||
50 | Note: Browsers that don't support CSS transitions (like IE<=9) will only see the first image. | ||
51 | |||
52 | delay | ||
53 | |||
54 | How long to wait between transitions (in ms). Note that this must be at least twice as long as | ||
55 | the transition speed itself (currently 3 seconds). | ||
56 | |||
57 | |||
58 | Credits: | ||
59 | |||
60 | Demo Images: | ||
61 | Unsplash (unsplash.com) | ||
62 | |||
63 | Icons: | ||
64 | Font Awesome (fontawesome.io) | ||
65 | |||
66 | Other: | ||
67 | Responsive Tools (github.com/ajlkn/responsive-tools) | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/css/fontawesome-all.min.css
0 → 100644
This diff is collapsed.
Click to expand it.
website/assets/css/main.css
0 → 100644
This diff is collapsed.
Click to expand it.
website/assets/js/main.js
0 → 100644
1 | /* | ||
2 | Eventually by HTML5 UP | ||
3 | html5up.net | @ajlkn | ||
4 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | */ | ||
6 | |||
7 | (function() { | ||
8 | |||
9 | "use strict"; | ||
10 | |||
11 | var $body = document.querySelector('body'); | ||
12 | |||
13 | // Methods/polyfills. | ||
14 | |||
15 | // classList | (c) @remy | github.com/remy/polyfills | rem.mit-license.org | ||
16 | !function(){function t(t){this.el=t;for(var n=t.className.replace(/^\s+|\s+$/g,"").split(/\s+/),i=0;i<n.length;i++)e.call(this,n[i])}function n(t,n,i){Object.defineProperty?Object.defineProperty(t,n,{get:i}):t.__defineGetter__(n,i)}if(!("undefined"==typeof window.Element||"classList"in document.documentElement)){var i=Array.prototype,e=i.push,s=i.splice,o=i.join;t.prototype={add:function(t){this.contains(t)||(e.call(this,t),this.el.className=this.toString())},contains:function(t){return-1!=this.el.className.indexOf(t)},item:function(t){return this[t]||null},remove:function(t){if(this.contains(t)){for(var n=0;n<this.length&&this[n]!=t;n++);s.call(this,n,1),this.el.className=this.toString()}},toString:function(){return o.call(this," ")},toggle:function(t){return this.contains(t)?this.remove(t):this.add(t),this.contains(t)}},window.DOMTokenList=t,n(Element.prototype,"classList",function(){return new t(this)})}}(); | ||
17 | |||
18 | // canUse | ||
19 | window.canUse=function(p){if(!window._canUse)window._canUse=document.createElement("div");var e=window._canUse.style,up=p.charAt(0).toUpperCase()+p.slice(1);return p in e||"Moz"+up in e||"Webkit"+up in e||"O"+up in e||"ms"+up in e}; | ||
20 | |||
21 | // window.addEventListener | ||
22 | (function(){if("addEventListener"in window)return;window.addEventListener=function(type,f){window.attachEvent("on"+type,f)}})(); | ||
23 | |||
24 | // Play initial animations on page load. | ||
25 | window.addEventListener('load', function() { | ||
26 | window.setTimeout(function() { | ||
27 | $body.classList.remove('is-preload'); | ||
28 | }, 100); | ||
29 | }); | ||
30 | |||
31 | // Slideshow Background. | ||
32 | (function() { | ||
33 | |||
34 | // Settings. | ||
35 | var settings = { | ||
36 | |||
37 | // Images (in the format of 'url': 'alignment'). | ||
38 | images: { | ||
39 | 'images/bg01.jpg': 'center', | ||
40 | 'images/bg02.jpg': 'center', | ||
41 | 'images/bg03.jpg': 'center' | ||
42 | }, | ||
43 | |||
44 | // Delay. | ||
45 | delay: 6000 | ||
46 | |||
47 | }; | ||
48 | |||
49 | // Vars. | ||
50 | var pos = 0, lastPos = 0, | ||
51 | $wrapper, $bgs = [], $bg, | ||
52 | k, v; | ||
53 | |||
54 | // Create BG wrapper, BGs. | ||
55 | $wrapper = document.createElement('div'); | ||
56 | $wrapper.id = 'bg'; | ||
57 | $body.appendChild($wrapper); | ||
58 | |||
59 | for (k in settings.images) { | ||
60 | |||
61 | // Create BG. | ||
62 | $bg = document.createElement('div'); | ||
63 | $bg.style.backgroundImage = 'url("' + k + '")'; | ||
64 | $bg.style.backgroundPosition = settings.images[k]; | ||
65 | $wrapper.appendChild($bg); | ||
66 | |||
67 | // Add it to array. | ||
68 | $bgs.push($bg); | ||
69 | |||
70 | } | ||
71 | |||
72 | // Main loop. | ||
73 | $bgs[pos].classList.add('visible'); | ||
74 | $bgs[pos].classList.add('top'); | ||
75 | |||
76 | // Bail if we only have a single BG or the client doesn't support transitions. | ||
77 | if ($bgs.length == 1 | ||
78 | || !canUse('transition')) | ||
79 | return; | ||
80 | |||
81 | window.setInterval(function() { | ||
82 | |||
83 | lastPos = pos; | ||
84 | pos++; | ||
85 | |||
86 | // Wrap to beginning if necessary. | ||
87 | if (pos >= $bgs.length) | ||
88 | pos = 0; | ||
89 | |||
90 | // Swap top images. | ||
91 | $bgs[lastPos].classList.remove('top'); | ||
92 | $bgs[pos].classList.add('visible'); | ||
93 | $bgs[pos].classList.add('top'); | ||
94 | |||
95 | // Hide last image after a short delay. | ||
96 | window.setTimeout(function() { | ||
97 | $bgs[lastPos].classList.remove('visible'); | ||
98 | }, settings.delay / 2); | ||
99 | |||
100 | }, settings.delay); | ||
101 | |||
102 | })(); | ||
103 | |||
104 | // Signup Form. | ||
105 | (function() { | ||
106 | |||
107 | // Vars. | ||
108 | var $form = document.querySelectorAll('#signup-form')[0], | ||
109 | $submit = document.querySelectorAll('#signup-form input[type="submit"]')[0], | ||
110 | $message; | ||
111 | |||
112 | // Bail if addEventListener isn't supported. | ||
113 | if (!('addEventListener' in $form)) | ||
114 | return; | ||
115 | |||
116 | // Message. | ||
117 | $message = document.createElement('span'); | ||
118 | $message.classList.add('message'); | ||
119 | $form.appendChild($message); | ||
120 | |||
121 | $message._show = function(type, text) { | ||
122 | |||
123 | $message.innerHTML = text; | ||
124 | $message.classList.add(type); | ||
125 | $message.classList.add('visible'); | ||
126 | |||
127 | window.setTimeout(function() { | ||
128 | $message._hide(); | ||
129 | }, 3000); | ||
130 | |||
131 | }; | ||
132 | |||
133 | $message._hide = function() { | ||
134 | $message.classList.remove('visible'); | ||
135 | }; | ||
136 | |||
137 | // Events. | ||
138 | // Note: If you're *not* using AJAX, get rid of this event listener. | ||
139 | $form.addEventListener('submit', function(event) { | ||
140 | |||
141 | event.stopPropagation(); | ||
142 | event.preventDefault(); | ||
143 | |||
144 | // Hide message. | ||
145 | $message._hide(); | ||
146 | |||
147 | // Disable submit. | ||
148 | $submit.disabled = true; | ||
149 | |||
150 | // Process form. | ||
151 | // Note: Doesn't actually do anything yet (other than report back with a "thank you"), | ||
152 | // but there's enough here to piece together a working AJAX submission call that does. | ||
153 | window.setTimeout(function() { | ||
154 | |||
155 | // Reset form. | ||
156 | $form.reset(); | ||
157 | |||
158 | // Enable submit. | ||
159 | $submit.disabled = false; | ||
160 | |||
161 | // Show message. | ||
162 | $message._show('success', 'Thank you!'); | ||
163 | //$message._show('failure', 'Something went wrong. Please try again.'); | ||
164 | |||
165 | }, 750); | ||
166 | |||
167 | }); | ||
168 | |||
169 | })(); | ||
170 | |||
171 | })(); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/base/_bg.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* BG */ | ||
8 | |||
9 | #bg { | ||
10 | @include vendor('transition', 'opacity #{_duration(bg-fadein)} ease-in-out'); | ||
11 | height: 100%; | ||
12 | left: 0; | ||
13 | opacity: 0.375; | ||
14 | position: fixed; | ||
15 | top: 0; | ||
16 | width: 100%; | ||
17 | z-index: 1; | ||
18 | |||
19 | div { | ||
20 | @include vendor('transition', ('opacity #{_duration(bg-transition)} ease')); | ||
21 | background-size: cover; | ||
22 | height: 100%; | ||
23 | left: 0; | ||
24 | opacity: 0; | ||
25 | position: absolute; | ||
26 | top: 0; | ||
27 | visibility: hidden; | ||
28 | width: 150%; | ||
29 | |||
30 | &.visible { | ||
31 | @include vendor('animation', 'bg #{_duration(bg-slide)} linear infinite'); | ||
32 | opacity: 1; | ||
33 | visibility: visible; | ||
34 | z-index: 1; | ||
35 | |||
36 | &.top { | ||
37 | z-index: 2; | ||
38 | } | ||
39 | |||
40 | @include breakpoint('<=large') { | ||
41 | @include vendor('animation', 'bg #{_duration(bg-slide) * 0.65} linear infinite'); | ||
42 | } | ||
43 | |||
44 | @include breakpoint('<=small') { | ||
45 | @include vendor('animation', 'bg #{_duration(bg-slide) * 0.4} linear infinite'); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | &:only-child { | ||
50 | @include vendor('animation-direction', 'alternate !important'); | ||
51 | } | ||
52 | } | ||
53 | |||
54 | body.is-preload & { | ||
55 | opacity: 0; | ||
56 | } | ||
57 | } | ||
58 | |||
59 | @include keyframes(bg) { | ||
60 | 0% { | ||
61 | @include vendor('transform', 'translateX(0)'); | ||
62 | } | ||
63 | |||
64 | 100% { | ||
65 | @include vendor('transform', 'translateX(-25%)'); | ||
66 | } | ||
67 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/base/_page.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Basic */ | ||
8 | |||
9 | // MSIE: Required for IEMobile. | ||
10 | @-ms-viewport { | ||
11 | width: device-width; | ||
12 | } | ||
13 | |||
14 | // MSIE: Prevents scrollbar from overlapping content. | ||
15 | body { | ||
16 | -ms-overflow-style: scrollbar; | ||
17 | } | ||
18 | |||
19 | // Ensures page width is always >=320px. | ||
20 | @include breakpoint('<=xsmall') { | ||
21 | html, body { | ||
22 | min-width: 320px; | ||
23 | } | ||
24 | } | ||
25 | |||
26 | // Set box model to border-box. | ||
27 | // Based on css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice | ||
28 | html { | ||
29 | box-sizing: border-box; | ||
30 | } | ||
31 | |||
32 | *, *:before, *:after { | ||
33 | box-sizing: inherit; | ||
34 | } | ||
35 | |||
36 | html, body { | ||
37 | height: 100%; | ||
38 | overflow-x: hidden; | ||
39 | width: 100%; | ||
40 | |||
41 | @include breakpoint('short') { | ||
42 | height: auto; | ||
43 | min-height: 100%; | ||
44 | } | ||
45 | } | ||
46 | |||
47 | body { | ||
48 | @include vendor('display', 'flex'); | ||
49 | @include vendor('flex-direction', 'column'); | ||
50 | @include vendor('justify-content', 'center'); | ||
51 | background-color: _palette(bg); | ||
52 | padding: 6em 4em 4em 4em; | ||
53 | |||
54 | // Stops initial animations until page loads. | ||
55 | &.is-preload { | ||
56 | *, *:before, *:after { | ||
57 | @include vendor('animation', 'none !important'); | ||
58 | @include vendor('transition', 'none !important'); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | > * { | ||
63 | position: relative; | ||
64 | z-index: 2; | ||
65 | } | ||
66 | |||
67 | @include breakpoint('<=xlarge') { | ||
68 | padding: 6em 3.5em 3.5em 3.5em; | ||
69 | } | ||
70 | |||
71 | @include breakpoint('<=small') { | ||
72 | padding: 5em 2em 2em 2em; | ||
73 | } | ||
74 | |||
75 | @include breakpoint('<=xxsmall') { | ||
76 | padding: 5em 1.25em 1.25em 1.25em; | ||
77 | } | ||
78 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/base/_reset.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | // Reset. | ||
8 | // Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain) | ||
9 | |||
10 | html, body, div, span, applet, object, | ||
11 | iframe, h1, h2, h3, h4, h5, h6, p, blockquote, | ||
12 | pre, a, abbr, acronym, address, big, cite, | ||
13 | code, del, dfn, em, img, ins, kbd, q, s, samp, | ||
14 | small, strike, strong, sub, sup, tt, var, b, | ||
15 | u, i, center, dl, dt, dd, ol, ul, li, fieldset, | ||
16 | form, label, legend, table, caption, tbody, | ||
17 | tfoot, thead, tr, th, td, article, aside, | ||
18 | canvas, details, embed, figure, figcaption, | ||
19 | footer, header, hgroup, menu, nav, output, ruby, | ||
20 | section, summary, time, mark, audio, video { | ||
21 | margin: 0; | ||
22 | padding: 0; | ||
23 | border: 0; | ||
24 | font-size: 100%; | ||
25 | font: inherit; | ||
26 | vertical-align: baseline; | ||
27 | } | ||
28 | |||
29 | article, aside, details, figcaption, figure, | ||
30 | footer, header, hgroup, menu, nav, section { | ||
31 | display: block; | ||
32 | } | ||
33 | |||
34 | body { | ||
35 | line-height: 1; | ||
36 | } | ||
37 | |||
38 | ol, ul { | ||
39 | list-style:none; | ||
40 | } | ||
41 | |||
42 | blockquote, q { | ||
43 | quotes: none; | ||
44 | |||
45 | &:before, | ||
46 | &:after { | ||
47 | content: ''; | ||
48 | content: none; | ||
49 | } | ||
50 | } | ||
51 | |||
52 | table { | ||
53 | border-collapse: collapse; | ||
54 | border-spacing: 0; | ||
55 | } | ||
56 | |||
57 | body { | ||
58 | -webkit-text-size-adjust: none; | ||
59 | } | ||
60 | |||
61 | mark { | ||
62 | background-color: transparent; | ||
63 | color: inherit; | ||
64 | } | ||
65 | |||
66 | input::-moz-focus-inner { | ||
67 | border: 0; | ||
68 | padding: 0; | ||
69 | } | ||
70 | |||
71 | input, select, textarea { | ||
72 | -moz-appearance: none; | ||
73 | -webkit-appearance: none; | ||
74 | -ms-appearance: none; | ||
75 | appearance: none; | ||
76 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/base/_typography.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Type */ | ||
8 | |||
9 | body, input, select, textarea { | ||
10 | color: _palette(fg); | ||
11 | font-family: _font(family); | ||
12 | font-size: 16pt; | ||
13 | font-weight: _font(weight); | ||
14 | letter-spacing: _font(letter-spacing); | ||
15 | line-height: 1.65em; | ||
16 | |||
17 | @include breakpoint('<=xlarge') { | ||
18 | font-size: 12pt; | ||
19 | } | ||
20 | |||
21 | @include breakpoint('<=large') { | ||
22 | font-size: 11pt; | ||
23 | } | ||
24 | |||
25 | @include breakpoint('<=medium') { | ||
26 | font-size: 12pt; | ||
27 | } | ||
28 | |||
29 | @include breakpoint('<=small') { | ||
30 | font-size: 12pt; | ||
31 | } | ||
32 | |||
33 | @include breakpoint('<=xsmall') { | ||
34 | font-size: 12pt; | ||
35 | } | ||
36 | } | ||
37 | |||
38 | a { | ||
39 | @include vendor('transition', ( | ||
40 | 'border-bottom-color #{_duration(transition)} ease', | ||
41 | 'color #{_duration(transition)} ease' | ||
42 | )); | ||
43 | border-bottom: dotted 1px _palette(border2); | ||
44 | color: _palette(accent, bg); | ||
45 | text-decoration: none; | ||
46 | |||
47 | &:hover { | ||
48 | border-bottom-color: transparent; | ||
49 | color: _palette(accent, bg) !important; | ||
50 | text-decoration: none; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | strong, b { | ||
55 | color: _palette(fg-bold); | ||
56 | font-weight: _font(weight-bold); | ||
57 | } | ||
58 | |||
59 | em, i { | ||
60 | font-style: italic; | ||
61 | } | ||
62 | |||
63 | p { | ||
64 | margin: 0 0 _size(element-margin) 0; | ||
65 | } | ||
66 | |||
67 | h1, h2, h3, h4, h5, h6 { | ||
68 | color: _palette(fg-bold); | ||
69 | font-weight: _font(weight-bold); | ||
70 | line-height: 1em; | ||
71 | margin: 0 0 (_size(element-margin) * 0.5) 0; | ||
72 | |||
73 | a { | ||
74 | color: inherit; | ||
75 | text-decoration: none; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | h1 { | ||
80 | font-size: 2.5em; | ||
81 | line-height: 1.25em; | ||
82 | } | ||
83 | |||
84 | h2 { | ||
85 | font-size: 1.75em; | ||
86 | line-height: 1.5em; | ||
87 | } | ||
88 | |||
89 | h3 { | ||
90 | font-size: 1.35em; | ||
91 | line-height: 1.5em; | ||
92 | } | ||
93 | |||
94 | h4 { | ||
95 | font-size: 1.1em; | ||
96 | line-height: 1.5em; | ||
97 | } | ||
98 | |||
99 | h5 { | ||
100 | font-size: 0.9em; | ||
101 | line-height: 1.5em; | ||
102 | } | ||
103 | |||
104 | h6 { | ||
105 | font-size: 0.7em; | ||
106 | line-height: 1.5em; | ||
107 | } | ||
108 | |||
109 | sub { | ||
110 | font-size: 0.8em; | ||
111 | position: relative; | ||
112 | top: 0.5em; | ||
113 | } | ||
114 | |||
115 | sup { | ||
116 | font-size: 0.8em; | ||
117 | position: relative; | ||
118 | top: -0.5em; | ||
119 | } | ||
120 | |||
121 | blockquote { | ||
122 | border-left: solid (_size(border-width) * 4) _palette(border); | ||
123 | font-style: italic; | ||
124 | margin: 0 0 _size(element-margin) 0; | ||
125 | padding: (_size(element-margin) / 4) 0 (_size(element-margin) / 4) _size(element-margin); | ||
126 | } | ||
127 | |||
128 | code { | ||
129 | background: _palette(border-bg); | ||
130 | border-radius: _size(border-radius); | ||
131 | border: solid _size(border-width) _palette(border); | ||
132 | font-family: _font(family-fixed); | ||
133 | font-size: 0.9em; | ||
134 | margin: 0 0.25em; | ||
135 | padding: 0.25em 0.65em; | ||
136 | } | ||
137 | |||
138 | pre { | ||
139 | -webkit-overflow-scrolling: touch; | ||
140 | font-family: _font(family-fixed); | ||
141 | font-size: 0.9em; | ||
142 | margin: 0 0 _size(element-margin) 0; | ||
143 | |||
144 | code { | ||
145 | display: block; | ||
146 | line-height: 1.75em; | ||
147 | padding: 1em 1.5em; | ||
148 | overflow-x: auto; | ||
149 | } | ||
150 | } | ||
151 | |||
152 | hr { | ||
153 | border: 0; | ||
154 | border-bottom: solid _size(border-width) _palette(border); | ||
155 | margin: _size(element-margin) 0; | ||
156 | |||
157 | &.major { | ||
158 | margin: (_size(element-margin) * 1.5) 0; | ||
159 | } | ||
160 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/components/_button.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Button */ | ||
8 | |||
9 | input[type="submit"], | ||
10 | input[type="reset"], | ||
11 | input[type="button"], | ||
12 | button, | ||
13 | .button { | ||
14 | @include vendor('appearance', 'none'); | ||
15 | @include vendor('transition', ( | ||
16 | 'background-color #{_duration(transition)} ease-in-out', | ||
17 | 'color #{_duration(transition)} ease-in-out', | ||
18 | 'opacity #{_duration(transition)} ease-in-out' | ||
19 | )); | ||
20 | background-color: _palette(accent, bg); | ||
21 | border-radius: _size(border-radius); | ||
22 | border: 0; | ||
23 | color: _palette(accent, fg-bold) !important; | ||
24 | cursor: pointer; | ||
25 | display: inline-block; | ||
26 | font-weight: _font(weight-bold); | ||
27 | height: _size(element-height); | ||
28 | line-height: _size(element-height); | ||
29 | padding: 0 1.125em; | ||
30 | text-align: center; | ||
31 | text-decoration: none; | ||
32 | white-space: nowrap; | ||
33 | |||
34 | &:hover { | ||
35 | background-color: lighten(_palette(accent, bg), 5); | ||
36 | } | ||
37 | |||
38 | &:active { | ||
39 | background-color: darken(_palette(accent, bg), 5); | ||
40 | } | ||
41 | |||
42 | &.disabled, | ||
43 | &:disabled { | ||
44 | opacity: 0.5; | ||
45 | } | ||
46 | |||
47 | @include breakpoint('<=xsmall') { | ||
48 | padding: 0; | ||
49 | } | ||
50 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/components/_form.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Form */ | ||
8 | |||
9 | form { | ||
10 | margin: 0 0 _size(element-margin) 0; | ||
11 | |||
12 | .message { | ||
13 | @include icon(false, solid); | ||
14 | @include vendor('transition', ( | ||
15 | 'opacity #{_duration(transition)} ease-in-out', | ||
16 | 'transform #{_duration(transition)} ease-in-out' | ||
17 | )); | ||
18 | @include vendor('transform', 'scale(1.05)'); | ||
19 | height: _size(element-height); | ||
20 | line-height: _size(element-height); | ||
21 | opacity: 0; | ||
22 | |||
23 | &:before { | ||
24 | margin-right: 0.5em; | ||
25 | } | ||
26 | |||
27 | &.visible { | ||
28 | @include vendor('transform', 'scale(1)'); | ||
29 | opacity: 1; | ||
30 | } | ||
31 | |||
32 | &.success { | ||
33 | color: _palette(positive, bg); | ||
34 | |||
35 | &:before { | ||
36 | content: '\f00c'; | ||
37 | } | ||
38 | } | ||
39 | |||
40 | &.failure { | ||
41 | color: _palette(negative, bg); | ||
42 | |||
43 | &:before { | ||
44 | content: '\f119'; | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | } | ||
49 | |||
50 | label { | ||
51 | color: _palette(fg-bold); | ||
52 | display: block; | ||
53 | font-size: 0.9em; | ||
54 | font-weight: _font(weight-bold); | ||
55 | margin: 0 0 (_size(element-margin) * 0.5) 0; | ||
56 | } | ||
57 | |||
58 | @include keyframes(focus) { | ||
59 | 0% { @include vendor('transform', 'scale(1)'); } | ||
60 | 50% { @include vendor('transform', 'scale(1.025)'); } | ||
61 | 100% { @include vendor('transform', 'scale(1)'); } | ||
62 | } | ||
63 | |||
64 | input[type="text"], | ||
65 | input[type="password"], | ||
66 | input[type="email"], | ||
67 | select, | ||
68 | textarea { | ||
69 | @include vendor('appearance', 'none'); | ||
70 | @include vendor('transform', 'scale(1)'); | ||
71 | @include vendor('transition', ( | ||
72 | 'border-color #{_duration(transition)} ease', | ||
73 | 'background-color #{_duration(transition)} ease' | ||
74 | )); | ||
75 | background-color: transparent; | ||
76 | border-radius: _size(border-radius); | ||
77 | border: none; | ||
78 | border: solid _size(border-width) _palette(border); | ||
79 | color: inherit; | ||
80 | display: block; | ||
81 | outline: 0; | ||
82 | padding: 0 1em; | ||
83 | text-decoration: none; | ||
84 | width: 100%; | ||
85 | |||
86 | &:invalid { | ||
87 | box-shadow: none; | ||
88 | } | ||
89 | |||
90 | &:focus { | ||
91 | @include vendor('animation', 'focus 0.1s'); | ||
92 | background-color: _palette(border-bg); | ||
93 | border-color: _palette(accent, bg); | ||
94 | } | ||
95 | } | ||
96 | |||
97 | select { | ||
98 | background-image: svg-url("<svg xmlns='http://www.w3.org/2000/svg' width='40' height='40' preserveAspectRatio='none' viewBox='0 0 40 40'><path d='M9.4,12.3l10.4,10.4l10.4-10.4c0.2-0.2,0.5-0.4,0.9-0.4c0.3,0,0.6,0.1,0.9,0.4l3.3,3.3c0.2,0.2,0.4,0.5,0.4,0.9 c0,0.4-0.1,0.6-0.4,0.9L20.7,31.9c-0.2,0.2-0.5,0.4-0.9,0.4c-0.3,0-0.6-0.1-0.9-0.4L4.3,17.3c-0.2-0.2-0.4-0.5-0.4-0.9 c0-0.4,0.1-0.6,0.4-0.9l3.3-3.3c0.2-0.2,0.5-0.4,0.9-0.4S9.1,12.1,9.4,12.3z' fill='#{_palette(border)}' /></svg>"); | ||
99 | background-size: 1.25rem; | ||
100 | background-repeat: no-repeat; | ||
101 | background-position: calc(100% - 1rem) center; | ||
102 | height: _size(element-height); | ||
103 | padding-right: _size(element-height); | ||
104 | text-overflow: ellipsis; | ||
105 | |||
106 | option { | ||
107 | color: _palette(fg-bold); | ||
108 | background: _palette(bg); | ||
109 | } | ||
110 | |||
111 | &:focus { | ||
112 | &::-ms-value { | ||
113 | background-color: transparent; | ||
114 | } | ||
115 | } | ||
116 | |||
117 | &::-ms-expand { | ||
118 | display: none; | ||
119 | } | ||
120 | } | ||
121 | |||
122 | input[type="text"], | ||
123 | input[type="password"], | ||
124 | input[type="email"], | ||
125 | select { | ||
126 | height: _size(element-height); | ||
127 | } | ||
128 | |||
129 | textarea { | ||
130 | padding: 0.75em 1em; | ||
131 | } | ||
132 | |||
133 | input[type="checkbox"], | ||
134 | input[type="radio"], { | ||
135 | @include vendor('appearance', 'none'); | ||
136 | display: block; | ||
137 | float: left; | ||
138 | margin-right: -2em; | ||
139 | opacity: 0; | ||
140 | width: 1em; | ||
141 | z-index: -1; | ||
142 | |||
143 | & + label { | ||
144 | @include icon(false, solid); | ||
145 | color: _palette(fg); | ||
146 | cursor: pointer; | ||
147 | display: inline-block; | ||
148 | font-size: 1em; | ||
149 | font-weight: _font(weight); | ||
150 | padding-left: (_size(element-height) * 0.6) + 0.75em; | ||
151 | padding-right: 0.75em; | ||
152 | position: relative; | ||
153 | |||
154 | &:before { | ||
155 | background: _palette(border-bg); | ||
156 | border-radius: _size(border-radius); | ||
157 | border: solid _size(border-width) _palette(border); | ||
158 | content: ''; | ||
159 | display: inline-block; | ||
160 | font-size: 0.8em; | ||
161 | height: (_size(element-height) * 0.6); | ||
162 | left: 0; | ||
163 | line-height: (_size(element-height) * 0.6); | ||
164 | position: absolute; | ||
165 | text-align: center; | ||
166 | top: 0; | ||
167 | width: (_size(element-height) * 0.6); | ||
168 | } | ||
169 | } | ||
170 | |||
171 | &:checked + label { | ||
172 | &:before { | ||
173 | background: _palette(accent, bg); | ||
174 | border-color: _palette(accent, bg); | ||
175 | color: _palette(accent, fg-bold); | ||
176 | content: '\f00c'; | ||
177 | } | ||
178 | } | ||
179 | |||
180 | &:focus + label { | ||
181 | &:before { | ||
182 | border-color: _palette(accent, bg); | ||
183 | box-shadow: 0 0 0 _size(border-width) _palette(accent, bg); | ||
184 | } | ||
185 | } | ||
186 | } | ||
187 | |||
188 | input[type="checkbox"] { | ||
189 | & + label { | ||
190 | &:before { | ||
191 | border-radius: _size(border-radius); | ||
192 | } | ||
193 | } | ||
194 | } | ||
195 | |||
196 | input[type="radio"] { | ||
197 | & + label { | ||
198 | &:before { | ||
199 | border-radius: 100%; | ||
200 | } | ||
201 | } | ||
202 | } | ||
203 | |||
204 | ::-webkit-input-placeholder { | ||
205 | color: _palette(fg-light) !important; | ||
206 | opacity: 1.0; | ||
207 | } | ||
208 | |||
209 | :-moz-placeholder { | ||
210 | color: _palette(fg-light) !important; | ||
211 | opacity: 1.0; | ||
212 | } | ||
213 | |||
214 | ::-moz-placeholder { | ||
215 | color: _palette(fg-light) !important; | ||
216 | opacity: 1.0; | ||
217 | } | ||
218 | |||
219 | :-ms-input-placeholder { | ||
220 | color: _palette(fg-light) !important; | ||
221 | opacity: 1.0; | ||
222 | } | ||
223 | |||
224 | .formerize-placeholder { | ||
225 | color: _palette(fg-light) !important; | ||
226 | opacity: 1.0; | ||
227 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/components/_icon.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Icon */ | ||
8 | |||
9 | .icon { | ||
10 | @include icon; | ||
11 | border-bottom: none; | ||
12 | position: relative; | ||
13 | |||
14 | > .label { | ||
15 | display: none; | ||
16 | } | ||
17 | |||
18 | &:before { | ||
19 | line-height: inherit; | ||
20 | } | ||
21 | |||
22 | &.solid { | ||
23 | &:before { | ||
24 | font-weight: 900; | ||
25 | } | ||
26 | } | ||
27 | |||
28 | &.brands { | ||
29 | &:before { | ||
30 | font-family: 'Font Awesome 5 Brands'; | ||
31 | } | ||
32 | } | ||
33 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/components/_icons.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Icons */ | ||
8 | |||
9 | ul.icons { | ||
10 | cursor: default; | ||
11 | list-style: none; | ||
12 | padding-left: 0; | ||
13 | |||
14 | li { | ||
15 | display: inline-block; | ||
16 | padding: 0 1em 0 0; | ||
17 | |||
18 | &:last-child { | ||
19 | padding-right: 0; | ||
20 | } | ||
21 | |||
22 | .icon { | ||
23 | &:before { | ||
24 | font-size: 1.25em; | ||
25 | } | ||
26 | } | ||
27 | |||
28 | a { | ||
29 | color: inherit; | ||
30 | } | ||
31 | } | ||
32 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/components/_list.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* List */ | ||
8 | |||
9 | ol { | ||
10 | list-style: decimal; | ||
11 | margin: 0 0 _size(element-margin) 0; | ||
12 | padding-left: 1.25em; | ||
13 | |||
14 | li { | ||
15 | padding-left: 0.25em; | ||
16 | } | ||
17 | } | ||
18 | |||
19 | ul { | ||
20 | list-style: disc; | ||
21 | margin: 0 0 _size(element-margin) 0; | ||
22 | padding-left: 1em; | ||
23 | |||
24 | li { | ||
25 | padding-left: 0.5em; | ||
26 | } | ||
27 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/components/_section.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Section/Article */ | ||
8 | |||
9 | section, article { | ||
10 | &.special { | ||
11 | text-align: center; | ||
12 | } | ||
13 | } | ||
14 | |||
15 | header { | ||
16 | p { | ||
17 | color: _palette(fg-light); | ||
18 | position: relative; | ||
19 | margin: 0 0 (_size(element-margin) * 0.75) 0; | ||
20 | } | ||
21 | |||
22 | h2 + p { | ||
23 | font-size: 1.25em; | ||
24 | margin-top: (_size(element-margin) * -0.5); | ||
25 | line-height: 1.5em; | ||
26 | } | ||
27 | |||
28 | h3 + p { | ||
29 | font-size: 1.1em; | ||
30 | margin-top: (_size(element-margin) * -0.4); | ||
31 | line-height: 1.5em; | ||
32 | } | ||
33 | |||
34 | h4 + p, | ||
35 | h5 + p, | ||
36 | h6 + p { | ||
37 | font-size: 0.9em; | ||
38 | margin-top: (_size(element-margin) * -0.3); | ||
39 | line-height: 1.5em; | ||
40 | } | ||
41 | |||
42 | @include breakpoint('<=medium') { | ||
43 | br { | ||
44 | display: none; | ||
45 | } | ||
46 | } | ||
47 | |||
48 | @include breakpoint('<=small') { | ||
49 | br { | ||
50 | display: inline; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | @include breakpoint('<=xsmall') { | ||
55 | br { | ||
56 | display: none; | ||
57 | } | ||
58 | } | ||
59 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/layout/_footer.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Footer */ | ||
8 | |||
9 | #footer { | ||
10 | @include vendor('transition', 'opacity 0.5s ease-in-out'); | ||
11 | bottom: 4em; | ||
12 | color: _palette(fg-light); | ||
13 | left: 4em; | ||
14 | opacity: 0.5; | ||
15 | position: absolute; | ||
16 | |||
17 | .icons { | ||
18 | margin: 0 0 (_size(element-margin) * 0.25) 0; | ||
19 | } | ||
20 | |||
21 | .copyright { | ||
22 | font-size: 0.8em; | ||
23 | list-style: none; | ||
24 | padding: 0; | ||
25 | |||
26 | li { | ||
27 | border-left: solid 1px _palette(border2); | ||
28 | display: inline-block; | ||
29 | line-height: 1em; | ||
30 | margin: 0 0 0 0.75em; | ||
31 | padding: 0 0 0 0.75em; | ||
32 | |||
33 | &:first-child { | ||
34 | border-left: 0; | ||
35 | margin-left: 0; | ||
36 | padding-left: 0; | ||
37 | } | ||
38 | } | ||
39 | |||
40 | a { | ||
41 | color: inherit; | ||
42 | } | ||
43 | } | ||
44 | |||
45 | &:hover { | ||
46 | opacity: 1; | ||
47 | } | ||
48 | |||
49 | > :last-child { | ||
50 | margin-bottom: 0; | ||
51 | } | ||
52 | |||
53 | @include breakpoint('<=xlarge') { | ||
54 | bottom: 3.5em; | ||
55 | left: 3.5em; | ||
56 | } | ||
57 | |||
58 | @include breakpoint('<=small') { | ||
59 | bottom: 2em; | ||
60 | left: 2em; | ||
61 | } | ||
62 | |||
63 | @include breakpoint('<=xxsmall') { | ||
64 | bottom: 1.25em; | ||
65 | left: 1.25em; | ||
66 | } | ||
67 | |||
68 | @include breakpoint('short') { | ||
69 | bottom: auto; | ||
70 | left: auto; | ||
71 | margin: (_size(element-margin) * 0.5) 0 0 0; | ||
72 | position: relative; | ||
73 | } | ||
74 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/layout/_header.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Header */ | ||
8 | |||
9 | #header { | ||
10 | h1 { | ||
11 | font-size: 3.25em; | ||
12 | margin: 0 0 (_size(element-margin) * 0.275) 0; | ||
13 | } | ||
14 | |||
15 | p { | ||
16 | font-size: 1.35em; | ||
17 | line-height: 1.65em; | ||
18 | } | ||
19 | |||
20 | a { | ||
21 | color: inherit; | ||
22 | } | ||
23 | |||
24 | @include breakpoint('<=small') { | ||
25 | h1 { | ||
26 | font-size: 2em; | ||
27 | } | ||
28 | |||
29 | p { | ||
30 | font-size: 1em; | ||
31 | } | ||
32 | } | ||
33 | |||
34 | @include breakpoint('<=xsmall') { | ||
35 | margin: 0 0 (_size(element-margin) * 0.5) 0; | ||
36 | } | ||
37 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/layout/_signup-form.scss
0 → 100644
1 | /// | ||
2 | /// Eventually by HTML5 UP | ||
3 | /// html5up.net | @ajlkn | ||
4 | /// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
5 | /// | ||
6 | |||
7 | /* Signup Form */ | ||
8 | |||
9 | #signup-form { | ||
10 | @include vendor('display', 'flex'); | ||
11 | position: relative; | ||
12 | |||
13 | input[type="text"], | ||
14 | input[type="password"], | ||
15 | input[type="email"] { | ||
16 | width: 18em; | ||
17 | } | ||
18 | |||
19 | > * { | ||
20 | margin: 0 0 0 1em; | ||
21 | } | ||
22 | |||
23 | > :first-child { | ||
24 | margin: 0 0 0 0; | ||
25 | } | ||
26 | |||
27 | @include breakpoint('<=xsmall') { | ||
28 | @include vendor('flex-direction', 'column'); | ||
29 | |||
30 | input[type="type"], | ||
31 | input[type="password"], | ||
32 | input[type="email"] { | ||
33 | width: 100%; | ||
34 | } | ||
35 | |||
36 | > * { | ||
37 | margin: 1.25em 0 0 0; | ||
38 | } | ||
39 | |||
40 | .message { | ||
41 | bottom: -1.5em; | ||
42 | font-size: 0.9em; | ||
43 | height: 1em; | ||
44 | left: 0; | ||
45 | line-height: inherit; | ||
46 | margin-top: 0; | ||
47 | position: absolute; | ||
48 | } | ||
49 | } | ||
50 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/libs/_breakpoints.scss
0 → 100644
1 | // breakpoints.scss v1.0 | @ajlkn | MIT licensed */ | ||
2 | |||
3 | // Vars. | ||
4 | |||
5 | /// Breakpoints. | ||
6 | /// @var {list} | ||
7 | $breakpoints: () !global; | ||
8 | |||
9 | // Mixins. | ||
10 | |||
11 | /// Sets breakpoints. | ||
12 | /// @param {map} $x Breakpoints. | ||
13 | @mixin breakpoints($x: ()) { | ||
14 | $breakpoints: $x !global; | ||
15 | } | ||
16 | |||
17 | /// Wraps @content in a @media block targeting a specific orientation. | ||
18 | /// @param {string} $orientation Orientation. | ||
19 | @mixin orientation($orientation) { | ||
20 | @media screen and (orientation: #{$orientation}) { | ||
21 | @content; | ||
22 | } | ||
23 | } | ||
24 | |||
25 | /// Wraps @content in a @media block using a given query. | ||
26 | /// @param {string} $query Query. | ||
27 | @mixin breakpoint($query: null) { | ||
28 | |||
29 | $breakpoint: null; | ||
30 | $op: null; | ||
31 | $media: null; | ||
32 | |||
33 | // Determine operator, breakpoint. | ||
34 | |||
35 | // Greater than or equal. | ||
36 | @if (str-slice($query, 0, 2) == '>=') { | ||
37 | |||
38 | $op: 'gte'; | ||
39 | $breakpoint: str-slice($query, 3); | ||
40 | |||
41 | } | ||
42 | |||
43 | // Less than or equal. | ||
44 | @elseif (str-slice($query, 0, 2) == '<=') { | ||
45 | |||
46 | $op: 'lte'; | ||
47 | $breakpoint: str-slice($query, 3); | ||
48 | |||
49 | } | ||
50 | |||
51 | // Greater than. | ||
52 | @elseif (str-slice($query, 0, 1) == '>') { | ||
53 | |||
54 | $op: 'gt'; | ||
55 | $breakpoint: str-slice($query, 2); | ||
56 | |||
57 | } | ||
58 | |||
59 | // Less than. | ||
60 | @elseif (str-slice($query, 0, 1) == '<') { | ||
61 | |||
62 | $op: 'lt'; | ||
63 | $breakpoint: str-slice($query, 2); | ||
64 | |||
65 | } | ||
66 | |||
67 | // Not. | ||
68 | @elseif (str-slice($query, 0, 1) == '!') { | ||
69 | |||
70 | $op: 'not'; | ||
71 | $breakpoint: str-slice($query, 2); | ||
72 | |||
73 | } | ||
74 | |||
75 | // Equal. | ||
76 | @else { | ||
77 | |||
78 | $op: 'eq'; | ||
79 | $breakpoint: $query; | ||
80 | |||
81 | } | ||
82 | |||
83 | // Build media. | ||
84 | @if ($breakpoint and map-has-key($breakpoints, $breakpoint)) { | ||
85 | |||
86 | $a: map-get($breakpoints, $breakpoint); | ||
87 | |||
88 | // Range. | ||
89 | @if (type-of($a) == 'list') { | ||
90 | |||
91 | $x: nth($a, 1); | ||
92 | $y: nth($a, 2); | ||
93 | |||
94 | // Max only. | ||
95 | @if ($x == null) { | ||
96 | |||
97 | // Greater than or equal (>= 0 / anything) | ||
98 | @if ($op == 'gte') { | ||
99 | $media: 'screen'; | ||
100 | } | ||
101 | |||
102 | // Less than or equal (<= y) | ||
103 | @elseif ($op == 'lte') { | ||
104 | $media: 'screen and (max-width: ' + $y + ')'; | ||
105 | } | ||
106 | |||
107 | // Greater than (> y) | ||
108 | @elseif ($op == 'gt') { | ||
109 | $media: 'screen and (min-width: ' + ($y + 1) + ')'; | ||
110 | } | ||
111 | |||
112 | // Less than (< 0 / invalid) | ||
113 | @elseif ($op == 'lt') { | ||
114 | $media: 'screen and (max-width: -1px)'; | ||
115 | } | ||
116 | |||
117 | // Not (> y) | ||
118 | @elseif ($op == 'not') { | ||
119 | $media: 'screen and (min-width: ' + ($y + 1) + ')'; | ||
120 | } | ||
121 | |||
122 | // Equal (<= y) | ||
123 | @else { | ||
124 | $media: 'screen and (max-width: ' + $y + ')'; | ||
125 | } | ||
126 | |||
127 | } | ||
128 | |||
129 | // Min only. | ||
130 | @else if ($y == null) { | ||
131 | |||
132 | // Greater than or equal (>= x) | ||
133 | @if ($op == 'gte') { | ||
134 | $media: 'screen and (min-width: ' + $x + ')'; | ||
135 | } | ||
136 | |||
137 | // Less than or equal (<= inf / anything) | ||
138 | @elseif ($op == 'lte') { | ||
139 | $media: 'screen'; | ||
140 | } | ||
141 | |||
142 | // Greater than (> inf / invalid) | ||
143 | @elseif ($op == 'gt') { | ||
144 | $media: 'screen and (max-width: -1px)'; | ||
145 | } | ||
146 | |||
147 | // Less than (< x) | ||
148 | @elseif ($op == 'lt') { | ||
149 | $media: 'screen and (max-width: ' + ($x - 1) + ')'; | ||
150 | } | ||
151 | |||
152 | // Not (< x) | ||
153 | @elseif ($op == 'not') { | ||
154 | $media: 'screen and (max-width: ' + ($x - 1) + ')'; | ||
155 | } | ||
156 | |||
157 | // Equal (>= x) | ||
158 | @else { | ||
159 | $media: 'screen and (min-width: ' + $x + ')'; | ||
160 | } | ||
161 | |||
162 | } | ||
163 | |||
164 | // Min and max. | ||
165 | @else { | ||
166 | |||
167 | // Greater than or equal (>= x) | ||
168 | @if ($op == 'gte') { | ||
169 | $media: 'screen and (min-width: ' + $x + ')'; | ||
170 | } | ||
171 | |||
172 | // Less than or equal (<= y) | ||
173 | @elseif ($op == 'lte') { | ||
174 | $media: 'screen and (max-width: ' + $y + ')'; | ||
175 | } | ||
176 | |||
177 | // Greater than (> y) | ||
178 | @elseif ($op == 'gt') { | ||
179 | $media: 'screen and (min-width: ' + ($y + 1) + ')'; | ||
180 | } | ||
181 | |||
182 | // Less than (< x) | ||
183 | @elseif ($op == 'lt') { | ||
184 | $media: 'screen and (max-width: ' + ($x - 1) + ')'; | ||
185 | } | ||
186 | |||
187 | // Not (< x and > y) | ||
188 | @elseif ($op == 'not') { | ||
189 | $media: 'screen and (max-width: ' + ($x - 1) + '), screen and (min-width: ' + ($y + 1) + ')'; | ||
190 | } | ||
191 | |||
192 | // Equal (>= x and <= y) | ||
193 | @else { | ||
194 | $media: 'screen and (min-width: ' + $x + ') and (max-width: ' + $y + ')'; | ||
195 | } | ||
196 | |||
197 | } | ||
198 | |||
199 | } | ||
200 | |||
201 | // String. | ||
202 | @else { | ||
203 | |||
204 | // Missing a media type? Prefix with "screen". | ||
205 | @if (str-slice($a, 0, 1) == '(') { | ||
206 | $media: 'screen and ' + $a; | ||
207 | } | ||
208 | |||
209 | // Otherwise, use as-is. | ||
210 | @else { | ||
211 | $media: $a; | ||
212 | } | ||
213 | |||
214 | } | ||
215 | |||
216 | } | ||
217 | |||
218 | // Output. | ||
219 | @media #{$media} { | ||
220 | @content; | ||
221 | } | ||
222 | |||
223 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/libs/_functions.scss
0 → 100644
1 | /// Removes a specific item from a list. | ||
2 | /// @author Hugo Giraudel | ||
3 | /// @param {list} $list List. | ||
4 | /// @param {integer} $index Index. | ||
5 | /// @return {list} Updated list. | ||
6 | @function remove-nth($list, $index) { | ||
7 | |||
8 | $result: null; | ||
9 | |||
10 | @if type-of($index) != number { | ||
11 | @warn "$index: #{quote($index)} is not a number for `remove-nth`."; | ||
12 | } | ||
13 | @else if $index == 0 { | ||
14 | @warn "List index 0 must be a non-zero integer for `remove-nth`."; | ||
15 | } | ||
16 | @else if abs($index) > length($list) { | ||
17 | @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; | ||
18 | } | ||
19 | @else { | ||
20 | |||
21 | $result: (); | ||
22 | $index: if($index < 0, length($list) + $index + 1, $index); | ||
23 | |||
24 | @for $i from 1 through length($list) { | ||
25 | |||
26 | @if $i != $index { | ||
27 | $result: append($result, nth($list, $i)); | ||
28 | } | ||
29 | |||
30 | } | ||
31 | |||
32 | } | ||
33 | |||
34 | @return $result; | ||
35 | |||
36 | } | ||
37 | |||
38 | /// Gets a value from a map. | ||
39 | /// @author Hugo Giraudel | ||
40 | /// @param {map} $map Map. | ||
41 | /// @param {string} $keys Key(s). | ||
42 | /// @return {string} Value. | ||
43 | @function val($map, $keys...) { | ||
44 | |||
45 | @if nth($keys, 1) == null { | ||
46 | $keys: remove-nth($keys, 1); | ||
47 | } | ||
48 | |||
49 | @each $key in $keys { | ||
50 | $map: map-get($map, $key); | ||
51 | } | ||
52 | |||
53 | @return $map; | ||
54 | |||
55 | } | ||
56 | |||
57 | /// Gets a duration value. | ||
58 | /// @param {string} $keys Key(s). | ||
59 | /// @return {string} Value. | ||
60 | @function _duration($keys...) { | ||
61 | @return val($duration, $keys...); | ||
62 | } | ||
63 | |||
64 | /// Gets a font value. | ||
65 | /// @param {string} $keys Key(s). | ||
66 | /// @return {string} Value. | ||
67 | @function _font($keys...) { | ||
68 | @return val($font, $keys...); | ||
69 | } | ||
70 | |||
71 | /// Gets a misc value. | ||
72 | /// @param {string} $keys Key(s). | ||
73 | /// @return {string} Value. | ||
74 | @function _misc($keys...) { | ||
75 | @return val($misc, $keys...); | ||
76 | } | ||
77 | |||
78 | /// Gets a palette value. | ||
79 | /// @param {string} $keys Key(s). | ||
80 | /// @return {string} Value. | ||
81 | @function _palette($keys...) { | ||
82 | @return val($palette, $keys...); | ||
83 | } | ||
84 | |||
85 | /// Gets a size value. | ||
86 | /// @param {string} $keys Key(s). | ||
87 | /// @return {string} Value. | ||
88 | @function _size($keys...) { | ||
89 | @return val($size, $keys...); | ||
90 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/libs/_mixins.scss
0 → 100644
1 | /// Makes an element's :before pseudoelement a FontAwesome icon. | ||
2 | /// @param {string} $content Optional content value to use. | ||
3 | /// @param {string} $category Optional category to use. | ||
4 | /// @param {string} $where Optional pseudoelement to target (before or after). | ||
5 | @mixin icon($content: false, $category: regular, $where: before) { | ||
6 | |||
7 | text-decoration: none; | ||
8 | |||
9 | &:#{$where} { | ||
10 | |||
11 | @if $content { | ||
12 | content: $content; | ||
13 | } | ||
14 | |||
15 | -moz-osx-font-smoothing: grayscale; | ||
16 | -webkit-font-smoothing: antialiased; | ||
17 | display: inline-block; | ||
18 | font-style: normal; | ||
19 | font-variant: normal; | ||
20 | text-rendering: auto; | ||
21 | line-height: 1; | ||
22 | text-transform: none !important; | ||
23 | |||
24 | @if ($category == brands) { | ||
25 | font-family: 'Font Awesome 5 Brands'; | ||
26 | } | ||
27 | @elseif ($category == solid) { | ||
28 | font-family: 'Font Awesome 5 Free'; | ||
29 | font-weight: 900; | ||
30 | } | ||
31 | @else { | ||
32 | font-family: 'Font Awesome 5 Free'; | ||
33 | font-weight: 400; | ||
34 | } | ||
35 | |||
36 | } | ||
37 | |||
38 | } | ||
39 | |||
40 | /// Applies padding to an element, taking the current element-margin value into account. | ||
41 | /// @param {mixed} $tb Top/bottom padding. | ||
42 | /// @param {mixed} $lr Left/right padding. | ||
43 | /// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left) | ||
44 | /// @param {bool} $important If true, adds !important. | ||
45 | @mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) { | ||
46 | |||
47 | @if $important { | ||
48 | $important: '!important'; | ||
49 | } | ||
50 | |||
51 | $x: 0.1em; | ||
52 | |||
53 | @if unit(_size(element-margin)) == 'rem' { | ||
54 | $x: 0.1rem; | ||
55 | } | ||
56 | |||
57 | padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important}; | ||
58 | |||
59 | } | ||
60 | |||
61 | /// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp). | ||
62 | /// @param {string} $svg SVG data URL. | ||
63 | /// @return {string} Encoded SVG data URL. | ||
64 | @function svg-url($svg) { | ||
65 | |||
66 | $svg: str-replace($svg, '"', '\''); | ||
67 | $svg: str-replace($svg, '%', '%25'); | ||
68 | $svg: str-replace($svg, '<', '%3C'); | ||
69 | $svg: str-replace($svg, '>', '%3E'); | ||
70 | $svg: str-replace($svg, '&', '%26'); | ||
71 | $svg: str-replace($svg, '#', '%23'); | ||
72 | $svg: str-replace($svg, '{', '%7B'); | ||
73 | $svg: str-replace($svg, '}', '%7D'); | ||
74 | $svg: str-replace($svg, ';', '%3B'); | ||
75 | |||
76 | @return url("data:image/svg+xml;charset=utf8,#{$svg}"); | ||
77 | |||
78 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/libs/_vars.scss
0 → 100644
1 | // Misc. | ||
2 | $misc: ( | ||
3 | ); | ||
4 | |||
5 | // Duration. | ||
6 | $duration: ( | ||
7 | nav: 0.5s, | ||
8 | transition: 0.2s, | ||
9 | bg-fadein: 2s, | ||
10 | bg-transition: 3s, | ||
11 | bg-slide: 45s // (lower = faster, higher = slower) | ||
12 | ); | ||
13 | |||
14 | // Size. | ||
15 | $size: ( | ||
16 | border-radius: 6px, | ||
17 | border-width: 2px, | ||
18 | element-height: 2.75em, | ||
19 | element-margin: 2em | ||
20 | ); | ||
21 | |||
22 | // Font. | ||
23 | $font: ( | ||
24 | family: ('Roboto', sans-serif), | ||
25 | family-fixed: ('Courier New', monospace), | ||
26 | weight: 400, | ||
27 | weight-bold: 700, | ||
28 | letter-spacing: -0.01em | ||
29 | ); | ||
30 | |||
31 | // Palette. | ||
32 | $palette: ( | ||
33 | bg: #000, | ||
34 | fg: rgba(255,255,255,0.75), | ||
35 | fg-bold: #fff, | ||
36 | fg-light: rgba(255,255,255,0.5), | ||
37 | border: rgba(255,255,255,0.35), | ||
38 | border-bg: rgba(255,255,255,0.125), | ||
39 | border2: rgba(255,255,255,0.25), | ||
40 | |||
41 | accent: ( | ||
42 | bg: #1cb495, | ||
43 | fg: mix(#1cb495, #ffffff, 25%), | ||
44 | fg-bold: #ffffff, | ||
45 | fg-light: mix(#1cb495, #ffffff, 40%), | ||
46 | border: rgba(255,255,255,0.25), | ||
47 | border-bg: rgba(255,255,255,0.075), | ||
48 | ), | ||
49 | |||
50 | positive: ( | ||
51 | bg: #1cb495, | ||
52 | fg: #ffffff | ||
53 | ), | ||
54 | |||
55 | negative: ( | ||
56 | bg: #ff2361, | ||
57 | fg: #ffffff | ||
58 | ) | ||
59 | ); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/libs/_vendor.scss
0 → 100644
1 | // vendor.scss v1.0 | @ajlkn | MIT licensed */ | ||
2 | |||
3 | // Vars. | ||
4 | |||
5 | /// Vendor prefixes. | ||
6 | /// @var {list} | ||
7 | $vendor-prefixes: ( | ||
8 | '-moz-', | ||
9 | '-webkit-', | ||
10 | '-ms-', | ||
11 | '' | ||
12 | ); | ||
13 | |||
14 | /// Properties that should be vendorized. | ||
15 | /// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org | ||
16 | /// @var {list} | ||
17 | $vendor-properties: ( | ||
18 | |||
19 | // Animation. | ||
20 | 'animation', | ||
21 | 'animation-delay', | ||
22 | 'animation-direction', | ||
23 | 'animation-duration', | ||
24 | 'animation-fill-mode', | ||
25 | 'animation-iteration-count', | ||
26 | 'animation-name', | ||
27 | 'animation-play-state', | ||
28 | 'animation-timing-function', | ||
29 | |||
30 | // Appearance. | ||
31 | 'appearance', | ||
32 | |||
33 | // Backdrop filter. | ||
34 | 'backdrop-filter', | ||
35 | |||
36 | // Background image options. | ||
37 | 'background-clip', | ||
38 | 'background-origin', | ||
39 | 'background-size', | ||
40 | |||
41 | // Box sizing. | ||
42 | 'box-sizing', | ||
43 | |||
44 | // Clip path. | ||
45 | 'clip-path', | ||
46 | |||
47 | // Filter effects. | ||
48 | 'filter', | ||
49 | |||
50 | // Flexbox. | ||
51 | 'align-content', | ||
52 | 'align-items', | ||
53 | 'align-self', | ||
54 | 'flex', | ||
55 | 'flex-basis', | ||
56 | 'flex-direction', | ||
57 | 'flex-flow', | ||
58 | 'flex-grow', | ||
59 | 'flex-shrink', | ||
60 | 'flex-wrap', | ||
61 | 'justify-content', | ||
62 | 'order', | ||
63 | |||
64 | // Font feature. | ||
65 | 'font-feature-settings', | ||
66 | 'font-language-override', | ||
67 | 'font-variant-ligatures', | ||
68 | |||
69 | // Font kerning. | ||
70 | 'font-kerning', | ||
71 | |||
72 | // Fragmented borders and backgrounds. | ||
73 | 'box-decoration-break', | ||
74 | |||
75 | // Grid layout. | ||
76 | 'grid-column', | ||
77 | 'grid-column-align', | ||
78 | 'grid-column-end', | ||
79 | 'grid-column-start', | ||
80 | 'grid-row', | ||
81 | 'grid-row-align', | ||
82 | 'grid-row-end', | ||
83 | 'grid-row-start', | ||
84 | 'grid-template-columns', | ||
85 | 'grid-template-rows', | ||
86 | |||
87 | // Hyphens. | ||
88 | 'hyphens', | ||
89 | 'word-break', | ||
90 | |||
91 | // Masks. | ||
92 | 'mask', | ||
93 | 'mask-border', | ||
94 | 'mask-border-outset', | ||
95 | 'mask-border-repeat', | ||
96 | 'mask-border-slice', | ||
97 | 'mask-border-source', | ||
98 | 'mask-border-width', | ||
99 | 'mask-clip', | ||
100 | 'mask-composite', | ||
101 | 'mask-image', | ||
102 | 'mask-origin', | ||
103 | 'mask-position', | ||
104 | 'mask-repeat', | ||
105 | 'mask-size', | ||
106 | |||
107 | // Multicolumn. | ||
108 | 'break-after', | ||
109 | 'break-before', | ||
110 | 'break-inside', | ||
111 | 'column-count', | ||
112 | 'column-fill', | ||
113 | 'column-gap', | ||
114 | 'column-rule', | ||
115 | 'column-rule-color', | ||
116 | 'column-rule-style', | ||
117 | 'column-rule-width', | ||
118 | 'column-span', | ||
119 | 'column-width', | ||
120 | 'columns', | ||
121 | |||
122 | // Object fit. | ||
123 | 'object-fit', | ||
124 | 'object-position', | ||
125 | |||
126 | // Regions. | ||
127 | 'flow-from', | ||
128 | 'flow-into', | ||
129 | 'region-fragment', | ||
130 | |||
131 | // Scroll snap points. | ||
132 | 'scroll-snap-coordinate', | ||
133 | 'scroll-snap-destination', | ||
134 | 'scroll-snap-points-x', | ||
135 | 'scroll-snap-points-y', | ||
136 | 'scroll-snap-type', | ||
137 | |||
138 | // Shapes. | ||
139 | 'shape-image-threshold', | ||
140 | 'shape-margin', | ||
141 | 'shape-outside', | ||
142 | |||
143 | // Tab size. | ||
144 | 'tab-size', | ||
145 | |||
146 | // Text align last. | ||
147 | 'text-align-last', | ||
148 | |||
149 | // Text decoration. | ||
150 | 'text-decoration-color', | ||
151 | 'text-decoration-line', | ||
152 | 'text-decoration-skip', | ||
153 | 'text-decoration-style', | ||
154 | |||
155 | // Text emphasis. | ||
156 | 'text-emphasis', | ||
157 | 'text-emphasis-color', | ||
158 | 'text-emphasis-position', | ||
159 | 'text-emphasis-style', | ||
160 | |||
161 | // Text size adjust. | ||
162 | 'text-size-adjust', | ||
163 | |||
164 | // Text spacing. | ||
165 | 'text-spacing', | ||
166 | |||
167 | // Transform. | ||
168 | 'transform', | ||
169 | 'transform-origin', | ||
170 | |||
171 | // Transform 3D. | ||
172 | 'backface-visibility', | ||
173 | 'perspective', | ||
174 | 'perspective-origin', | ||
175 | 'transform-style', | ||
176 | |||
177 | // Transition. | ||
178 | 'transition', | ||
179 | 'transition-delay', | ||
180 | 'transition-duration', | ||
181 | 'transition-property', | ||
182 | 'transition-timing-function', | ||
183 | |||
184 | // Unicode bidi. | ||
185 | 'unicode-bidi', | ||
186 | |||
187 | // User select. | ||
188 | 'user-select', | ||
189 | |||
190 | // Writing mode. | ||
191 | 'writing-mode', | ||
192 | |||
193 | ); | ||
194 | |||
195 | /// Values that should be vendorized. | ||
196 | /// Data via caniuse.com, github.com/postcss/autoprefixer, and developer.mozilla.org | ||
197 | /// @var {list} | ||
198 | $vendor-values: ( | ||
199 | |||
200 | // Cross fade. | ||
201 | 'cross-fade', | ||
202 | |||
203 | // Element function. | ||
204 | 'element', | ||
205 | |||
206 | // Filter function. | ||
207 | 'filter', | ||
208 | |||
209 | // Flexbox. | ||
210 | 'flex', | ||
211 | 'inline-flex', | ||
212 | |||
213 | // Grab cursors. | ||
214 | 'grab', | ||
215 | 'grabbing', | ||
216 | |||
217 | // Gradients. | ||
218 | 'linear-gradient', | ||
219 | 'repeating-linear-gradient', | ||
220 | 'radial-gradient', | ||
221 | 'repeating-radial-gradient', | ||
222 | |||
223 | // Grid layout. | ||
224 | 'grid', | ||
225 | 'inline-grid', | ||
226 | |||
227 | // Image set. | ||
228 | 'image-set', | ||
229 | |||
230 | // Intrinsic width. | ||
231 | 'max-content', | ||
232 | 'min-content', | ||
233 | 'fit-content', | ||
234 | 'fill', | ||
235 | 'fill-available', | ||
236 | 'stretch', | ||
237 | |||
238 | // Sticky position. | ||
239 | 'sticky', | ||
240 | |||
241 | // Transform. | ||
242 | 'transform', | ||
243 | |||
244 | // Zoom cursors. | ||
245 | 'zoom-in', | ||
246 | 'zoom-out', | ||
247 | |||
248 | ); | ||
249 | |||
250 | // Functions. | ||
251 | |||
252 | /// Removes a specific item from a list. | ||
253 | /// @author Hugo Giraudel | ||
254 | /// @param {list} $list List. | ||
255 | /// @param {integer} $index Index. | ||
256 | /// @return {list} Updated list. | ||
257 | @function remove-nth($list, $index) { | ||
258 | |||
259 | $result: null; | ||
260 | |||
261 | @if type-of($index) != number { | ||
262 | @warn "$index: #{quote($index)} is not a number for `remove-nth`."; | ||
263 | } | ||
264 | @else if $index == 0 { | ||
265 | @warn "List index 0 must be a non-zero integer for `remove-nth`."; | ||
266 | } | ||
267 | @else if abs($index) > length($list) { | ||
268 | @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; | ||
269 | } | ||
270 | @else { | ||
271 | |||
272 | $result: (); | ||
273 | $index: if($index < 0, length($list) + $index + 1, $index); | ||
274 | |||
275 | @for $i from 1 through length($list) { | ||
276 | |||
277 | @if $i != $index { | ||
278 | $result: append($result, nth($list, $i)); | ||
279 | } | ||
280 | |||
281 | } | ||
282 | |||
283 | } | ||
284 | |||
285 | @return $result; | ||
286 | |||
287 | } | ||
288 | |||
289 | /// Replaces a substring within another string. | ||
290 | /// @author Hugo Giraudel | ||
291 | /// @param {string} $string String. | ||
292 | /// @param {string} $search Substring. | ||
293 | /// @param {string} $replace Replacement. | ||
294 | /// @return {string} Updated string. | ||
295 | @function str-replace($string, $search, $replace: '') { | ||
296 | |||
297 | $index: str-index($string, $search); | ||
298 | |||
299 | @if $index { | ||
300 | @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); | ||
301 | } | ||
302 | |||
303 | @return $string; | ||
304 | |||
305 | } | ||
306 | |||
307 | /// Replaces a substring within each string in a list. | ||
308 | /// @param {list} $strings List of strings. | ||
309 | /// @param {string} $search Substring. | ||
310 | /// @param {string} $replace Replacement. | ||
311 | /// @return {list} Updated list of strings. | ||
312 | @function str-replace-all($strings, $search, $replace: '') { | ||
313 | |||
314 | @each $string in $strings { | ||
315 | $strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace)); | ||
316 | } | ||
317 | |||
318 | @return $strings; | ||
319 | |||
320 | } | ||
321 | |||
322 | // Mixins. | ||
323 | |||
324 | /// Wraps @content in vendorized keyframe blocks. | ||
325 | /// @param {string} $name Name. | ||
326 | @mixin keyframes($name) { | ||
327 | |||
328 | @-moz-keyframes #{$name} { @content; } | ||
329 | @-webkit-keyframes #{$name} { @content; } | ||
330 | @-ms-keyframes #{$name} { @content; } | ||
331 | @keyframes #{$name} { @content; } | ||
332 | |||
333 | } | ||
334 | |||
335 | /// Vendorizes a declaration's property and/or value(s). | ||
336 | /// @param {string} $property Property. | ||
337 | /// @param {mixed} $value String/list of value(s). | ||
338 | @mixin vendor($property, $value) { | ||
339 | |||
340 | // Determine if property should expand. | ||
341 | $expandProperty: index($vendor-properties, $property); | ||
342 | |||
343 | // Determine if value should expand (and if so, add '-prefix-' placeholder). | ||
344 | $expandValue: false; | ||
345 | |||
346 | @each $x in $value { | ||
347 | @each $y in $vendor-values { | ||
348 | @if $y == str-slice($x, 1, str-length($y)) { | ||
349 | |||
350 | $value: set-nth($value, index($value, $x), '-prefix-' + $x); | ||
351 | $expandValue: true; | ||
352 | |||
353 | } | ||
354 | } | ||
355 | } | ||
356 | |||
357 | // Expand property? | ||
358 | @if $expandProperty { | ||
359 | @each $vendor in $vendor-prefixes { | ||
360 | #{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; | ||
361 | } | ||
362 | } | ||
363 | |||
364 | // Expand just the value? | ||
365 | @elseif $expandValue { | ||
366 | @each $vendor in $vendor-prefixes { | ||
367 | #{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; | ||
368 | } | ||
369 | } | ||
370 | |||
371 | // Neither? Treat them as a normal declaration. | ||
372 | @else { | ||
373 | #{$property}: #{$value}; | ||
374 | } | ||
375 | |||
376 | } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/sass/main.scss
0 → 100644
1 | @import 'libs/vars'; | ||
2 | @import 'libs/functions'; | ||
3 | @import 'libs/mixins'; | ||
4 | @import 'libs/vendor'; | ||
5 | @import 'libs/breakpoints'; | ||
6 | @import 'fontawesome-all.min.css'; | ||
7 | @import url('https://fonts.googleapis.com/css?family=Roboto:400,700'); | ||
8 | |||
9 | /* | ||
10 | Eventually by HTML5 UP | ||
11 | html5up.net | @ajlkn | ||
12 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) | ||
13 | */ | ||
14 | |||
15 | // Breakpoints. | ||
16 | |||
17 | @include breakpoints(( | ||
18 | xlarge: ( 1281px, 1680px ), | ||
19 | large: ( 981px, 1280px ), | ||
20 | medium: ( 737px, 980px ), | ||
21 | small: ( 481px, 736px ), | ||
22 | xsmall: ( 361px, 480px ), | ||
23 | xxsmall: ( null, 360px ), | ||
24 | short: '(max-height: 640px)' | ||
25 | )); | ||
26 | |||
27 | // Base. | ||
28 | |||
29 | @import 'base/reset'; | ||
30 | @import 'base/page'; | ||
31 | @import 'base/bg'; | ||
32 | @import 'base/typography'; | ||
33 | |||
34 | // Components. | ||
35 | |||
36 | @import 'components/section'; | ||
37 | @import 'components/icon'; | ||
38 | @import 'components/list'; | ||
39 | @import 'components/icons'; | ||
40 | @import 'components/form'; | ||
41 | @import 'components/button'; | ||
42 | |||
43 | // Layout. | ||
44 | |||
45 | @import 'layout/header'; | ||
46 | @import 'layout/signup-form'; | ||
47 | @import 'layout/footer'; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
website/assets/webfonts/fa-brands-400.eot
0 → 100644
No preview for this file type
website/assets/webfonts/fa-brands-400.svg
0 → 100644
This diff could not be displayed because it is too large.
website/assets/webfonts/fa-brands-400.ttf
0 → 100644
No preview for this file type
website/assets/webfonts/fa-brands-400.woff
0 → 100644
No preview for this file type
website/assets/webfonts/fa-brands-400.woff2
0 → 100644
No preview for this file type
website/assets/webfonts/fa-regular-400.eot
0 → 100644
No preview for this file type
website/assets/webfonts/fa-regular-400.svg
0 → 100644
This diff could not be displayed because it is too large.
website/assets/webfonts/fa-regular-400.ttf
0 → 100644
No preview for this file type
website/assets/webfonts/fa-regular-400.woff
0 → 100644
No preview for this file type
website/assets/webfonts/fa-regular-400.woff2
0 → 100644
No preview for this file type
website/assets/webfonts/fa-solid-900.eot
0 → 100644
No preview for this file type
website/assets/webfonts/fa-solid-900.svg
0 → 100644
This diff could not be displayed because it is too large.
website/assets/webfonts/fa-solid-900.ttf
0 → 100644
No preview for this file type
website/assets/webfonts/fa-solid-900.woff
0 → 100644
No preview for this file type
website/assets/webfonts/fa-solid-900.woff2
0 → 100644
No preview for this file type
website/images/bg01.jpg
0 → 100644

186 KB
website/images/bg02.jpg
0 → 100644

112 KB
website/images/bg03.jpg
0 → 100644

108 KB
website/index.html
0 → 100644
1 | <!DOCTYPE HTML> | ||
2 | <!-- meu comentario --> | ||
3 | <html> | ||
4 | <head> | ||
5 | <title>Eventually by HTML5 UP</title> | ||
6 | <meta charset="utf-8" /> | ||
7 | <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> | ||
8 | <link rel="stylesheet" href="assets/css/main.css" /> | ||
9 | </head> | ||
10 | <body class="is-preload"> | ||
11 | |||
12 | <!-- Header --> | ||
13 | <header id="header"> | ||
14 | <h1>Site de Secretaria das Cidades</h1> | ||
15 | <p>A simple template for telling the world when you'll launch<br /> | ||
16 | your next big thing. Brought to you by <a href="http://html5up.net">HTML5 UP</a>.</p> | ||
17 | </header> | ||
18 | |||
19 | <!-- Signup Form --> | ||
20 | <form id="signup-form" method="post" action="#"> | ||
21 | <input type="email" name="email" id="email" placeholder="Email Address" /> | ||
22 | <input type="submit" value="Sign Up" /> | ||
23 | </form> | ||
24 | |||
25 | <!-- Footer --> | ||
26 | <footer id="footer"> | ||
27 | <ul class="icons"> | ||
28 | <li><a href="#" class="icon brands fa-twitter"><span class="label">Twitter</span></a></li> | ||
29 | <li><a href="#" class="icon brands fa-instagram"><span class="label">Instagram</span></a></li> | ||
30 | <li><a href="#" class="icon brands fa-github"><span class="label">GitHub</span></a></li> | ||
31 | <li><a href="#" class="icon fa-envelope"><span class="label">Email</span></a></li> | ||
32 | </ul> | ||
33 | <ul class="copyright"> | ||
34 | <li>© Untitled.</li><li>Credits: <a href="http://html5up.net">HTML5 UP</a></li> | ||
35 | </ul> | ||
36 | </footer> | ||
37 | |||
38 | <!-- Scripts --> | ||
39 | <script src="assets/js/main.js"></script> | ||
40 | |||
41 | </body> | ||
42 | </html> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or sign in to post a comment