jekflix 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +125 -0
  4. data/_includes/author.html +87 -0
  5. data/_includes/comments.html +30 -0
  6. data/_includes/date.html +4 -0
  7. data/_includes/extra-css.html +0 -0
  8. data/_includes/extra-js.html +0 -0
  9. data/_includes/footer.html +91 -0
  10. data/_includes/head.html +97 -0
  11. data/_includes/header.html +27 -0
  12. data/_includes/links.html +9 -0
  13. data/_includes/loader.html +31 -0
  14. data/_includes/logo.html +3 -0
  15. data/_includes/menu.html +6 -0
  16. data/_includes/minutes-to-read.html +9 -0
  17. data/_includes/modal.html +35 -0
  18. data/_includes/new-post-tag.html +6 -0
  19. data/_includes/pagination-home.html +14 -0
  20. data/_includes/pagination-post.html +21 -0
  21. data/_includes/progress-bar.html +8 -0
  22. data/_includes/read-icon.html +3 -0
  23. data/_includes/recommendation.html +30 -0
  24. data/_includes/search.html +7 -0
  25. data/_includes/share.html +11 -0
  26. data/_includes/stats.html +12 -0
  27. data/_includes/subscription.html +1 -0
  28. data/_includes/svg-icons.html +1 -0
  29. data/_includes/time-bar.html +8 -0
  30. data/_includes/toc.html +1 -0
  31. data/_layouts/404.html +18 -0
  32. data/_layouts/author.html +68 -0
  33. data/_layouts/category.html +71 -0
  34. data/_layouts/compress.html +8 -0
  35. data/_layouts/contact.html +94 -0
  36. data/_layouts/default.html +17 -0
  37. data/_layouts/home.html +187 -0
  38. data/_layouts/main.html +28 -0
  39. data/_layouts/message-sent.html +18 -0
  40. data/_layouts/minimal.html +18 -0
  41. data/_layouts/page.html +11 -0
  42. data/_layouts/post.html +154 -0
  43. data/_layouts/search.html +15 -0
  44. data/_layouts/tags.html +38 -0
  45. data/_sass/_animations.scss +65 -0
  46. data/_sass/_author.scss +91 -0
  47. data/_sass/_elements.scss +3 -0
  48. data/_sass/_footer.scss +98 -0
  49. data/_sass/_form.scss +69 -0
  50. data/_sass/_functions.scss +3 -0
  51. data/_sass/_header.scss +150 -0
  52. data/_sass/_hero.scss +108 -0
  53. data/_sass/_highlight.scss +140 -0
  54. data/_sass/_home.scss +218 -0
  55. data/_sass/_icons.scss +45 -0
  56. data/_sass/_include-media.scss +569 -0
  57. data/_sass/_menu.scss +90 -0
  58. data/_sass/_mixins.scss +51 -0
  59. data/_sass/_modal.scss +154 -0
  60. data/_sass/_no-js.scss +9 -0
  61. data/_sass/_normalize.scss +238 -0
  62. data/_sass/_pagination.scss +90 -0
  63. data/_sass/_post.scss +722 -0
  64. data/_sass/_search.scss +138 -0
  65. data/_sass/_share.scss +37 -0
  66. data/_sass/_staff.scss +38 -0
  67. data/_sass/_theme.scss +7 -0
  68. data/_sass/_typo.scss +7 -0
  69. data/_sass/_variables.scss +24 -0
  70. data/_sass/jekflix.scss +1 -0
  71. data/_sass/main.scss +25 -0
  72. data/_sass/preview.scss +310 -0
  73. metadata +199 -0
