')
373 | .append(i.clone())
374 | .remove()
375 | .html()
376 | .replace(/type="password"/i, 'type="text"')
377 | .replace(/type=password/i, 'type=text')
378 | );
379 |
380 | if (i.attr('id') != '')
381 | x.attr('id', i.attr('id') + '-polyfill-field');
382 |
383 | if (i.attr('name') != '')
384 | x.attr('name', i.attr('name') + '-polyfill-field');
385 |
386 | x.addClass('polyfill-placeholder')
387 | .val(x.attr('placeholder')).insertAfter(i);
388 |
389 | if (i.val() == '')
390 | i.hide();
391 | else
392 | x.hide();
393 |
394 | i
395 | .on('blur', function(event) {
396 |
397 | event.preventDefault();
398 |
399 | var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
400 |
401 | if (i.val() == '') {
402 |
403 | i.hide();
404 | x.show();
405 |
406 | }
407 |
408 | });
409 |
410 | x
411 | .on('focus', function(event) {
412 |
413 | event.preventDefault();
414 |
415 | var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');
416 |
417 | x.hide();
418 |
419 | i
420 | .show()
421 | .focus();
422 |
423 | })
424 | .on('keypress', function(event) {
425 |
426 | event.preventDefault();
427 | x.val('');
428 |
429 | });
430 |
431 | });
432 |
433 | // Events.
434 | $this
435 | .on('submit', function() {
436 |
437 | $this.find('input[type=text],input[type=password],textarea')
438 | .each(function(event) {
439 |
440 | var i = $(this);
441 |
442 | if (i.attr('name').match(/-polyfill-field$/))
443 | i.attr('name', '');
444 |
445 | if (i.val() == i.attr('placeholder')) {
446 |
447 | i.removeClass('polyfill-placeholder');
448 | i.val('');
449 |
450 | }
451 |
452 | });
453 |
454 | })
455 | .on('reset', function(event) {
456 |
457 | event.preventDefault();
458 |
459 | $this.find('select')
460 | .val($('option:first').val());
461 |
462 | $this.find('input,textarea')
463 | .each(function() {
464 |
465 | var i = $(this),
466 | x;
467 |
468 | i.removeClass('polyfill-placeholder');
469 |
470 | switch (this.type) {
471 |
472 | case 'submit':
473 | case 'reset':
474 | break;
475 |
476 | case 'password':
477 | i.val(i.attr('defaultValue'));
478 |
479 | x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');
480 |
481 | if (i.val() == '') {
482 | i.hide();
483 | x.show();
484 | }
485 | else {
486 | i.show();
487 | x.hide();
488 | }
489 |
490 | break;
491 |
492 | case 'checkbox':
493 | case 'radio':
494 | i.attr('checked', i.attr('defaultValue'));
495 | break;
496 |
497 | case 'text':
498 | case 'textarea':
499 | i.val(i.attr('defaultValue'));
500 |
501 | if (i.val() == '') {
502 | i.addClass('polyfill-placeholder');
503 | i.val(i.attr('placeholder'));
504 | }
505 |
506 | break;
507 |
508 | default:
509 | i.val(i.attr('defaultValue'));
510 | break;
511 |
512 | }
513 | });
514 |
515 | });
516 |
517 | return $this;
518 |
519 | };
520 |
521 | /**
522 | * Moves elements to/from the first positions of their respective parents.
523 | * @param {jQuery} $elements Elements (or selector) to move.
524 | * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.
525 | */
526 | $.prioritize = function($elements, condition) {
527 |
528 | var key = '__prioritize';
529 |
530 | // Expand $elements if it's not already a jQuery object.
531 | if (typeof $elements != 'jQuery')
532 | $elements = $($elements);
533 |
534 | // Step through elements.
535 | $elements.each(function() {
536 |
537 | var $e = $(this), $p,
538 | $parent = $e.parent();
539 |
540 | // No parent? Bail.
541 | if ($parent.length == 0)
542 | return;
543 |
544 | // Not moved? Move it.
545 | if (!$e.data(key)) {
546 |
547 | // Condition is false? Bail.
548 | if (!condition)
549 | return;
550 |
551 | // Get placeholder (which will serve as our point of reference for when this element needs to move back).
552 | $p = $e.prev();
553 |
554 | // Couldn't find anything? Means this element's already at the top, so bail.
555 | if ($p.length == 0)
556 | return;
557 |
558 | // Move element to top of parent.
559 | $e.prependTo($parent);
560 |
561 | // Mark element as moved.
562 | $e.data(key, $p);
563 |
564 | }
565 |
566 | // Moved already?
567 | else {
568 |
569 | // Condition is true? Bail.
570 | if (condition)
571 | return;
572 |
573 | $p = $e.data(key);
574 |
575 | // Move element back to its original location (using our placeholder).
576 | $e.insertAfter($p);
577 |
578 | // Unmark element as moved.
579 | $e.removeData(key);
580 |
581 | }
582 |
583 | });
584 |
585 | };
586 |
587 | })(jQuery);
--------------------------------------------------------------------------------
/public/assets/sass/libs/_breakpoints.scss:
--------------------------------------------------------------------------------
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 | }
--------------------------------------------------------------------------------
/public/assets/sass/libs/_functions.scss:
--------------------------------------------------------------------------------
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 | }
--------------------------------------------------------------------------------
/public/assets/sass/libs/_html-grid.scss:
--------------------------------------------------------------------------------
1 | // html-grid.scss v1.0 | @ajlkn | MIT licensed */
2 |
3 | // Mixins.
4 |
5 | /// Initializes the current element as an HTML grid.
6 | /// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
7 | /// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list).
8 | @mixin html-grid($gutters: 1.5em, $suffix: '') {
9 |
10 | // Initialize.
11 | $cols: 12;
12 | $multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
13 | $unit: 100% / $cols;
14 |
15 | // Suffixes.
16 | $suffixes: null;
17 |
18 | @if (type-of($suffix) == 'list') {
19 | $suffixes: $suffix;
20 | }
21 | @else {
22 | $suffixes: ($suffix);
23 | }
24 |
25 | // Gutters.
26 | $guttersCols: null;
27 | $guttersRows: null;
28 |
29 | @if (type-of($gutters) == 'list') {
30 |
31 | $guttersCols: nth($gutters, 1);
32 | $guttersRows: nth($gutters, 2);
33 |
34 | }
35 | @else {
36 |
37 | $guttersCols: $gutters;
38 | $guttersRows: 0;
39 |
40 | }
41 |
42 | // Row.
43 | display: flex;
44 | flex-wrap: wrap;
45 | box-sizing: border-box;
46 | align-items: stretch;
47 |
48 | // Columns.
49 | > * {
50 | box-sizing: border-box;
51 | }
52 |
53 | // Gutters.
54 | &.gtr-uniform {
55 | > * {
56 | > :last-child {
57 | margin-bottom: 0;
58 | }
59 | }
60 | }
61 |
62 | // Alignment.
63 | &.aln-left {
64 | justify-content: flex-start;
65 | }
66 |
67 | &.aln-center {
68 | justify-content: center;
69 | }
70 |
71 | &.aln-right {
72 | justify-content: flex-end;
73 | }
74 |
75 | &.aln-top {
76 | align-items: flex-start;
77 | }
78 |
79 | &.aln-middle {
80 | align-items: center;
81 | }
82 |
83 | &.aln-bottom {
84 | align-items: flex-end;
85 | }
86 |
87 | // Step through suffixes.
88 | @each $suffix in $suffixes {
89 |
90 | // Suffix.
91 | @if ($suffix != '') {
92 | $suffix: '-' + $suffix;
93 | }
94 | @else {
95 | $suffix: '';
96 | }
97 |
98 | // Row.
99 |
100 | // Important.
101 | > .imp#{$suffix} {
102 | order: -1;
103 | }
104 |
105 | // Columns, offsets.
106 | @for $i from 1 through $cols {
107 | > .col-#{$i}#{$suffix} {
108 | width: $unit * $i;
109 | }
110 |
111 | > .off-#{$i}#{$suffix} {
112 | margin-left: $unit * $i;
113 | }
114 | }
115 |
116 | // Step through multipliers.
117 | @each $multiplier in $multipliers {
118 |
119 | // Gutters.
120 | $class: null;
121 |
122 | @if ($multiplier != 1) {
123 | $class: '.gtr-' + ($multiplier * 100);
124 | }
125 |
126 | {$class} {
127 | margin-top: ($guttersRows * $multiplier * -1);
128 | margin-left: ($guttersCols * $multiplier * -1);
129 |
130 | > * {
131 | padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
132 | }
133 |
134 | // Uniform.
135 | &.gtr-uniform {
136 | margin-top: $guttersCols * $multiplier * -1;
137 |
138 | > * {
139 | padding-top: $guttersCols * $multiplier;
140 | }
141 | }
142 |
143 | }
144 |
145 | }
146 |
147 | }
148 |
149 | }
--------------------------------------------------------------------------------
/public/assets/sass/libs/_mixins.scss:
--------------------------------------------------------------------------------
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 | }
--------------------------------------------------------------------------------
/public/assets/sass/libs/_vars.scss:
--------------------------------------------------------------------------------
1 | // Misc.
2 | $misc: (
3 | z-index-base: 10000,
4 | z-index-overlay: 100000,
5 | max-spotlight: 20
6 | );
7 |
8 | // Duration.
9 | $duration: (
10 | navPanel: 0.5s,
11 | transition: 0.2s,
12 | landing-fadein: 1.5s
13 | );
14 |
15 | // Size.
16 | $size: (
17 | border-radius: 4px,
18 | element-height: 3em,
19 | element-margin: 2em,
20 | navPanel: 275px,
21 | container-width: 70em
22 | );
23 |
24 | // Font.
25 | $font: (
26 | family: ('Roboto', Helvetica, sans-serif),
27 | family-fixed: ('Courier New', monospace),
28 | weight: 100,
29 | weight-bold: 300
30 | );
31 |
32 | // Palette.
33 | $palette: (
34 | bg: #1c1d26,
35 | bg-transparent: rgba(23,24,32,0.95),
36 | fg-bold: #ffffff,
37 | fg: rgba(255,255,255,0.75),
38 | fg-light: rgba(255,255,255,0.5),
39 | fg-lighter: rgba(255,255,255,0.15),
40 | border: rgba(255,255,255,0.3),
41 | border-bg: rgba(255,255,255,0.075),
42 | border2: rgba(255,255,255,0.5),
43 | border2-bg: rgba(255,255,255,0.25),
44 | accent1: #e44c65,
45 | accent2: #272833,
46 | accent2-transparent:rgba(39,40,51,0.965),
47 | accent3: #5480f1,
48 | accent4: #39c088
49 | );
--------------------------------------------------------------------------------
/public/assets/sass/libs/_vendor.scss:
--------------------------------------------------------------------------------
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 | }
--------------------------------------------------------------------------------
/public/assets/sass/main.scss:
--------------------------------------------------------------------------------
1 | @import 'libs/vars';
2 | @import 'libs/functions';
3 | @import 'libs/mixins';
4 | @import 'libs/vendor';
5 | @import 'libs/breakpoints';
6 | @import 'libs/html-grid';
7 | @import url('fontawesome-all.min.css');
8 | @import url("https://fonts.googleapis.com/css?family=Roboto:100,300,100italic,300italic");
9 |
10 | /*
11 | Landed by HTML5 UP
12 | html5up.net | @ajlkn
13 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
14 | */
15 |
16 | // Breakpoints.
17 |
18 | @include breakpoints((
19 | xlarge: ( 1281px, 1680px ),
20 | large: ( 981px, 1280px ),
21 | medium: ( 737px, 980px ),
22 | small: ( 481px, 736px ),
23 | xsmall: ( null, 480px ),
24 | ));
25 |
26 | // Mixins.
27 |
28 | @mixin line-icon($bg: _palette(bg), $fg: _palette(fg-bold)) {
29 | @include icon;
30 | $size: 1px;
31 |
32 | &:before {
33 | color: $bg !important;
34 | text-shadow: $size 0 0 $fg,
35 | ($size * -1) 0 0 $fg,
36 | 0 $size 0 $fg,
37 | 0 ($size * -1) 0 $fg;
38 | }
39 | }
40 |
41 | $size-wrapper-pad-tb: 6em;
42 | $size-wrapper-pad-lr: 3em;
43 |
44 | // Reset.
45 | // Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)
46 |
47 | html, body, div, span, applet, object,
48 | iframe, h1, h2, h3, h4, h5, h6, p, blockquote,
49 | pre, a, abbr, acronym, address, big, cite,
50 | code, del, dfn, em, img, ins, kbd, q, s, samp,
51 | small, strike, strong, sub, sup, tt, var, b,
52 | u, i, center, dl, dt, dd, ol, ul, li, fieldset,
53 | form, label, legend, table, caption, tbody,
54 | tfoot, thead, tr, th, td, article, aside,
55 | canvas, details, embed, figure, figcaption,
56 | footer, header, hgroup, menu, nav, output, ruby,
57 | section, summary, time, mark, audio, video {
58 | margin: 0;
59 | padding: 0;
60 | border: 0;
61 | font-size: 100%;
62 | font: inherit;
63 | vertical-align: baseline;
64 | }
65 |
66 | article, aside, details, figcaption, figure,
67 | footer, header, hgroup, menu, nav, section {
68 | display: block;
69 | }
70 |
71 | body {
72 | line-height: 1;
73 | }
74 |
75 | ol, ul {
76 | list-style:none;
77 | }
78 |
79 | blockquote, q {
80 | quotes: none;
81 |
82 | &:before,
83 | &:after {
84 | content: '';
85 | content: none;
86 | }
87 | }
88 |
89 | table {
90 | border-collapse: collapse;
91 | border-spacing: 0;
92 | }
93 |
94 | body {
95 | -webkit-text-size-adjust: none;
96 | }
97 |
98 | mark {
99 | background-color: transparent;
100 | color: inherit;
101 | }
102 |
103 | input::-moz-focus-inner {
104 | border: 0;
105 | padding: 0;
106 | }
107 |
108 | input, select, textarea {
109 | -moz-appearance: none;
110 | -webkit-appearance: none;
111 | -ms-appearance: none;
112 | appearance: none;
113 | }
114 |
115 | /* Basic */
116 |
117 | // Set box model to border-box.
118 | // Based on css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice
119 | html {
120 | box-sizing: border-box;
121 | }
122 |
123 | *, *:before, *:after {
124 | box-sizing: inherit;
125 | }
126 |
127 | html, body {
128 | background: _palette(bg);
129 | }
130 |
131 | body {
132 |
133 | // Stops initial animations until page loads.
134 | &.is-preload {
135 | *, *:before, *:after {
136 | @include vendor('animation', 'none !important');
137 | @include vendor('transition', 'none !important');
138 | }
139 | }
140 |
141 | }
142 |
143 | body, input, select, textarea {
144 | color: _palette(fg);
145 | font-family: _font(family);
146 | font-size: 15pt;
147 | font-weight: _font(weight);
148 | line-height: 1.75em;
149 | }
150 |
151 | a {
152 | @include vendor('transition', ('border-color #{_duration(transition)} ease-in-out', 'color #{_duration(transition)} ease-in-out'));
153 | border-bottom: dotted 1px;
154 | color: _palette(accent1);
155 | text-decoration: none;
156 |
157 | &:hover {
158 | color: _palette(accent1) !important;
159 | border-bottom-color: transparent;
160 | }
161 | }
162 |
163 | strong, b {
164 | color: _palette(fg-bold);
165 | font-weight: _font(weight-bold);
166 | }
167 |
168 | em, i {
169 | font-style: italic;
170 | }
171 |
172 | p {
173 | margin: 0 0 _size(element-margin) 0;
174 | }
175 |
176 | h1, h2, h3, h4, h5, h6 {
177 | color: _palette(fg-bold);
178 | font-weight: _font(weight-bold);
179 | line-height: 1em;
180 | margin: 0 0 (_size(element-margin) * 0.5) 0;
181 |
182 | a {
183 | color: inherit;
184 | border: 0;
185 | }
186 | }
187 |
188 | h2 {
189 | font-size: 2em;
190 | line-height: 1.5em;
191 | letter-spacing: -0.025em;
192 | }
193 |
194 | h3 {
195 | font-size: 1.35em;
196 | line-height: 1.5em;
197 | }
198 |
199 | h4 {
200 | font-size: 1.1em;
201 | line-height: 1.5em;
202 | }
203 |
204 | h5 {
205 | font-size: 0.9em;
206 | line-height: 1.5em;
207 | }
208 |
209 | h6 {
210 | font-size: 0.7em;
211 | line-height: 1.5em;
212 | }
213 |
214 | sub {
215 | font-size: 0.8em;
216 | position: relative;
217 | top: 0.5em;
218 | }
219 |
220 | sup {
221 | font-size: 0.8em;
222 | position: relative;
223 | top: -0.5em;
224 | }
225 |
226 | hr {
227 | border: 0;
228 | border-bottom: solid 1px _palette(border);
229 | margin: (_size(element-margin) * 1.5) 0;
230 |
231 | &.major {
232 | margin: (_size(element-margin) * 2) 0;
233 | }
234 | }
235 |
236 | blockquote {
237 | border-left: solid 4px _palette(border);
238 | font-style: italic;
239 | margin: 0 0 _size(element-margin) 0;
240 | padding: 0.5em 0 0.5em 2em;
241 | }
242 |
243 | code {
244 | background: _palette(border-bg);
245 | border-radius: _size(border-radius);
246 | font-family: _font(family-fixed);
247 | font-size: 0.9em;
248 | margin: 0 0.25em;
249 | padding: 0.25em 0.65em;
250 | }
251 |
252 | pre {
253 | -webkit-overflow-scrolling: touch;
254 | font-family: _font(family-fixed);
255 | font-size: 0.9em;
256 | margin: 0 0 _size(element-margin) 0;
257 |
258 | code {
259 | display: block;
260 | line-height: 1.75em;
261 | padding: 1em 1.5em;
262 | overflow-x: auto;
263 | }
264 | }
265 |
266 | .align-left {
267 | text-align: left;
268 | }
269 |
270 | .align-center {
271 | text-align: center;
272 | }
273 |
274 | .align-right {
275 | text-align: right;
276 | }
277 |
278 | /* Loader */
279 |
280 | // Spinner
281 |
282 | @include keyframes('spinner-show') {
283 | 0% { opacity: 0; }
284 | 100% { opacity: 1; }
285 | }
286 |
287 | @include keyframes('spinner-hide') {
288 | 0% { color: _palette(fg-lighter); z-index: _misc(z-index-overlay) + 1; @include vendor('transform', 'scale(1) rotate(0deg)'); }
289 | 99% { color: _palette(bg); z-index: _misc(z-index-overlay) + 1; @include vendor('transform', 'scale(0.5) rotate(360deg)'); }
290 | 100% { color: _palette(bg); z-index: -1; @include vendor('transform', 'scale(0.5) rotate(360deg)'); }
291 | }
292 |
293 | @include keyframes('spinner-rotate') {
294 | 0% { @include vendor('transform', 'scale(1) rotate(0deg)'); }
295 | 100% { @include vendor('transform', 'scale(1) rotate(360deg)'); }
296 | }
297 |
298 | // Overlay
299 |
300 | @include keyframes('overlay-hide') {
301 | 0% { opacity: 1; z-index: _misc(z-index-overlay); }
302 | 15% { opacity: 1; z-index: _misc(z-index-overlay); }
303 | 99% { opacity: 0; z-index: _misc(z-index-overlay); }
304 | 100% { opacity: 0; z-index: -1; }
305 | }
306 |
307 | body.landing {
308 | @include icon(false, solid);
309 |
310 | // Spinner (inactive)
311 |
312 | &:before {
313 | @include vendor('animation', ('spinner-show 1.5s 1 0.25s ease forwards', 'spinner-hide 0.25s ease-in-out forwards !important'));
314 | @include vendor('transform-origin', '50% 50%');
315 |
316 | color: _palette(fg-lighter);
317 | content: '\f1ce';
318 | cursor: default;
319 | display: block;
320 | font-size: 2em;
321 | height: 2em;
322 | left: 50%;
323 | line-height: 2em;
324 | margin: -1em 0 0 -1em;
325 | opacity: 0;
326 | position: fixed;
327 | text-align: center;
328 | top: 50%;
329 | width: 2em;
330 | z-index: -1;
331 | }
332 |
333 | // Overlay (inactive)
334 |
335 | &:after {
336 | @include vendor('animation', 'overlay-hide #{_duration(landing-fadein)} ease-in forwards !important');
337 | background: _palette(bg);
338 | content: '';
339 | display: block;
340 | height: 100%;
341 | left: 0;
342 | opacity: 0;
343 | position: fixed;
344 | top: 0;
345 | width: 100%;
346 | z-index: -1;
347 | }
348 |
349 | &.is-preload {
350 |
351 | // Spinner (active)
352 |
353 | &:before {
354 | @include vendor('animation', ('spinner-show 1.5s 1 0.25s ease forwards', 'spinner-rotate 0.75s infinite linear !important'));
355 | z-index: _misc(z-index-overlay) + 1;
356 | }
357 |
358 | // Overlay (active)
359 |
360 | &:after {
361 | @include vendor('animation', 'none !important');
362 | opacity: 1;
363 | z-index: _misc(z-index-overlay);
364 | }
365 |
366 | }
367 | }
368 |
369 | @media (-webkit-min-device-pixel-ratio: 2) {
370 | body.landing:before {
371 | line-height: 2.025em;
372 | }
373 | }
374 |
375 | /* Container */
376 |
377 | .container {
378 | margin: 0 auto;
379 | max-width: calc(100% - #{_size(element-margin) * 2});
380 | width: _size(container-width);
381 |
382 | &.xsmall {
383 | width: (_size(container-width) * 0.25);
384 | }
385 |
386 | &.small {
387 | width: (_size(container-width) * 0.5);
388 | }
389 |
390 | &.medium {
391 | width: (_size(container-width) * 0.75);
392 | }
393 |
394 | &.large {
395 | width: (_size(container-width) * 1.25);
396 | }
397 |
398 | &.xlarge {
399 | width: (_size(container-width) * 1.5);
400 | }
401 |
402 | &.max {
403 | width: 100%;
404 | }
405 |
406 | @include breakpoint('<=large') {
407 | width: 90%;
408 | max-width: 100%;
409 | }
410 |
411 | @include breakpoint('<=medium') {
412 | width: 100% !important;
413 | }
414 | }
415 |
416 | /* Row */
417 |
418 | .row {
419 | @include html-grid(2.5em);
420 |
421 | @include breakpoint('<=xlarge') {
422 | @include html-grid(2.5em, 'xlarge');
423 | }
424 |
425 | @include breakpoint('<=large') {
426 | @include html-grid(2.5em, 'large');
427 | }
428 |
429 | @include breakpoint('<=medium') {
430 | @include html-grid(2.5em, 'medium');
431 | }
432 |
433 | @include breakpoint('<=small') {
434 | @include html-grid(2.5em, 'small');
435 | }
436 |
437 | @include breakpoint('<=xsmall') {
438 | @include html-grid(2.5em, 'xsmall');
439 | }
440 | }
441 |
442 | /* Section/Article */
443 |
444 | section, article {
445 | &.special {
446 | text-align: center;
447 | }
448 | }
449 |
450 | header {
451 | p {
452 | color: _palette(fg-bold);
453 | position: relative;
454 | margin: 0 0 (_size(element-margin) * 0.75) 0;
455 | }
456 |
457 | h2 + p {
458 | font-size: 1.25em;
459 | margin-top: (_size(element-margin) * -0.5);
460 | line-height: 1.75em;
461 | }
462 |
463 | h3 + p {
464 | font-size: 1.1em;
465 | margin-top: (_size(element-margin) * -0.4);
466 | line-height: 1.75em;
467 | }
468 |
469 | h4 + p,
470 | h5 + p,
471 | h6 + p {
472 | font-size: 0.9em;
473 | margin-top: (_size(element-margin) * -0.3);
474 | line-height: 1.5em;
475 | }
476 |
477 | &.major {
478 | margin: 0 0 (_size(element-margin) * 2) 0;
479 | position: relative;
480 | text-align: center;
481 |
482 | &:after {
483 | background: _palette(accent1);
484 | content: '';
485 | display: inline-block;
486 | height: 0.2em;
487 | max-width: 20em;
488 | width: 75%;
489 | }
490 | }
491 | }
492 |
493 | footer {
494 | &.major {
495 | margin: (_size(element-margin) * 2) 0 0 0;
496 | }
497 | }
498 |
499 | /* Form */
500 |
501 | form {
502 | margin: 0 0 _size(element-margin) 0;
503 |
504 | &.cta {
505 | max-width: 35em;
506 | margin-left: auto;
507 | margin-right: auto;
508 | }
509 | }
510 |
511 | label {
512 | color: _palette(fg-bold);
513 | display: block;
514 | font-size: 0.9em;
515 | font-weight: _font(weight-bold);
516 | margin: 0 0 (_size(element-margin) * 0.5) 0;
517 | }
518 |
519 | input[type="text"],
520 | input[type="password"],
521 | input[type="email"],
522 | select,
523 | textarea {
524 | @include vendor('appearance', 'none');
525 | @include vendor('transition', 'border-color #{_duration(transition)} ease-in-out');
526 | background: transparent;
527 | border-radius: _size(border-radius);
528 | border: solid 1px _palette(border);
529 | color: inherit;
530 | display: block;
531 | outline: 0;
532 | padding: 0 1em;
533 | text-decoration: none;
534 | width: 100%;
535 |
536 | &:invalid {
537 | box-shadow: none;
538 | }
539 |
540 | &:focus {
541 | border-color: _palette(accent1);
542 | }
543 | }
544 |
545 | select {
546 | background-image: svg-url("
");
547 | background-size: 1.25rem;
548 | background-repeat: no-repeat;
549 | background-position: calc(100% - 1rem) center;
550 | height: _size(element-height);
551 | padding-right: _size(element-height);
552 | text-overflow: ellipsis;
553 |
554 | option {
555 | color: _palette(fg-bold);
556 | background: _palette(bg);
557 | }
558 |
559 | &:focus {
560 | &::-ms-value {
561 | background-color: transparent;
562 | }
563 | }
564 |
565 | &::-ms-expand {
566 | display: none;
567 | }
568 | }
569 |
570 | input[type="text"],
571 | input[type="password"],
572 | input[type="email"],
573 | select {
574 | height: _size(element-height);
575 | }
576 |
577 | textarea {
578 | padding: 0.75em 1em;
579 | }
580 |
581 | input[type="checkbox"],
582 | input[type="radio"], {
583 | @include vendor('appearance', 'none');
584 | display: block;
585 | float: left;
586 | margin-right: -2em;
587 | opacity: 0;
588 | width: 1em;
589 | z-index: -1;
590 |
591 | & + label {
592 | @include icon(false, solid);
593 | color: _palette(fg);
594 | cursor: pointer;
595 | display: inline-block;
596 | font-size: 1em;
597 | font-weight: _font(weight);
598 | padding-left: (_size(element-height) * 0.6) + 0.75em;
599 | padding-right: 0.75em;
600 | position: relative;
601 |
602 | &:before {
603 | border-radius: _size(border-radius);
604 | border: solid 1px _palette(border);
605 | content: '';
606 | display: inline-block;
607 | font-size: 0.8em;
608 | height: (_size(element-height) * 0.75);
609 | left: 0;
610 | line-height: (_size(element-height) * 0.75);
611 | position: absolute;
612 | text-align: center;
613 | top: 0;
614 | width: (_size(element-height) * 0.75);
615 | }
616 | }
617 |
618 | &:checked + label {
619 | &:before {
620 | background: _palette(border2-bg);
621 | color: _palette(fg-bold);
622 | content: '\f00c';
623 | }
624 | }
625 |
626 | &:focus + label {
627 | &:before {
628 | border-color: _palette(accent1);
629 | }
630 | }
631 | }
632 |
633 | input[type="checkbox"] {
634 | & + label {
635 | &:before {
636 | border-radius: _size(border-radius);
637 | }
638 | }
639 | }
640 |
641 | input[type="radio"] {
642 | & + label {
643 | &:before {
644 | border-radius: 100%;
645 | }
646 | }
647 | }
648 |
649 | ::-webkit-input-placeholder {
650 | color: _palette(fg-light) !important;
651 | opacity: 1.0;
652 | }
653 |
654 | :-moz-placeholder {
655 | color: _palette(fg-light) !important;
656 | opacity: 1.0;
657 | }
658 |
659 | ::-moz-placeholder {
660 | color: _palette(fg-light) !important;
661 | opacity: 1.0;
662 | }
663 |
664 | :-ms-input-placeholder {
665 | color: _palette(fg-light) !important;
666 | opacity: 1.0;
667 | }
668 |
669 | /* Box */
670 |
671 | .box {
672 | border-radius: _size(border-radius);
673 | border: solid 1px _palette(border);
674 | margin-bottom: _size(element-margin);
675 | padding: 1.5em;
676 |
677 | > :last-child,
678 | > :last-child > :last-child,
679 | > :last-child > :last-child > :last-child {
680 | margin-bottom: 0;
681 | }
682 |
683 | &.alt {
684 | border: 0;
685 | border-radius: 0;
686 | padding: 0;
687 | }
688 | }
689 |
690 | /* Icon */
691 |
692 | .icon {
693 | @include icon;
694 | border-bottom: none;
695 | position: relative;
696 |
697 | > .label {
698 | display: none;
699 | }
700 |
701 | &:before {
702 | line-height: inherit;
703 | }
704 |
705 | &.solid {
706 | &:before {
707 | font-weight: 900 !important;
708 | }
709 | }
710 |
711 | &.brands {
712 | &:before {
713 | font-family: 'Font Awesome 5 Brands' !important;
714 | }
715 | }
716 |
717 | &.alt {
718 | @include line-icon;
719 | }
720 |
721 | &.major {
722 | background: _palette(accent2);
723 | border-radius: 100%;
724 | cursor: default;
725 | display: inline-block;
726 | height: 6em;
727 | line-height: 5.65em;
728 | margin: 0 0 _size(element-margin) 0;
729 | text-align: center;
730 | width: 6em;
731 |
732 | &:before {
733 | font-size: 2.25em;
734 | }
735 |
736 | &.alt {
737 | @include line-icon(_palette(accent2));
738 | }
739 | }
740 | }
741 |
742 | /* Image */
743 |
744 | .image {
745 | border-radius: _size(border-radius);
746 | border: 0;
747 | display: inline-block;
748 | position: relative;
749 | overflow: hidden;
750 |
751 | &:before {
752 | content: '';
753 | display: block;
754 | position: absolute;
755 | left: 0;
756 | top: 0;
757 | background-image: url('images/overlay.png');
758 | width: 100%;
759 | height: 100%;
760 | z-index: 1;
761 | }
762 |
763 | img {
764 | border-radius: _size(border-radius);
765 | display: block;
766 | }
767 |
768 | &.left {
769 | float: left;
770 | margin: 0 1.5em 1em 0;
771 | top: 0.25em;
772 | }
773 |
774 | &.right {
775 | float: right;
776 | margin: 0 0 1em 1.5em;
777 | top: 0.25em;
778 | }
779 |
780 | &.left,
781 | &.right {
782 | max-width: 40%;
783 |
784 | img {
785 | width: 100%;
786 | }
787 | }
788 |
789 | &.fit {
790 | display: block;
791 | margin: 0 0 _size(element-margin) 0;
792 | width: 100%;
793 |
794 | img {
795 | width: 100%;
796 | }
797 | }
798 | }
799 |
800 | /* List */
801 |
802 | ol {
803 | list-style: decimal;
804 | margin: 0 0 _size(element-margin) 0;
805 | padding-left: 1.25em;
806 |
807 | li {
808 | padding-left: 0.25em;
809 | }
810 | }
811 |
812 | ul {
813 | list-style: disc;
814 | margin: 0 0 _size(element-margin) 0;
815 | padding-left: 1em;
816 |
817 | li {
818 | padding-left: 0.5em;
819 | }
820 |
821 | &.alt {
822 | list-style: none;
823 | padding-left: 0;
824 |
825 | li {
826 | border-top: solid 1px _palette(border);
827 | padding: 0.5em 0;
828 |
829 | &:first-child {
830 | border-top: 0;
831 | padding-top: 0;
832 | }
833 | }
834 | }
835 |
836 | }
837 |
838 | dl {
839 | margin: 0 0 _size(element-margin) 0;
840 | }
841 |
842 | /* Icons */
843 |
844 | ul.icons {
845 | cursor: default;
846 | list-style: none;
847 | padding-left: 0;
848 |
849 | li {
850 | display: inline-block;
851 | height: 2.5em;
852 | line-height: 2.5em;
853 | padding: 0 0.5em;
854 |
855 | .icon {
856 | font-size: 0.8em;
857 |
858 | &:before {
859 | font-size: 2em;
860 | }
861 | }
862 | }
863 | }
864 |
865 | /* Actions */
866 |
867 | ul.actions {
868 | @include vendor('display', 'flex');
869 | cursor: default;
870 | list-style: none;
871 | margin-left: (_size(element-margin) * -0.5);
872 | padding-left: 0;
873 |
874 | li {
875 | padding: 0 0 0 (_size(element-margin) * 0.5);
876 | vertical-align: middle;
877 | }
878 |
879 | &.special {
880 | @include vendor('justify-content', 'center');
881 | width: 100%;
882 | margin-left: 0;
883 |
884 | li {
885 | &:first-child {
886 | padding-left: 0;
887 | }
888 | }
889 | }
890 |
891 | &.stacked {
892 | @include vendor('flex-direction', 'column');
893 | margin-left: 0;
894 |
895 | li {
896 | padding: (_size(element-margin) * 0.65) 0 0 0;
897 |
898 | &:first-child {
899 | padding-top: 0;
900 | }
901 | }
902 | }
903 |
904 | &.fit {
905 | width: calc(100% + #{_size(element-margin) * 0.5});
906 |
907 | li {
908 | @include vendor('flex-grow', '1');
909 | @include vendor('flex-shrink', '1');
910 | width: 100%;
911 |
912 | > * {
913 | width: 100%;
914 | }
915 | }
916 |
917 | &.stacked {
918 | width: 100%;
919 | }
920 | }
921 |
922 | @include breakpoint('<=xsmall') {
923 | &:not(.fixed) {
924 | @include vendor('flex-direction', 'column');
925 | margin-left: 0;
926 | width: 100% !important;
927 |
928 | li {
929 | @include vendor('flex-grow', '1');
930 | @include vendor('flex-shrink', '1');
931 | padding: (_size(element-margin) * 0.5) 0 0 0;
932 | text-align: center;
933 | width: 100%;
934 |
935 | > * {
936 | width: 100%;
937 | }
938 |
939 | &:first-child {
940 | padding-top: 0;
941 | }
942 |
943 | input[type="submit"],
944 | input[type="reset"],
945 | input[type="button"],
946 | button,
947 | .button {
948 | width: 100%;
949 |
950 | &.icon {
951 | &:before {
952 | margin-left: -0.5em;
953 | }
954 | }
955 | }
956 | }
957 | }
958 | }
959 | }
960 |
961 | /* Table */
962 |
963 | .table-wrapper {
964 | -webkit-overflow-scrolling: touch;
965 | overflow-x: auto;
966 | }
967 |
968 | table {
969 | margin: 0 0 _size(element-margin) 0;
970 | width: 100%;
971 |
972 | tbody {
973 | tr {
974 | border: solid 1px _palette(border);
975 | border-left: 0;
976 | border-right: 0;
977 |
978 | &:nth-child(2n + 1) {
979 | background-color: _palette(border-bg);
980 | }
981 | }
982 | }
983 |
984 | td {
985 | padding: 0.75em 0.75em;
986 | }
987 |
988 | th {
989 | color: _palette(fg-bold);
990 | font-size: 0.9em;
991 | font-weight: _font(weight-bold);
992 | padding: 0 0.75em 0.75em 0.75em;
993 | text-align: left;
994 | }
995 |
996 | thead {
997 | border-bottom: solid 1px _palette(border);
998 | }
999 |
1000 | tfoot {
1001 | border-top: solid 1px _palette(border);
1002 | }
1003 |
1004 | &.alt {
1005 | border-collapse: separate;
1006 |
1007 | tbody {
1008 | tr {
1009 | td {
1010 | border: solid 1px _palette(border);
1011 | border-left-width: 0;
1012 | border-top-width: 0;
1013 |
1014 | &:first-child {
1015 | border-left-width: 1px;
1016 | }
1017 | }
1018 |
1019 | &:first-child {
1020 | td {
1021 | border-top-width: 1px;
1022 | }
1023 | }
1024 | }
1025 | }
1026 |
1027 | thead {
1028 | border-bottom: 0;
1029 | }
1030 |
1031 | tfoot {
1032 | border-top: 0;
1033 | }
1034 | }
1035 | }
1036 |
1037 | /* Button */
1038 |
1039 | input[type="submit"],
1040 | input[type="reset"],
1041 | input[type="button"],
1042 | .button {
1043 | @include vendor('appearance', 'none');
1044 | @include vendor('transition', ('background-color #{_duration(transition)} ease-in-out', 'color #{_duration(transition)} ease-in-out', 'box-shadow #{_duration(transition)} ease-in-out'));
1045 | background-color: transparent;
1046 | border-radius: _size(border-radius);
1047 | border: 0;
1048 | box-shadow: inset 0 0 0 1px _palette(border);
1049 | color: _palette(fg-bold) !important;
1050 | cursor: pointer;
1051 | display: inline-block;
1052 | font-weight: _font(weight-bold);
1053 | height: _size(element-height);
1054 | line-height: _size(element-height);
1055 | padding: 0 2.25em;
1056 | text-align: center;
1057 | text-decoration: none;
1058 | white-space: nowrap;
1059 |
1060 | &:hover, &:active {
1061 | box-shadow: inset 0 0 0 1px _palette(accent1);
1062 | color: _palette(accent1) !important;
1063 | }
1064 |
1065 | &:active {
1066 | background-color: transparentize(_palette(accent1), 0.85);
1067 | }
1068 |
1069 | &.icon {
1070 | &:before {
1071 | margin-right: 0.5em;
1072 | }
1073 | }
1074 |
1075 | &.fit {
1076 | width: 100%;
1077 | }
1078 |
1079 | &.small {
1080 | font-size: 0.8em;
1081 | }
1082 |
1083 | &.large {
1084 | font-size: 1.35em;
1085 | }
1086 |
1087 | &.primary {
1088 | background-color: _palette(accent1);
1089 | box-shadow: none;
1090 | color: _palette(fg-bold) !important;
1091 |
1092 | &:hover {
1093 | background-color: lighten(_palette(accent1), 5);
1094 | }
1095 |
1096 | &:active {
1097 | background-color: darken(_palette(accent1), 5);
1098 | }
1099 | }
1100 |
1101 | &.disabled,
1102 | &:disabled {
1103 | background-color: _palette(border) !important;
1104 | box-shadow: none !important;
1105 | color: _palette(fg-bold) !important;
1106 | cursor: default;
1107 | opacity: 0.25;
1108 | }
1109 | }
1110 |
1111 | /* Goto Next */
1112 |
1113 | .goto-next {
1114 | border: 0;
1115 | bottom: 0;
1116 | display: block;
1117 | height: 5em;
1118 | left: 50%;
1119 | margin: 0 0 0 -5em;
1120 | overflow: hidden;
1121 | position: absolute;
1122 | text-indent: 10em;
1123 | white-space: nowrap;
1124 | width: 10em;
1125 | z-index: 1;
1126 |
1127 | &:before {
1128 | background-image: url('images/arrow.svg');
1129 | background-position: center center;
1130 | background-repeat: no-repeat;
1131 | background-size: contain;
1132 | content: '';
1133 | display: block;
1134 | height: 1.5em;
1135 | left: 50%;
1136 | margin: -0.75em 0 0 -1em;
1137 | position: absolute;
1138 | top: 50%;
1139 | width: 2em;
1140 | z-index: 1;
1141 | }
1142 | }
1143 |
1144 | /* Spotlight */
1145 |
1146 | .spotlight {
1147 | background-attachment: fixed;
1148 | background-position: center center;
1149 | background-size: cover;
1150 | box-shadow: 0 0.25em 0.5em 0 rgba(0,0,0,0.25);
1151 | height: 100vh;
1152 | overflow: hidden;
1153 | position: relative;
1154 |
1155 | // Force spotlights to stack in reverse order (needed for our box
1156 | // shadows to overlap stuff in the right direction).
1157 | @for $i from 1 through _misc(max-spotlight) {
1158 | &:nth-last-of-type(#{$i}) {
1159 | z-index: #{$i};
1160 | }
1161 | }
1162 |
1163 | &:before {
1164 | background-image: url('images/overlay.png');
1165 | content: '';
1166 | display: block;
1167 | height: 100%;
1168 | left: 0;
1169 | top: 0;
1170 | width: 100%;
1171 | }
1172 |
1173 | .image.main {
1174 | display: none;
1175 |
1176 | img {
1177 | position: relative;
1178 | }
1179 | }
1180 |
1181 | .content {
1182 | @include vendor('transform', 'translate(0,0)');
1183 | @include vendor('transition', 'transform 1s ease, opacity 1s ease');
1184 | background: _palette(bg-transparent);
1185 | border-style: solid;
1186 | opacity: 1;
1187 | position: absolute;
1188 | }
1189 |
1190 | .goto-next {
1191 | @include vendor('transform', 'translate(0,0)');
1192 | @include vendor('transition', 'transform 0.75s ease, opacity 1s ease-in');
1193 | @include vendor('transition-delay', '0.5s');
1194 | opacity: 1;
1195 | }
1196 |
1197 | &.top, &.bottom {
1198 | .content {
1199 | left: 0;
1200 | padding: ($size-wrapper-pad-tb * 0.85) 0 (($size-wrapper-pad-tb * 0.85) - _size(element-margin)) 0;
1201 | width: 100%;
1202 | }
1203 | }
1204 |
1205 | &.top {
1206 | .content {
1207 | border-bottom-width: 0.35em;
1208 | top: 0;
1209 | }
1210 | }
1211 |
1212 | &.bottom {
1213 | .content {
1214 | border-top-width: 0.35em;
1215 | bottom: 0;
1216 | }
1217 | }
1218 |
1219 | &.left, &.right {
1220 | .content {
1221 | height: 101%;
1222 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr;
1223 | top: 0;
1224 | width: 28em;
1225 | }
1226 | }
1227 |
1228 | &.left {
1229 | .content {
1230 | border-right-width: 0.35em;
1231 | left: 0;
1232 | }
1233 | }
1234 |
1235 | &.right {
1236 | .content {
1237 | border-left-width: 0.35em;
1238 | right: 0;
1239 | }
1240 | }
1241 |
1242 | &.style1 {
1243 | .content {
1244 | border-color: _palette(accent1);
1245 | }
1246 | }
1247 |
1248 | &.style2 {
1249 | .content {
1250 | border-color: _palette(accent3);
1251 | }
1252 | }
1253 |
1254 | &.style3 {
1255 | .content {
1256 | border-color: _palette(accent4);
1257 | }
1258 | }
1259 |
1260 | &.inactive {
1261 | .content {
1262 | opacity: 0;
1263 | }
1264 |
1265 | .goto-next {
1266 | @include vendor('transform', 'translate(0,1.5em)');
1267 | opacity: 0;
1268 | }
1269 |
1270 | &.top {
1271 | .content {
1272 | @include vendor('transform', 'translate(0,-5em)');
1273 | }
1274 | }
1275 |
1276 | &.bottom {
1277 | .content {
1278 | @include vendor('transform', 'translate(0,5em)');
1279 | }
1280 | }
1281 |
1282 | &.left {
1283 | .content {
1284 | @include vendor('transform', 'translate(-5em,0)');
1285 | }
1286 | }
1287 |
1288 | &.right {
1289 | .content {
1290 | @include vendor('transform', 'translate(5em,0)');
1291 | }
1292 | }
1293 | }
1294 | }
1295 |
1296 | body.is-touch {
1297 | .spotlight {
1298 | background-attachment: scroll;
1299 | }
1300 | }
1301 |
1302 | /* Wrapper */
1303 |
1304 | .wrapper {
1305 | padding: $size-wrapper-pad-tb 0 ($size-wrapper-pad-tb - _size(element-margin)) 0;
1306 |
1307 | &.style1 {
1308 | }
1309 |
1310 | &.style2 {
1311 | background: _palette(accent1);
1312 |
1313 | input[type="text"],
1314 | input[type="password"],
1315 | input[type="email"],
1316 | select,
1317 | textarea {
1318 | &:focus {
1319 | border-color: _palette(border2);
1320 | }
1321 | }
1322 |
1323 | input[type="submit"],
1324 | input[type="reset"],
1325 | input[type="button"],
1326 | .button {
1327 | &:hover, &:active {
1328 | background-color: _palette(border-bg) !important;
1329 | box-shadow: inset 0 0 0 1px _palette(border2) !important;
1330 | color: _palette(fg-bold) !important;
1331 | }
1332 |
1333 | &:active {
1334 | background-color: _palette(border2-bg) !important;
1335 | }
1336 |
1337 | &.primary {
1338 | background-color: _palette(fg-bold);
1339 | color: _palette(accent1) !important;
1340 |
1341 | &:hover, &:active {
1342 | background-color: _palette(border-bg) !important;
1343 | box-shadow: inset 0 0 0 1px _palette(border2) !important;
1344 | color: _palette(fg-bold) !important;
1345 | }
1346 |
1347 | &:active {
1348 | background-color: _palette(border2-bg) !important;
1349 | }
1350 | }
1351 | }
1352 | }
1353 |
1354 | &.fade-down {
1355 | > .container {
1356 | @include vendor('transform', 'translate(0,0)');
1357 | @include vendor('transition', 'transform 1s ease, opacity 1s ease');
1358 | opacity: 1;
1359 | }
1360 |
1361 | &.inactive {
1362 | > .container {
1363 | @include vendor('transform', 'translate(0,-1em)');
1364 | opacity: 0;
1365 | }
1366 | }
1367 | }
1368 |
1369 | &.fade-up {
1370 | > .container {
1371 | @include vendor('transform', 'translate(0,0)');
1372 | @include vendor('transition', 'transform 1s ease, opacity 1s ease');
1373 | opacity: 1;
1374 | }
1375 |
1376 | &.inactive {
1377 | > .container {
1378 | @include vendor('transform', 'translate(0,1em)');
1379 | opacity: 0;
1380 | }
1381 | }
1382 | }
1383 |
1384 | &.fade {
1385 | > .container {
1386 | @include vendor('transition', 'opacity 1s ease');
1387 | opacity: 1;
1388 | }
1389 |
1390 | &.inactive {
1391 | > .container {
1392 | opacity: 0;
1393 | }
1394 | }
1395 | }
1396 | }
1397 |
1398 | /* Dropotron */
1399 |
1400 | .dropotron {
1401 | background: _palette(accent2-transparent);
1402 | border-radius: _size(border-radius);
1403 | box-shadow: 0 0.075em 0.35em 0 rgba(0,0,0,0.125);
1404 | list-style: none;
1405 | margin-top: calc(-0.25em + 1px);
1406 | min-width: 12em;
1407 | padding: 0.25em 0;
1408 |
1409 | > li {
1410 | border-top: solid 1px rgba(255,255,255,0.035);
1411 | padding: 0;
1412 |
1413 | a, span {
1414 | border: 0;
1415 | color: _palette(fg);
1416 | display: block;
1417 | padding: 0.1em 1em;
1418 | text-decoration: none;
1419 | }
1420 |
1421 | &:first-child {
1422 | border-top: 0;
1423 | }
1424 |
1425 | &.active {
1426 | > a, > span {
1427 | color: _palette(accent1);
1428 | }
1429 | }
1430 | }
1431 |
1432 | &.level-0 {
1433 | font-size: 0.8em;
1434 | margin-top: 1em;
1435 |
1436 | &:before {
1437 | @include vendor('transform', 'rotate(45deg)');
1438 | background: _palette(accent2);
1439 | content: '';
1440 | display: block;
1441 | height: 1em;
1442 | position: absolute;
1443 | right: 1.5em;
1444 | top: -0.5em;
1445 | width: 1em;
1446 | }
1447 | }
1448 | }
1449 |
1450 | body.landing {
1451 | .dropotron {
1452 | &.level-0 {
1453 | margin-top: 0;
1454 | }
1455 | }
1456 | }
1457 |
1458 | /* Header */
1459 |
1460 | #page-wrapper {
1461 | padding-top: 3.5em;
1462 | }
1463 |
1464 | #header {
1465 | background: _palette(accent2-transparent);
1466 | box-shadow: 0 0 0.25em 0 rgba(0,0,0,0.25);
1467 | cursor: default;
1468 | height: 3.5em;
1469 | left: 0;
1470 | line-height: 3.5em;
1471 | position: fixed;
1472 | top: 0;
1473 | width: 100%;
1474 | z-index: 100;
1475 |
1476 | h1 {
1477 | height: inherit;
1478 | left: 1.25em;
1479 | line-height: inherit;
1480 | margin: 0;
1481 | position: absolute;
1482 | top: 0;
1483 | }
1484 |
1485 | nav {
1486 | position: absolute;
1487 | right: 1em;
1488 | top: 0;
1489 |
1490 | ul {
1491 | margin: 0;
1492 |
1493 | li {
1494 | display: inline-block;
1495 | margin-left: 1em;
1496 |
1497 | a, span {
1498 | border: 0;
1499 | color: inherit;
1500 | display: inline-block;
1501 | height: inherit;
1502 | line-height: inherit;
1503 | outline: 0;
1504 |
1505 | &.button {
1506 | height: 2em;
1507 | line-height: 2em;
1508 | padding: 0 1.25em;
1509 | }
1510 |
1511 | &:not(.button):before {
1512 | margin-right: 0.5em;
1513 | }
1514 | }
1515 |
1516 | &.active {
1517 | > a, > span {
1518 | color: _palette(accent1);
1519 | }
1520 | }
1521 |
1522 | > ul {
1523 | display: none;
1524 | }
1525 | }
1526 | }
1527 | }
1528 | }
1529 |
1530 | body.landing {
1531 | #page-wrapper {
1532 | padding-top: 0;
1533 | }
1534 |
1535 | #header {
1536 | background: transparent;
1537 | box-shadow: none;
1538 | position: absolute;
1539 | }
1540 | }
1541 |
1542 | /* Banner */
1543 |
1544 | #banner {
1545 | background-attachment: fixed;
1546 | background-color: _palette(accent2);
1547 | background-image: url('../../images/banner.jpg');
1548 | background-position: center center;
1549 | background-size: cover;
1550 | box-shadow: 0 0.25em 0.5em 0 rgba(0,0,0,0.25);
1551 | min-height: 100vh;
1552 | position: relative;
1553 | text-align: center;
1554 | z-index: (_misc(max-spotlight) + 1);
1555 |
1556 | &:before {
1557 | content: '';
1558 | display: inline-block;
1559 | height: 100vh;
1560 | vertical-align: middle;
1561 | width: 1%;
1562 | }
1563 |
1564 | &:after {
1565 | @include vendor('background-image', ('linear-gradient(top, #{_palette(bg-transparent)}, #{_palette(bg-transparent)})', 'url("images/overlay.png");'));
1566 | content: '';
1567 | display: block;
1568 | height: 100%;
1569 | left: 0;
1570 | position: absolute;
1571 | top: 0;
1572 | width: 100%;
1573 | }
1574 |
1575 | .content {
1576 | display: inline-block;
1577 | margin-right: 1%;
1578 | max-width: 95%;
1579 | padding: $size-wrapper-pad-tb;
1580 | position: relative;
1581 | text-align: right;
1582 | vertical-align: middle;
1583 | z-index: 1;
1584 |
1585 | header {
1586 | display: inline-block;
1587 | vertical-align: middle;
1588 |
1589 | h2 {
1590 | font-size: 2.5em;
1591 | margin: 0;
1592 | }
1593 |
1594 | p {
1595 | margin: (_size(element-margin) * 0.25) 0 0 0;
1596 | top: 0;
1597 | }
1598 | }
1599 |
1600 | .image {
1601 | border-radius: 100%;
1602 | display: inline-block;
1603 | height: 18em;
1604 | margin-left: 3em;
1605 | vertical-align: middle;
1606 | width: 18em;
1607 |
1608 | img {
1609 | border-radius: 100%;
1610 | display: block;
1611 | width: 100%;
1612 | }
1613 | }
1614 | }
1615 | }
1616 |
1617 | body.is-touch {
1618 | #banner {
1619 | background-attachment: scroll;
1620 | }
1621 | }
1622 |
1623 | /* Footer */
1624 |
1625 | #footer {
1626 | background: _palette(accent2);
1627 | padding: $size-wrapper-pad-tb 0;
1628 | text-align: center;
1629 |
1630 | .icons {
1631 | .icon {
1632 | &.alt {
1633 | @include line-icon(_palette(accent2), _palette(fg-light));
1634 | }
1635 | }
1636 | }
1637 |
1638 | .copyright {
1639 | color: _palette(fg-light);
1640 | font-size: 0.8em;
1641 | line-height: 1em;
1642 | margin: 2em 0 0 0;
1643 | padding: 0;
1644 | text-align: center;
1645 |
1646 | li {
1647 | border-left: solid 1px _palette(border);
1648 | display: inline-block;
1649 | list-style: none;
1650 | margin-left: 1.5em;
1651 | padding-left: 1.5em;
1652 |
1653 | &:first-child {
1654 | border-left: 0;
1655 | margin-left: 0;
1656 | padding-left: 0;
1657 | }
1658 |
1659 | a {
1660 | color: inherit;
1661 | }
1662 | }
1663 | }
1664 | }
1665 |
1666 | /* XLarge */
1667 |
1668 | @include breakpoint('<=xlarge') {
1669 |
1670 | /* Basic */
1671 |
1672 | body, input, select, textarea {
1673 | font-size: 13pt;
1674 | }
1675 |
1676 | }
1677 |
1678 | /* Large */
1679 |
1680 | @include breakpoint('<=large') {
1681 |
1682 | $size-wrapper-pad-tb: 4.5em;
1683 | $size-wrapper-pad-lr: 2.5em;
1684 |
1685 | /* Basic */
1686 |
1687 | body, input, select, textarea {
1688 | font-size: 11.5pt;
1689 | }
1690 |
1691 | /* Spotlight */
1692 |
1693 | .spotlight {
1694 | &.top {
1695 | .content {
1696 | padding: ($size-wrapper-pad-tb * 0.85) 0 (($size-wrapper-pad-tb * 0.85) - _size(element-margin)) 0;
1697 | }
1698 | }
1699 |
1700 | &.bottom {
1701 | .content {
1702 | padding: ($size-wrapper-pad-tb * 0.85) 0 (($size-wrapper-pad-tb * 1.1) - _size(element-margin)) 0;
1703 | }
1704 | }
1705 |
1706 | &.left, &.right {
1707 | .content {
1708 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr;
1709 | width: 25em;
1710 | }
1711 | }
1712 | }
1713 |
1714 | /* Wrapper */
1715 |
1716 | .wrapper {
1717 | padding: $size-wrapper-pad-tb 0 ($size-wrapper-pad-tb - _size(element-margin)) 0;
1718 | }
1719 |
1720 | /* Dropotron */
1721 |
1722 | .dropotron {
1723 | &.level-0 {
1724 | font-size: 1em;
1725 | }
1726 | }
1727 |
1728 | /* Banner */
1729 |
1730 | #banner {
1731 | .content {
1732 | padding: $size-wrapper-pad-tb;
1733 | }
1734 | }
1735 |
1736 | /* Footer */
1737 |
1738 | #footer {
1739 | padding: $size-wrapper-pad-tb 0;
1740 | }
1741 |
1742 | }
1743 |
1744 | /* Medium */
1745 |
1746 | @include breakpoint('<=medium') {
1747 |
1748 | $size-wrapper-pad-tb: 4.5em;
1749 | $size-wrapper-pad-lr: 2.5em;
1750 |
1751 | /* Basic */
1752 |
1753 | body, input, select, textarea {
1754 | font-size: 12pt;
1755 | }
1756 |
1757 | /* Spotlight */
1758 |
1759 | .spotlight {
1760 | background-attachment: scroll;
1761 | height: auto;
1762 |
1763 | .image.main {
1764 | display: block;
1765 | margin: 0;
1766 | max-height: 40vh;
1767 | overflow: hidden;
1768 | }
1769 |
1770 | .content {
1771 | background-color: _palette(bg);
1772 | border-width: 0 !important;
1773 | border-top-width: 0.35em !important;
1774 | bottom: auto !important;
1775 | left: auto !important;
1776 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr ($size-wrapper-pad-tb - _size(element-margin)) $size-wrapper-pad-lr !important;
1777 | position: relative;
1778 | right: auto !important;
1779 | text-align: center;
1780 | top: auto !important;
1781 | width: 100% !important;
1782 |
1783 | ul.actions {
1784 | @include vendor('justify-content', 'center');
1785 | width: 100%;
1786 | margin-left: 0;
1787 |
1788 | li {
1789 | &:first-child {
1790 | padding-left: 0;
1791 | }
1792 | }
1793 | }
1794 | }
1795 |
1796 | .goto-next {
1797 | display: none;
1798 | }
1799 | }
1800 |
1801 | /* Wrapper */
1802 |
1803 | .wrapper {
1804 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr ($size-wrapper-pad-tb - _size(element-margin)) $size-wrapper-pad-lr;
1805 | }
1806 |
1807 | /* Banner */
1808 |
1809 | #banner {
1810 | background-attachment: scroll;
1811 |
1812 | .goto-next {
1813 | height: 7em;
1814 | }
1815 |
1816 | .content {
1817 | padding: ($size-wrapper-pad-tb * 2) 0;
1818 | text-align: center;
1819 |
1820 | header {
1821 | display: block;
1822 | margin: 0 0 _size(element-margin) 0;
1823 | text-align: center;
1824 | }
1825 |
1826 | .image {
1827 | margin: 0;
1828 | }
1829 | }
1830 | }
1831 |
1832 | /* Footer */
1833 |
1834 | #footer {
1835 | padding: $size-wrapper-pad-tb 0;
1836 | }
1837 |
1838 | }
1839 |
1840 | /* Small */
1841 |
1842 | #navPanel, #titleBar {
1843 | display: none;
1844 | }
1845 |
1846 | @include breakpoint('<=small') {
1847 |
1848 | $size-wrapper-pad-tb: 3.25em;
1849 | $size-wrapper-pad-lr: 1.5em;
1850 |
1851 | /* Basic */
1852 |
1853 | html, body {
1854 | overflow-x: hidden;
1855 | }
1856 |
1857 | body, input, select, textarea {
1858 | font-size: 12pt;
1859 | }
1860 |
1861 | h2 {
1862 | font-size: 1.5em;
1863 | }
1864 |
1865 | h3 {
1866 | font-size: 1.2em;
1867 | }
1868 |
1869 | h4 {
1870 | font-size: 1em;
1871 | }
1872 |
1873 | /* Section/Article */
1874 |
1875 | header {
1876 | p {
1877 | br {
1878 | display: none;
1879 | }
1880 | }
1881 |
1882 | h2 + p {
1883 | font-size: 1em;
1884 | }
1885 |
1886 | h3 + p {
1887 | font-size: 1em;
1888 | }
1889 |
1890 | h4 + p,
1891 | h5 + p,
1892 | h6 + p {
1893 | font-size: 0.9em;
1894 | }
1895 |
1896 | &.major {
1897 | margin: 0 0 _size(element-margin) 0;
1898 | }
1899 | }
1900 |
1901 | /* Goto Next */
1902 |
1903 | .goto-next {
1904 | &:before {
1905 | height: 0.8em;
1906 | margin: -0.4em 0 0 -0.6em;
1907 | width: 1.2em;
1908 | }
1909 | }
1910 |
1911 | /* Spotlight */
1912 |
1913 | .spotlight {
1914 | box-shadow: 0 0.125em 0.5em 0 rgba(0,0,0,0.25);
1915 |
1916 | .image.main {
1917 | max-height: 60vh;
1918 | }
1919 |
1920 | .content {
1921 | border-top-width: 0.2em !important;
1922 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr ($size-wrapper-pad-tb - _size(element-margin)) $size-wrapper-pad-lr !important;
1923 | }
1924 | }
1925 |
1926 | /* Wrapper */
1927 |
1928 | .wrapper {
1929 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr ($size-wrapper-pad-tb - _size(element-margin)) $size-wrapper-pad-lr;
1930 | }
1931 |
1932 | /* Header */
1933 |
1934 | #header {
1935 | display: none;
1936 | }
1937 |
1938 | /* Banner */
1939 |
1940 | #banner {
1941 | box-shadow: 0 0.125em 0.5em 0 rgba(0,0,0,0.25);
1942 | min-height: calc(100vh - 44px);
1943 |
1944 | &:before {
1945 | height: calc(100vh - 44px);
1946 | }
1947 |
1948 | .content {
1949 | padding: ($size-wrapper-pad-tb * 1.25) $size-wrapper-pad-lr ($size-wrapper-pad-tb * 1.5) $size-wrapper-pad-lr;
1950 |
1951 | header {
1952 | h2 {
1953 | font-size: 1.5em;
1954 | }
1955 | }
1956 |
1957 | .image {
1958 | height: 9em;
1959 | width: 9em;
1960 | }
1961 | }
1962 | }
1963 |
1964 | /* Nav */
1965 |
1966 | #page-wrapper {
1967 | @include vendor('backface-visibility', 'hidden');
1968 | @include vendor('transition', 'transform #{_duration(navPanel)} ease');
1969 | padding-bottom: 1px;
1970 | padding-top: 44px !important;
1971 | }
1972 |
1973 | #titleBar {
1974 | @include vendor('backface-visibility', 'hidden');
1975 | @include vendor('transition', 'transform #{_duration(navPanel)} ease');
1976 | display: block;
1977 | height: 44px;
1978 | left: 0;
1979 | position: fixed;
1980 | top: 0;
1981 | width: 100%;
1982 | z-index: _misc(z-index-base) + 1;
1983 | background: _palette(accent2);
1984 | box-shadow: 0 0.125em 0.125em 0 rgba(0,0,0,0.125);
1985 |
1986 | .title {
1987 | color: _palette(fg-bold);
1988 | display: block;
1989 | font-weight: _font(weight-bold);
1990 | height: 44px;
1991 | line-height: 44px;
1992 | text-align: center;
1993 |
1994 | a {
1995 | color: inherit;
1996 | border: 0;
1997 | }
1998 | }
1999 |
2000 | .toggle {
2001 | @include icon(false, solid);
2002 | height: 60px;
2003 | left: 0;
2004 | position: absolute;
2005 | top: 0;
2006 | width: 90px;
2007 | outline: 0;
2008 | border: 0;
2009 |
2010 | &:before {
2011 | background: _palette(accent1);
2012 | color: _palette(fg-light);
2013 | content: '\f0c9';
2014 | display: block;
2015 | font-size: 18px;
2016 | height: 44px;
2017 | left: 0;
2018 | line-height: 44px;
2019 | position: absolute;
2020 | text-align: center;
2021 | top: 0;
2022 | width: 54px;
2023 | }
2024 | }
2025 | }
2026 |
2027 | #navPanel {
2028 | @include vendor('backface-visibility', 'hidden');
2029 | @include vendor('transform', 'translateX(#{_size(navPanel) * -1})');
2030 | @include vendor('transition', ('transform #{_duration(navPanel)} ease'));
2031 | display: block;
2032 | height: 100%;
2033 | left: 0;
2034 | overflow-y: auto;
2035 | position: fixed;
2036 | top: 0;
2037 | width: _size(navPanel);
2038 | z-index: _misc(z-index-base) + 2;
2039 | background: darken(_palette(bg), 2);
2040 | padding: 0.75em 1.25em;
2041 |
2042 | .link {
2043 | border: 0;
2044 | border-top: solid 1px transparentize(_palette(border), 0.25);
2045 | color: _palette(fg);
2046 | display: block;
2047 | height: 3em;
2048 | line-height: 3em;
2049 | text-decoration: none;
2050 |
2051 | &:hover {
2052 | color: inherit !important;
2053 | }
2054 |
2055 | &:first-child {
2056 | border-top: 0;
2057 | }
2058 |
2059 | &.depth-0 {
2060 | color: _palette(fg-bold);
2061 | font-weight: _font(weight-bold);
2062 | }
2063 |
2064 | .indent-1 { display: inline-block; width: 1.25em; }
2065 | .indent-2 { display: inline-block; width: 2.5em; }
2066 | .indent-3 { display: inline-block; width: 3.75em; }
2067 | .indent-4 { display: inline-block; width: 5em; }
2068 | .indent-5 { display: inline-block; width: 6.25em; }
2069 | }
2070 | }
2071 |
2072 | body {
2073 | &.navPanel-visible {
2074 | #page-wrapper {
2075 | @include vendor('transform', 'translateX(#{_size(navPanel)})');
2076 | }
2077 |
2078 | #titleBar {
2079 | @include vendor('transform', 'translateX(#{_size(navPanel)})');
2080 | }
2081 |
2082 | #navPanel {
2083 | @include vendor('transform', 'translateX(0)');
2084 | }
2085 | }
2086 | }
2087 |
2088 | /* Footer */
2089 |
2090 | #footer {
2091 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr;
2092 | }
2093 |
2094 | }
2095 |
2096 | /* XSmall */
2097 |
2098 | @include breakpoint('<=xsmall') {
2099 |
2100 | $size-wrapper-pad-tb: 3em;
2101 | $size-wrapper-pad-lr: 1.25em;
2102 |
2103 | /* Basic */
2104 |
2105 | html, body {
2106 | min-width: 320px;
2107 | }
2108 |
2109 | body, input, select, textarea {
2110 | font-size: 12pt;
2111 | }
2112 |
2113 | /* Button */
2114 |
2115 | input[type="submit"],
2116 | input[type="reset"],
2117 | input[type="button"],
2118 | .button {
2119 | padding: 0;
2120 | }
2121 |
2122 | /* Spotlight */
2123 |
2124 | .spotlight {
2125 | .image.main {
2126 | max-height: 50vh;
2127 | }
2128 |
2129 | .content {
2130 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr ($size-wrapper-pad-tb - _size(element-margin)) $size-wrapper-pad-lr !important;
2131 | }
2132 | }
2133 |
2134 | /* Wrapper */
2135 |
2136 | .wrapper {
2137 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr ($size-wrapper-pad-tb - _size(element-margin)) $size-wrapper-pad-lr;
2138 | }
2139 |
2140 | /* Banner */
2141 |
2142 | #banner {
2143 | .content {
2144 | padding: $size-wrapper-pad-tb ($size-wrapper-pad-lr * 1.25) ($size-wrapper-pad-tb * 1.75) ($size-wrapper-pad-lr * 1.25);
2145 | }
2146 | }
2147 |
2148 | /* Footer */
2149 |
2150 | #footer {
2151 | padding: $size-wrapper-pad-tb $size-wrapper-pad-lr;
2152 |
2153 | .copyright {
2154 | line-height: inherit;
2155 |
2156 | li {
2157 | border-left: 0;
2158 | display: block;
2159 | margin: 0;
2160 | padding: 0;
2161 | }
2162 | }
2163 | }
2164 |
2165 | }
--------------------------------------------------------------------------------
/public/assets/sass/noscript.scss:
--------------------------------------------------------------------------------
1 | @import 'libs/vars';
2 | @import 'libs/functions';
3 | @import 'libs/mixins';
4 | @import 'libs/vendor';
5 | @import 'libs/breakpoints';
6 | @import 'libs/html-grid';
7 |
8 | /*
9 | Landed by HTML5 UP
10 | html5up.net | @ajlkn
11 | Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
12 | */
13 |
14 | /* Loader */
15 |
16 | body.landing {
17 |
18 | &.is-preload {
19 |
20 | // Spinner (active)
21 |
22 | &:before {
23 | display: none;
24 | }
25 |
26 | // Overlay (active)
27 |
28 | &:after {
29 | display: none;
30 | }
31 |
32 | }
33 | }
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-brands-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-brands-400.eot
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-brands-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-brands-400.ttf
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-brands-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-brands-400.woff
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-brands-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-brands-400.woff2
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-regular-400.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-regular-400.eot
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-regular-400.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-regular-400.ttf
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-regular-400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-regular-400.woff
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-regular-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-regular-400.woff2
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-solid-900.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-solid-900.eot
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-solid-900.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-solid-900.ttf
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-solid-900.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-solid-900.woff
--------------------------------------------------------------------------------
/public/assets/webfonts/fa-solid-900.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/assets/webfonts/fa-solid-900.woff2
--------------------------------------------------------------------------------
/public/images/banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/banner.jpg
--------------------------------------------------------------------------------
/public/images/cabin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/cabin.jpg
--------------------------------------------------------------------------------
/public/images/mountain1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/mountain1.jpg
--------------------------------------------------------------------------------
/public/images/mountain2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/mountain2.jpg
--------------------------------------------------------------------------------
/public/images/mountain3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/mountain3.jpg
--------------------------------------------------------------------------------
/public/images/palm1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/palm1.jpeg
--------------------------------------------------------------------------------
/public/images/palm2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/palm2.jpg
--------------------------------------------------------------------------------
/public/images/palm3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/palm3.jpg
--------------------------------------------------------------------------------
/public/images/pic01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic01.jpg
--------------------------------------------------------------------------------
/public/images/pic02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic02.jpg
--------------------------------------------------------------------------------
/public/images/pic03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic03.jpg
--------------------------------------------------------------------------------
/public/images/pic04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic04.jpg
--------------------------------------------------------------------------------
/public/images/pic05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic05.jpg
--------------------------------------------------------------------------------
/public/images/pic06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic06.jpg
--------------------------------------------------------------------------------
/public/images/pic07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic07.jpg
--------------------------------------------------------------------------------
/public/images/pic08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/images/pic08.jpg
--------------------------------------------------------------------------------
/public/img/savage21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CharlesCreativeContent/Demo-Day/5edaca7e552d2687131152ccfd3a63de716f6ab0/public/img/savage21.jpg
--------------------------------------------------------------------------------
/public/main.js:
--------------------------------------------------------------------------------
1 |
2 | var trash = document.getElementsByClassName("fa-trash");
3 |
4 |
5 | Array.from(trash).forEach(function(element) {
6 | element.addEventListener('click', function(){
7 | const name = this.parentNode.parentNode.childNodes[1].innerText
8 | const msg = this.parentNode.parentNode.childNodes[3].innerText
9 | fetch('messages', {
10 | method: 'delete',
11 | headers: {
12 | 'Content-Type': 'application/json'
13 | },
14 | body: JSON.stringify({
15 | 'name': name,
16 | 'msg': msg
17 | })
18 | }).then(function (response) {
19 | window.location.reload()
20 | })
21 | });
22 | });
23 |
24 | //Will Move this server side if I can, but AIRBNB is making it hard to make a query directly from the server //
25 | //More Notes in routes.js //
26 | fetch("https://mashvisor-api.p.rapidapi.com/airbnb-property/top-reviewed?page=1&city=Los%20Angeles&reviews_count=30&zip_code=91342&state=CA", {
27 | "method": "GET",
28 | "headers": {
29 | "x-rapidapi-host": "mashvisor-api.p.rapidapi.com",
30 | "x-rapidapi-key": "3ae1d00c97msh298612aebb81230p11684djsn405007844583"
31 | }
32 | })
33 | .then(response => response.json())
34 | .then(data => {
35 | console.log("Couldn't get everything into the Server yet, hoping I will figure it out Soon. More Notes in routes.js")
36 | console.log(data.content.list)
37 | data.content.list.forEach(x=>{
38 | let listItem = document.createElement('li')
39 | let title = document.createElement('h4')
40 | let titleContent = document.createTextNode(`${x.name}`)
41 | title.appendChild(titleContent)
42 | listItem.appendChild(title)
43 | let address = document.createElement('h6')
44 | let addressContent = document.createTextNode(`${x.address} | ${x.star_rating}`)
45 | address.appendChild(addressContent)
46 | let star = document.createElement('i')
47 | star.classList = "fa fa-star"
48 | address.appendChild(star)
49 | listItem.appendChild(address)
50 | let image = document.createElement('img')
51 | image.src = x.picture_url
52 | listItem.appendChild(image)
53 | let img2 = document.createElement('img')
54 | img2.src = x.map_image_url
55 | listItem.appendChild(img2)
56 | let description = document.createElement('p')
57 | let desContent = document.createTextNode(`${x.summary}`)
58 | description.appendChild(desContent)
59 | listItem.appendChild(description)
60 | document.querySelector('ol').appendChild(listItem)
61 | })
62 | })
63 |
--------------------------------------------------------------------------------
/public/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | padding-top:80px;
3 | word-wrap:break-word;
4 | }
5 | img{
6 | height: 200px;
7 | }
8 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | // server.js
2 |
3 | // set up ======================================================================
4 | // get all the tools we need
5 | var express = require('express');
6 | var app = express();
7 | var port = process.env.PORT || 8080;
8 | const MongoClient = require('mongodb').MongoClient
9 | var mongoose = require('mongoose');
10 | var passport = require('passport');
11 | var flash = require('connect-flash');
12 |
13 | var morgan = require('morgan');
14 | var cookieParser = require('cookie-parser');
15 | var bodyParser = require('body-parser');
16 | var session = require('express-session');
17 |
18 |
19 | var configDB = require('./config/database.js');
20 |
21 | var db
22 |
23 | // configuration ===============================================================
24 | mongoose.connect(configDB.url, (err, database) => {
25 | if (err) return console.log(err)
26 | db = database
27 | require('./app/routes.js')(app, passport, db);
28 | }); // connect to our database
29 |
30 | //app.listen(port, () => {
31 | // MongoClient.connect(configDB.url, { useNewUrlParser: true }, (error, client) => {
32 | // if(error) {
33 | // throw error;
34 | // }
35 | // db = client.db(configDB.dbName);
36 | // console.log("Connected to `" + configDB.dbName + "`!");
37 | // require('./app/routes.js')(app, passport, db);
38 | // });
39 | //});
40 |
41 | require('./config/passport')(passport); // pass passport for configuration
42 |
43 | // set up our express application
44 | app.use(morgan('dev')); // log every request to the console
45 | app.use(cookieParser()); // read cookies (needed for auth)
46 | app.use(bodyParser.json()); // get information from html forms
47 | app.use(bodyParser.urlencoded({ extended: true }));
48 | app.use(express.static('public'))
49 |
50 | app.set('view engine', 'ejs'); // set up ejs for templating
51 |
52 | // required for passport
53 | app.use(session({
54 | secret: 'rcbootcamp2019a', // session secret
55 | resave: true,
56 | saveUninitialized: true
57 | }));
58 | app.use(passport.initialize());
59 | app.use(passport.session()); // persistent login sessions
60 | app.use(flash()); // use connect-flash for flash messages stored in session
61 |
62 |
63 | // routes ======================================================================
64 | //require('./app/routes.js')(app, passport, db); // load our routes and pass in our app and fully configured passport
65 |
66 | // launch ======================================================================
67 | app.listen(port);
68 | console.log('The magic happens on port ' + port);
69 |
--------------------------------------------------------------------------------
/views/connect-local.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 Savage Fan Site
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
Add Local Account
14 |
15 | <% if (message.length > 0) { %>
16 |
<%= message %>
17 | <% } %>
18 |
19 |
20 |
32 |
33 |
34 |
35 |
Go back to profile
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
Lucid Dream Vacations
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
40 | Next
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | Unmacthed Quality
52 |
53 |
All reviews are 5 stars, we have no unhappy customers. We are absolutely the best! You Can Believe Us, We wouldn't lie to you!
54 |
55 |
56 |
57 |
Some Stuff about our Amazingness!
58 |
59 |
60 |
Save Time and Money
61 |
You will reclaim those countless wasted hours researching or talking to a travel agent. If our unmatched quality isn't a selling point for you, maybe saving time and money is!
62 |
63 |
64 |
65 |
66 | Next
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | Something goes here, but I'm to tired to make something up
75 | Imagine you are on a mountain, looking out of the window of your log cabin, sipping on some hot coco with 2 marshmellows!
76 |
77 |
Your so close to the vacation you could probably taste it!
78 |
81 |
82 | Next
83 |
84 |
85 |
86 |
87 |
88 |
89 |
93 |
Something Witty!
94 |
97 |
98 | Next
99 |
100 |
101 |
102 |
149 |
150 |
151 |
165 |
166 |
167 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
--------------------------------------------------------------------------------
/views/login.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 Savage Fan Site
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Login
17 |
18 | <% if (message.length > 0) { %>
19 |
<%= message %>
20 | <% } %>
21 |
22 |
23 |
35 |
36 |
37 |
38 |
Need an account? Signup
39 |
Or go home .
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/views/profile.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 Savage Fan Site
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
20 |
21 |
22 |
23 |
Messages
24 |
25 | <% for(var i=0; i
26 |
27 | <%= messages[i].name %>
28 | <%= messages[i].msg %>
29 | <%= messages[i].thumbUp %>
30 |
31 |
32 |
33 |
34 | <% } %>
35 |
36 |
37 |
Add a message
38 | <% if (user.local.email) { %>
39 |
44 |
45 | <% } %>
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
60 |
--------------------------------------------------------------------------------
/views/signup.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
21 Savage Fan Site
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Signup
17 |
18 | <% if (message.length > 0) { %>
19 |
<%= message %>
20 | <% } %>
21 |
22 |
23 |
35 |
36 |
37 |
38 |
Already have an account? Login
39 |
Or go home .
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------