@@ -0,0 +1,569 @@
1
+ @charset "UTF-8";
2
+
3
+ // _ _ _ _ _
4
+ // (_) | | | | | (_)
5
+ // _ _ __ ___| |_ _ __| | ___ _ __ ___ ___ __| |_ __ _
6
+ // | | '_ \ / __| | | | |/ _` |/ _ \ | '_ ` _ \ / _ \/ _` | |/ _` |
7
+ // | | | | | (__| | |_| | (_| | __/ | | | | | | __/ (_| | | (_| |
8
+ // |_|_| |_|\___|_|\__,_|\__,_|\___| |_| |_| |_|\___|\__,_|_|\__,_|
9
+ //
10
+ // Simple, elegant and maintainable media queries in Sass
11
+ // v1.4.9
12
+ //
13
+ // http://include-media.com
14
+ //
15
+ // Authors: Eduardo Boucas (@eduardoboucas)
16
+ // Hugo Giraudel (@hugogiraudel)
17
+ //
18
+ // This project is licensed under the terms of the MIT license
19
+
20
+
21
+ ////
22
+ /// include-media library public configuration
23
+ /// @author Eduardo Boucas
24
+ /// @access public
25
+ ////
26
+
27
+
28
+ ///
29
+ /// Creates a list of global breakpoints
30
+ ///
31
+ /// @example scss - Creates a single breakpoint with the label `phone`
32
+ /// $breakpoints: ('phone': 320px);
33
+ ///
34
+ $breakpoints: (
35
+ 'phone': 320px,
36
+ 'tablet': 768px,
37
+ 'desktop': 1024px
38
+ ) !default;
39
+
40
+
41
+ ///
42
+ /// Creates a list of static expressions or media types
43
+ ///
44
+ /// @example scss - Creates a single media type (screen)
45
+ /// $media-expressions: ('screen': 'screen');
46
+ ///
47
+ /// @example scss - Creates a static expression with logical disjunction (OR operator)
48
+ /// $media-expressions: (
49
+ /// 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)'
50
+ /// );
51
+ ///
52
+ $media-expressions: (
53
+ 'screen': 'screen',
54
+ 'print': 'print',
55
+ 'handheld': 'handheld',
56
+ 'landscape': '(orientation: landscape)',
57
+ 'portrait': '(orientation: portrait)',
58
+ 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)',
59
+ 'retina3x': '(-webkit-min-device-pixel-ratio: 3), (min-resolution: 350dpi), (min-resolution: 3dppx)'
60
+ ) !default;
61
+
62
+
63
+ ///
64
+ /// Defines a number to be added or subtracted from each unit when declaring breakpoints with exclusive intervals
65
+ ///
66
+ /// @example scss - Interval for pixels is defined as `1` by default
67
+ /// @include media('>128px') {}
68
+ ///
69
+ /// /* Generates: */
70
+ /// @media (min-width: 129px) {}
71
+ ///
72
+ /// @example scss - Interval for ems is defined as `0.01` by default
73
+ /// @include media('>20em') {}
74
+ ///
75
+ /// /* Generates: */
76
+ /// @media (min-width: 20.01em) {}
77
+ ///
78
+ /// @example scss - Interval for rems is defined as `0.1` by default, to be used with `font-size: 62.5%;`
79
+ /// @include media('>2.0rem') {}
80
+ ///
81
+ /// /* Generates: */
82
+ /// @media (min-width: 2.1rem) {}
83
+ ///
84
+ $unit-intervals: (
85
+ 'px': 1,
86
+ 'em': 0.01,
87
+ 'rem': 0.1,
88
+ '': 0
89
+ ) !default;
90
+
91
+ ///
92
+ /// Defines whether support for media queries is available, useful for creating separate stylesheets
93
+ /// for browsers that don't support media queries.
94
+ ///
95
+ /// @example scss - Disables support for media queries
96
+ /// $im-media-support: false;
97
+ /// @include media('>=tablet') {
98
+ /// .foo {
99
+ /// color: tomato;
100
+ /// }
101
+ /// }
102
+ ///
103
+ /// /* Generates: */
104
+ /// .foo {
105
+ /// color: tomato;
106
+ /// }
107
+ ///
108
+ $im-media-support: true !default;
109
+
110
+ ///
111
+ /// Selects which breakpoint to emulate when support for media queries is disabled. Media queries that start at or
112
+ /// intercept the breakpoint will be displayed, any others will be ignored.
113
+ ///
114
+ /// @example scss - This media query will show because it intercepts the static breakpoint
115
+ /// $im-media-support: false;
116
+ /// $im-no-media-breakpoint: 'desktop';
117
+ /// @include media('>=tablet') {
118
+ /// .foo {
119
+ /// color: tomato;
120
+ /// }
121
+ /// }
122
+ ///
123
+ /// /* Generates: */
124
+ /// .foo {
125
+ /// color: tomato;
126
+ /// }
127
+ ///
128
+ /// @example scss - This media query will NOT show because it does not intercept the desktop breakpoint
129
+ /// $im-media-support: false;
130
+ /// $im-no-media-breakpoint: 'tablet';
131
+ /// @include media('>=desktop') {
132
+ /// .foo {
133
+ /// color: tomato;
134
+ /// }
135
+ /// }
136
+ ///
137
+ /// /* No output */
138
+ ///
139
+ $im-no-media-breakpoint: 'desktop' !default;
140
+
141
+ ///
142
+ /// Selects which media expressions are allowed in an expression for it to be used when media queries
143
+ /// are not supported.
144
+ ///
145
+ /// @example scss - This media query will show because it intercepts the static breakpoint and contains only accepted media expressions
146
+ /// $im-media-support: false;
147
+ /// $im-no-media-breakpoint: 'desktop';
148
+ /// $im-no-media-expressions: ('screen');
149
+ /// @include media('>=tablet', 'screen') {
150
+ /// .foo {
151
+ /// color: tomato;
152
+ /// }
153
+ /// }
154
+ ///
155
+ /// /* Generates: */
156
+ /// .foo {
157
+ /// color: tomato;
158
+ /// }
159
+ ///
160
+ /// @example scss - This media query will NOT show because it intercepts the static breakpoint but contains a media expression that is not accepted
161
+ /// $im-media-support: false;
162
+ /// $im-no-media-breakpoint: 'desktop';
163
+ /// $im-no-media-expressions: ('screen');
164
+ /// @include media('>=tablet', 'retina2x') {
165
+ /// .foo {
166
+ /// color: tomato;
167
+ /// }
168
+ /// }
169
+ ///
170
+ /// /* No output */
171
+ ///
172
+ $im-no-media-expressions: ('screen', 'portrait', 'landscape') !default;
173
+
174
+ ////
175
+ /// Cross-engine logging engine
176
+ /// @author Hugo Giraudel
177
+ /// @access private
178
+ ////
179
+
180
+
181
+ ///
182
+ /// Log a message either with `@error` if supported
183
+ /// else with `@warn`, using `feature-exists('at-error')`
184
+ /// to detect support.
185
+ ///
186
+ /// @param {String} $message - Message to log
187
+ ///
188
+ @function im-log($message) {
189
+ @if feature-exists('at-error') {
190
+ @error $message;
191
+ } @else {
192
+ @warn $message;
193
+ $_: noop();
194
+ }
195
+
196
+ @return $message;
197
+ }
198
+
199
+
200
+ ///
201
+ /// Wrapper mixin for the log function so it can be used with a more friendly
202
+ /// API than `@if im-log('..') {}` or `$_: im-log('..')`. Basically, use the function
203
+ /// within functions because it is not possible to include a mixin in a function
204
+ /// and use the mixin everywhere else because it's much more elegant.
205
+ ///
206
+ /// @param {String} $message - Message to log
207
+ ///
208
+ @mixin log($message) {
209
+ @if im-log($message) {}
210
+ }
211
+
212
+
213
+ ///
214
+ /// Function with no `@return` called next to `@warn` in Sass 3.3
215
+ /// to trigger a compiling error and stop the process.
216
+ ///
217
+ @function noop() {}
218
+
219
+ ///
220
+ /// Determines whether a list of conditions is intercepted by the static breakpoint.
221
+ ///
222
+ /// @param {Arglist} $conditions - Media query conditions
223
+ ///
224
+ /// @return {Boolean} - Returns true if the conditions are intercepted by the static breakpoint
225
+ ///
226
+ @function im-intercepts-static-breakpoint($conditions...) {
227
+ $no-media-breakpoint-value: map-get($breakpoints, $im-no-media-breakpoint);
228
+
229
+ @if not $no-media-breakpoint-value {
230
+ @if im-log('`#{$im-no-media-breakpoint}` is not a valid breakpoint.') {}
231
+ }
232
+
233
+ @each $condition in $conditions {
234
+ @if not map-has-key($media-expressions, $condition) {
235
+ $operator: get-expression-operator($condition);
236
+ $prefix: get-expression-prefix($operator);
237
+ $value: get-expression-value($condition, $operator);
238
+
239
+ // scss-lint:disable SpaceAroundOperator
240
+ @if ($prefix == 'max' and $value <= $no-media-breakpoint-value) or
241
+ ($prefix == 'min' and $value > $no-media-breakpoint-value) {
242
+ @return false;
243
+ }
244
+ } @else if not index($im-no-media-expressions, $condition) {
245
+ @return false;
246
+ }
247
+ }
248
+
249
+ @return true;
250
+ }
251
+
252
+ ////
253
+ /// Parsing engine
254
+ /// @author Hugo Giraudel
255
+ /// @access private
256
+ ////
257
+
258
+
259
+ ///
260
+ /// Get operator of an expression
261
+ ///
262
+ /// @param {String} $expression - Expression to extract operator from
263
+ ///
264
+ /// @return {String} - Any of `>=`, `>`, `<=`, `<`, `≥`, `≤`
265
+ ///
266
+ @function get-expression-operator($expression) {
267
+ @each $operator in ('>=', '>', '<=', '<', '≥', '≤') {
268
+ @if str-index($expression, $operator) {
269
+ @return $operator;
270
+ }
271
+ }
272
+
273
+ // It is not possible to include a mixin inside a function, so we have to
274
+ // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
275
+ // functions cannot be called anywhere in Sass, we need to hack the call in
276
+ // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
277
+ // Sass 3.3, change this line in `@if im-log(..) {}` instead.
278
+ $_: im-log('No operator found in `#{$expression}`.');
279
+ }
280
+
281
+
282
+ ///
283
+ /// Get dimension of an expression, based on a found operator
284
+ ///
285
+ /// @param {String} $expression - Expression to extract dimension from
286
+ /// @param {String} $operator - Operator from `$expression`
287
+ ///
288
+ /// @return {String} - `width` or `height` (or potentially anything else)
289
+ ///
290
+ @function get-expression-dimension($expression, $operator) {
291
+ $operator-index: str-index($expression, $operator);
292
+ $parsed-dimension: str-slice($expression, 0, $operator-index - 1);
293
+ $dimension: 'width';
294
+
295
+ @if str-length($parsed-dimension) > 0 {
296
+ $dimension: $parsed-dimension;
297
+ }
298
+
299
+ @return $dimension;
300
+ }
301
+
302
+
303
+ ///
304
+ /// Get dimension prefix based on an operator
305
+ ///
306
+ /// @param {String} $operator - Operator
307
+ ///
308
+ /// @return {String} - `min` or `max`
309
+ ///
310
+ @function get-expression-prefix($operator) {
311
+ @return if(index(('<', '<=', '≤'), $operator), 'max', 'min');
312
+ }
313
+
314
+
315
+ ///
316
+ /// Get value of an expression, based on a found operator
317
+ ///
318
+ /// @param {String} $expression - Expression to extract value from
319
+ /// @param {String} $operator - Operator from `$expression`
320
+ ///
321
+ /// @return {Number} - A numeric value
322
+ ///
323
+ @function get-expression-value($expression, $operator) {
324
+ $operator-index: str-index($expression, $operator);
325
+ $value: str-slice($expression, $operator-index + str-length($operator));
326
+
327
+ @if map-has-key($breakpoints, $value) {
328
+ $value: map-get($breakpoints, $value);
329
+ } @else {
330
+ $value: to-number($value);
331
+ }
332
+
333
+ $interval: map-get($unit-intervals, unit($value));
334
+
335
+ @if not $interval {
336
+ // It is not possible to include a mixin inside a function, so we have to
337
+ // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
338
+ // functions cannot be called anywhere in Sass, we need to hack the call in
339
+ // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
340
+ // Sass 3.3, change this line in `@if im-log(..) {}` instead.
341
+ $_: im-log('Unknown unit `#{unit($value)}`.');
342
+ }
343
+
344
+ @if $operator == '>' {
345
+ $value: $value + $interval;
346
+ } @else if $operator == '<' {
347
+ $value: $value - $interval;
348
+ }
349
+
350
+ @return $value;
351
+ }
352
+
353
+
354
+ ///
355
+ /// Parse an expression to return a valid media-query expression
356
+ ///
357
+ /// @param {String} $expression - Expression to parse
358
+ ///
359
+ /// @return {String} - Valid media query
360
+ ///
361
+ @function parse-expression($expression) {
362
+ // If it is part of $media-expressions, it has no operator
363
+ // then there is no need to go any further, just return the value
364
+ @if map-has-key($media-expressions, $expression) {
365
+ @return map-get($media-expressions, $expression);
366
+ }
367
+
368
+ $operator: get-expression-operator($expression);
369
+ $dimension: get-expression-dimension($expression, $operator);
370
+ $prefix: get-expression-prefix($operator);
371
+ $value: get-expression-value($expression, $operator);
372
+
373
+ @return '(#{$prefix}-#{$dimension}: #{$value})';
374
+ }
375
+
376
+ ///
377
+ /// Slice `$list` between `$start` and `$end` indexes
378
+ ///
379
+ /// @access private
380
+ ///
381
+ /// @param {List} $list - List to slice
382
+ /// @param {Number} $start [1] - Start index
383
+ /// @param {Number} $end [length($list)] - End index
384
+ ///
385
+ /// @return {List} Sliced list
386
+ ///
387
+ @function slice($list, $start: 1, $end: length($list)) {
388
+ @if length($list) < 1 or $start > $end {
389
+ @return ();
390
+ }
391
+
392
+ $result: ();
393
+
394
+ @for $i from $start through $end {
395
+ $result: append($result, nth($list, $i));
396
+ }
397
+
398
+ @return $result;
399
+ }
400
+
401
+ ////
402
+ /// String to number converter
403
+ /// @author Hugo Giraudel
404
+ /// @access private
405
+ ////
406
+
407
+
408
+ ///
409
+ /// Casts a string into a number
410
+ ///
411
+ /// @param {String | Number} $value - Value to be parsed
412
+ ///
413
+ /// @return {Number}
414
+ ///
415
+ @function to-number($value) {
416
+ @if type-of($value) == 'number' {
417
+ @return $value;
418
+ } @else if type-of($value) != 'string' {
419
+ $_: im-log('Value for `to-number` should be a number or a string.');
420
+ }
421
+
422
+ $first-character: str-slice($value, 1, 1);
423
+ $result: 0;
424
+ $digits: 0;
425
+ $minus: ($first-character == '-');
426
+ $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);
427
+
428
+ // Remove +/- sign if present at first character
429
+ @if ($first-character == '+' or $first-character == '-') {
430
+ $value: str-slice($value, 2);
431
+ }
432
+
433
+ @for $i from 1 through str-length($value) {
434
+ $character: str-slice($value, $i, $i);
435
+
436
+ @if not (index(map-keys($numbers), $character) or $character == '.') {
437
+ @return to-length(if($minus, -$result, $result), str-slice($value, $i))
438
+ }
439
+
440
+ @if $character == '.' {
441
+ $digits: 1;
442
+ } @else if $digits == 0 {
443
+ $result: $result * 10 + map-get($numbers, $character);
444
+ } @else {
445
+ $digits: $digits * 10;
446
+ $result: $result + map-get($numbers, $character) / $digits;
447
+ }
448
+ }
449
+
450
+ @return if($minus, -$result, $result);
451
+ }
452
+
453
+
454
+ ///
455
+ /// Add `$unit` to `$value`
456
+ ///
457
+ /// @param {Number} $value - Value to add unit to
458
+ /// @param {String} $unit - String representation of the unit
459
+ ///
460
+ /// @return {Number} - `$value` expressed in `$unit`
461
+ ///
462
+ @function to-length($value, $unit) {
463
+ $units: ('px': 1px, 'cm': 1cm, 'mm': 1mm, '%': 1%, 'ch': 1ch, 'pc': 1pc, 'in': 1in, 'em': 1em, 'rem': 1rem, 'pt': 1pt, 'ex': 1ex, 'vw': 1vw, 'vh': 1vh, 'vmin': 1vmin, 'vmax': 1vmax);
464
+
465
+ @if not index(map-keys($units), $unit) {
466
+ $_: im-log('Invalid unit `#{$unit}`.');
467
+ }
468
+
469
+ @return $value * map-get($units, $unit);
470
+ }
471
+
472
+ ///
473
+ /// This mixin aims at redefining the configuration just for the scope of
474
+ /// the call. It is helpful when having a component needing an extended
475
+ /// configuration such as custom breakpoints (referred to as tweakpoints)
476
+ /// for instance.
477
+ ///
478
+ /// @author Hugo Giraudel
479
+ ///
480
+ /// @param {Map} $tweakpoints [()] - Map of tweakpoints to be merged with `$breakpoints`
481
+ /// @param {Map} $tweak-media-expressions [()] - Map of tweaked media expressions to be merged with `$media-expression`
482
+ ///
483
+ /// @example scss - Extend the global breakpoints with a tweakpoint
484
+ /// @include media-context(('custom': 678px)) {
485
+ /// .foo {
486
+ /// @include media('>phone', '<=custom') {
487
+ /// // ...
488
+ /// }
489
+ /// }
490
+ /// }
491
+ ///
492
+ /// @example scss - Extend the global media expressions with a custom one
493
+ /// @include media-context($tweak-media-expressions: ('all': 'all')) {
494
+ /// .foo {
495
+ /// @include media('all', '>phone') {
496
+ /// // ...
497
+ /// }
498
+ /// }
499
+ /// }
500
+ ///
501
+ /// @example scss - Extend both configuration maps
502
+ /// @include media-context(('custom': 678px), ('all': 'all')) {
503
+ /// .foo {
504
+ /// @include media('all', '>phone', '<=custom') {
505
+ /// // ...
506
+ /// }
507
+ /// }
508
+ /// }
509
+ ///
510
+ @mixin media-context($tweakpoints: (), $tweak-media-expressions: ()) {
511
+ // Save global configuration
512
+ $global-breakpoints: $breakpoints;
513
+ $global-media-expressions: $media-expressions;
514
+
515
+ // Update global configuration
516
+ $breakpoints: map-merge($breakpoints, $tweakpoints) !global;
517
+ $media-expressions: map-merge($media-expressions, $tweak-media-expressions) !global;
518
+
519
+ @content;
520
+
521
+ // Restore global configuration
522
+ $breakpoints: $global-breakpoints !global;
523
+ $media-expressions: $global-media-expressions !global;
524
+ }
525
+
526
+ ////
527
+ /// include-media public exposed API
528
+ /// @author Eduardo Boucas
529
+ /// @access public
530
+ ////
531
+
532
+
533
+ ///
534
+ /// Generates a media query based on a list of conditions
535
+ ///
536
+ /// @param {Arglist} $conditions - Media query conditions
537
+ ///
538
+ /// @example scss - With a single set breakpoint
539
+ /// @include media('>phone') { }
540
+ ///
541
+ /// @example scss - With two set breakpoints
542
+ /// @include media('>phone', '<=tablet') { }
543
+ ///
544
+ /// @example scss - With custom values
545
+ /// @include media('>=358px', '<850px') { }
546
+ ///
547
+ /// @example scss - With set breakpoints with custom values
548
+ /// @include media('>desktop', '<=1350px') { }
549
+ ///
550
+ /// @example scss - With a static expression
551
+ /// @include media('retina2x') { }
552
+ ///
553
+ /// @example scss - Mixing everything
554
+ /// @include media('>=350px', '<tablet', 'retina3x') { }
555
+ ///
556
+ @mixin media($conditions...) {
557
+ // scss-lint:disable SpaceAroundOperator
558
+ @if ($im-media-support and length($conditions) == 0) or
559
+ (not $im-media-support and im-intercepts-static-breakpoint($conditions...)) {
560
+ @content;
561
+ } @else if ($im-media-support and length($conditions) > 0) {
562
+ @media #{unquote(parse-expression(nth($conditions, 1)))} {
563
+ // Recursive call
564
+ @include media(slice($conditions, 2)...) {
565
+ @content;
566
+ }
567
+ }
568
+ }
569
+ }
data/_sass/_menu.scss ADDED
@@ -0,0 +1,90 @@
1
+ *,
2
+ *:before,
3
+ *:after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body.has-push-menu,
8
+ body.has-push-menu aside,
9
+ body.has-push-menu .progress-bar {
10
+ transition: all 0.3s ease;
11
+ }
12
+
13
+ body.has-push-menu {
14
+ overflow-x: hidden;
15
+ position: relative;
16
+ left: 0;
17
+
18
+ &.push-menu-to-right {
19
+ left: rem(240px);
20
+
21
+ .progress-bar {
22
+ left: rem(240px);
23
+ }
24
+
25
+ .bar-header {
26
+ left: rem(240px);
27
+ }
28
+ }
29
+ }
30
+
31
+ aside.sidebar {
32
+ position: fixed;
33
+ width: rem(240px);
34
+ height: 100%;
35
+ top: 0;
36
+ left: rem(-240px);
37
+ background-color: $accentDark;
38
+ z-index: 20;
39
+
40
+ @include media(">=sm") {
41
+ padding: rem(10px) 0 0;
42
+ }
43
+
44
+ &.open {
45
+ left: 0;
46
+ }
47
+
48
+ h2 {
49
+ margin: 0 rem(20px) 0;
50
+ @include mainFont(400);
51
+ font-size: rem(18px);
52
+ color: $primaryDark;
53
+ border-bottom: 1px solid $primaryDark;
54
+ line-height: 50px;
55
+
56
+ @include media(">=sm") {
57
+ font-size: rem(20px);
58
+ }
59
+ }
60
+
61
+ nav {
62
+ ul {
63
+ padding: 0;
64
+ margin: rem(5px) 0;
65
+
66
+ @include media(">=sm") {
67
+ margin: rem(10px) 0;
68
+ }
69
+
70
+ li {
71
+ margin: 0;
72
+ list-style-type: none;
73
+
74
+ a {
75
+ width: 100%;
76
+ display: block;
77
+ padding: rem(15px) rem(20px);
78
+ text-decoration: none;
79
+ @include mainFont(300);
80
+ color: $primaryDark;
81
+
82
+ &:hover {
83
+ color: $accentDark;
84
+ background: $themeColor;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,51 @@
1
+ @mixin mainFont($weight: 700) {
2
+ font-family: "Titillium Web", "Helvetica Neue", Helvetica, sans-serif;
3
+ font-weight: $weight;
4
+ font-style: normal;
5
+ }
6
+
7
+ @mixin size($width: 30, $height: 30) {
8
+ width: #{$width}px;
9
+ height: #{$height}px;
10
+ }
11
+
12
+ @mixin center($max-width: map-get($jeet, 'max-width'), $pad: 0) {
13
+ @include clearfix;
14
+ width: auto;
15
+ max-width: $max-width;
16
+ float: none;
17
+ display: block;
18
+ margin: {
19
+ right: auto;
20
+ left: auto;
21
+ };
22
+ padding: {
23
+ left: $pad;
24
+ right: $pad;
25
+ };
26
+ }
27
+
28
+ @mixin align($direction: both) {
29
+ position: absolute;
30
+ transform-style: preserve-3d;
31
+
32
+ @if index("horizontal" "h", $direction) {
33
+ left: 50%;
34
+ transform: translateX(-50%);
35
+ } @else if index("vertical" "v", $direction) {
36
+ top: 50%;
37
+ transform: translateY(-50%);
38
+ } @else {
39
+ top: 50%;
40
+ left: 50%;
41
+ transform: translate(-50%, -50%);
42
+ }
43
+ }
44
+
45
+ @mixin clearfix() {
46
+ &::after {
47
+ content: '';
48
+ display: table;
49
+ clear: both;
50
+ }
51
+ }