jekyll-theme-foundation 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +48 -0
- data/_includes/google-analytics.html +8 -0
- data/_includes/head.html +17 -0
- data/_includes/scripts.html +4 -0
- data/_layouts/default.html +16 -0
- data/_layouts/home.html +5 -0
- data/_layouts/page.html +5 -0
- data/_layouts/post.html +5 -0
- data/_sass/_vendor/normalize-scss/sass/_normalize.scss +3 -0
- data/_sass/_vendor/normalize-scss/sass/normalize/_import-now.scss +11 -0
- data/_sass/_vendor/normalize-scss/sass/normalize/_normalize-mixin.scss +676 -0
- data/_sass/_vendor/normalize-scss/sass/normalize/_variables.scss +36 -0
- data/_sass/_vendor/normalize-scss/sass/normalize/_vertical-rhythm.scss +61 -0
- data/_sass/_vendor/sassy-lists/stylesheets/functions/_contain.scss +31 -0
- data/_sass/_vendor/sassy-lists/stylesheets/functions/_purge.scss +38 -0
- data/_sass/_vendor/sassy-lists/stylesheets/functions/_remove.scss +31 -0
- data/_sass/_vendor/sassy-lists/stylesheets/functions/_replace.scss +46 -0
- data/_sass/_vendor/sassy-lists/stylesheets/functions/_to-list.scss +27 -0
- data/_sass/_vendor/sassy-lists/stylesheets/helpers/_missing-dependencies.scss +25 -0
- data/_sass/_vendor/sassy-lists/stylesheets/helpers/_true.scss +13 -0
- data/_sass/assets/foundation-float.scss +5 -0
- data/_sass/assets/foundation-prototype.scss +3 -0
- data/_sass/assets/foundation-rtl.scss +5 -0
- data/_sass/assets/foundation.scss +3 -0
- data/_sass/jekyll-theme-foundation.scss +5 -0
- data/_sass/scss/_global.scss +249 -0
- data/_sass/scss/components/_accordion-menu.scss +171 -0
- data/_sass/scss/components/_accordion.scss +155 -0
- data/_sass/scss/components/_badge.scss +63 -0
- data/_sass/scss/components/_breadcrumbs.scss +117 -0
- data/_sass/scss/components/_button-group.scss +253 -0
- data/_sass/scss/components/_button.scss +385 -0
- data/_sass/scss/components/_callout.scss +106 -0
- data/_sass/scss/components/_card.scss +129 -0
- data/_sass/scss/components/_close-button.scss +102 -0
- data/_sass/scss/components/_drilldown.scss +142 -0
- data/_sass/scss/components/_dropdown-menu.scss +274 -0
- data/_sass/scss/components/_dropdown.scss +79 -0
- data/_sass/scss/components/_flex-video.scss +1 -0
- data/_sass/scss/components/_flex.scss +117 -0
- data/_sass/scss/components/_float.scss +27 -0
- data/_sass/scss/components/_label.scss +64 -0
- data/_sass/scss/components/_media-object.scss +114 -0
- data/_sass/scss/components/_menu-icon.scss +9 -0
- data/_sass/scss/components/_menu.scss +495 -0
- data/_sass/scss/components/_off-canvas.scss +506 -0
- data/_sass/scss/components/_orbit.scss +196 -0
- data/_sass/scss/components/_pagination.scss +193 -0
- data/_sass/scss/components/_progress-bar.scss +64 -0
- data/_sass/scss/components/_responsive-embed.scss +70 -0
- data/_sass/scss/components/_reveal.scss +180 -0
- data/_sass/scss/components/_slider.scss +137 -0
- data/_sass/scss/components/_sticky.scss +39 -0
- data/_sass/scss/components/_switch.scss +247 -0
- data/_sass/scss/components/_table.scss +330 -0
- data/_sass/scss/components/_tabs.scss +196 -0
- data/_sass/scss/components/_thumbnail.scss +67 -0
- data/_sass/scss/components/_title-bar.scss +84 -0
- data/_sass/scss/components/_tooltip.scss +160 -0
- data/_sass/scss/components/_top-bar.scss +175 -0
- data/_sass/scss/components/_visibility.scss +132 -0
- data/_sass/scss/forms/_checkbox.scss +41 -0
- data/_sass/scss/forms/_error.scss +88 -0
- data/_sass/scss/forms/_fieldset.scss +53 -0
- data/_sass/scss/forms/_forms.scss +34 -0
- data/_sass/scss/forms/_help-text.scss +30 -0
- data/_sass/scss/forms/_input-group.scss +142 -0
- data/_sass/scss/forms/_label.scss +50 -0
- data/_sass/scss/forms/_meter.scss +116 -0
- data/_sass/scss/forms/_progress.scss +94 -0
- data/_sass/scss/forms/_range.scss +149 -0
- data/_sass/scss/forms/_select.scss +86 -0
- data/_sass/scss/forms/_text.scss +179 -0
- data/_sass/scss/foundation.scss +133 -0
- data/_sass/scss/grid/_classes.scss +176 -0
- data/_sass/scss/grid/_column.scss +112 -0
- data/_sass/scss/grid/_flex-grid.scss +259 -0
- data/_sass/scss/grid/_grid.scss +48 -0
- data/_sass/scss/grid/_gutter.scss +82 -0
- data/_sass/scss/grid/_layout.scss +76 -0
- data/_sass/scss/grid/_position.scss +76 -0
- data/_sass/scss/grid/_row.scss +99 -0
- data/_sass/scss/grid/_size.scss +24 -0
- data/_sass/scss/prototype/_arrow.scss +36 -0
- data/_sass/scss/prototype/_border-box.scss +35 -0
- data/_sass/scss/prototype/_border-none.scss +35 -0
- data/_sass/scss/prototype/_bordered.scss +54 -0
- data/_sass/scss/prototype/_box.scss +23 -0
- data/_sass/scss/prototype/_display.scss +50 -0
- data/_sass/scss/prototype/_font-styling.scss +95 -0
- data/_sass/scss/prototype/_list-style-type.scss +95 -0
- data/_sass/scss/prototype/_overflow.scss +72 -0
- data/_sass/scss/prototype/_position.scss +114 -0
- data/_sass/scss/prototype/_prototype.scss +87 -0
- data/_sass/scss/prototype/_relation.scss +157 -0
- data/_sass/scss/prototype/_rotate.scss +31 -0
- data/_sass/scss/prototype/_rounded.scss +54 -0
- data/_sass/scss/prototype/_separator.scss +96 -0
- data/_sass/scss/prototype/_shadow.scss +43 -0
- data/_sass/scss/prototype/_sizing.scss +73 -0
- data/_sass/scss/prototype/_spacing.scss +204 -0
- data/_sass/scss/prototype/_text-decoration.scss +48 -0
- data/_sass/scss/prototype/_text-transformation.scss +48 -0
- data/_sass/scss/prototype/_text-utilities.scss +88 -0
- data/_sass/scss/settings/_settings.scss +869 -0
- data/_sass/scss/typography/_alignment.scss +22 -0
- data/_sass/scss/typography/_base.scss +509 -0
- data/_sass/scss/typography/_helpers.scss +80 -0
- data/_sass/scss/typography/_print.scss +86 -0
- data/_sass/scss/typography/_typography.scss +26 -0
- data/_sass/scss/util/_breakpoint.scss +348 -0
- data/_sass/scss/util/_color.scss +129 -0
- data/_sass/scss/util/_direction.scss +31 -0
- data/_sass/scss/util/_flex.scss +85 -0
- data/_sass/scss/util/_math.scss +72 -0
- data/_sass/scss/util/_mixins.scss +313 -0
- data/_sass/scss/util/_selector.scss +41 -0
- data/_sass/scss/util/_typography.scss +26 -0
- data/_sass/scss/util/_unit.scss +152 -0
- data/_sass/scss/util/_util.scss +14 -0
- data/_sass/scss/util/_value.scss +160 -0
- data/_sass/scss/xy-grid/_cell.scss +169 -0
- data/_sass/scss/xy-grid/_classes.scss +476 -0
- data/_sass/scss/xy-grid/_collapse.scss +74 -0
- data/_sass/scss/xy-grid/_frame.scss +85 -0
- data/_sass/scss/xy-grid/_grid.scss +35 -0
- data/_sass/scss/xy-grid/_gutters.scss +45 -0
- data/_sass/scss/xy-grid/_layout.scss +33 -0
- data/_sass/scss/xy-grid/_position.scss +28 -0
- data/_sass/scss/xy-grid/_xy-grid.scss +51 -0
- data/assets/css/main.scss +5 -0
- data/assets/css/motion-ui.min.css +1 -0
- data/assets/js/foundation.min.js +5 -0
- data/assets/js/motion-ui.min.js +1 -0
- metadata +235 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
// Foundation for Sites by ZURB
|
2
|
+
// foundation.zurb.com
|
3
|
+
// Licensed under MIT Open Source
|
4
|
+
|
5
|
+
////
|
6
|
+
/// @group typography
|
7
|
+
////
|
8
|
+
|
9
|
+
// Base typography styles (tags only)
|
10
|
+
@import 'base';
|
11
|
+
|
12
|
+
// Typography helper classes (classes only)
|
13
|
+
@import 'helpers';
|
14
|
+
|
15
|
+
// Text alignment classes
|
16
|
+
@import 'alignment';
|
17
|
+
|
18
|
+
// Print styles
|
19
|
+
@import 'print';
|
20
|
+
|
21
|
+
@mixin foundation-typography {
|
22
|
+
@include foundation-typography-base;
|
23
|
+
@include foundation-typography-helpers;
|
24
|
+
@include foundation-text-alignment;
|
25
|
+
@include foundation-print-styles;
|
26
|
+
}
|
@@ -0,0 +1,348 @@
|
|
1
|
+
// Foundation for Sites by ZURB
|
2
|
+
// foundation.zurb.com
|
3
|
+
// Licensed under MIT Open Source
|
4
|
+
|
5
|
+
////
|
6
|
+
/// @group breakpoints
|
7
|
+
////
|
8
|
+
|
9
|
+
/// A list of named breakpoints. You can use these with the `breakpoint()` mixin to quickly create media queries.
|
10
|
+
/// @type Map
|
11
|
+
$breakpoints: (
|
12
|
+
small: 0,
|
13
|
+
medium: 640px,
|
14
|
+
large: 1024px,
|
15
|
+
xlarge: 1200px,
|
16
|
+
xxlarge: 1440px,
|
17
|
+
) !default;
|
18
|
+
|
19
|
+
/// The largest named breakpoint in which to include print as a media type
|
20
|
+
/// @type Keyword
|
21
|
+
$print-breakpoint: large !default;
|
22
|
+
|
23
|
+
$-zf-zero-breakpoint: small !default;
|
24
|
+
|
25
|
+
$-zf-breakpoints-keys: map-to-list($breakpoints, 'keys');
|
26
|
+
|
27
|
+
@if nth(map-values($breakpoints), 1) != 0 {
|
28
|
+
@error 'Your smallest breakpoint (defined in $breakpoints) must be set to "0".';
|
29
|
+
}
|
30
|
+
@else {
|
31
|
+
$-zf-zero-breakpoint: nth(map-keys($breakpoints), 1);
|
32
|
+
}
|
33
|
+
|
34
|
+
/// All of the names in this list will be output as classes in your CSS, like `.small-12`, `.medium-6`, and so on. Each value in this list must also be in the `$breakpoints` map.
|
35
|
+
/// @type List
|
36
|
+
$breakpoint-classes: (small medium large) !default;
|
37
|
+
|
38
|
+
/// Generates a media query string matching the input value. Refer to the documentation for the `breakpoint()` mixin to see what the possible inputs are.
|
39
|
+
///
|
40
|
+
/// @param {Keyword|Number} $val [small] - Breakpoint name, or px, rem, or em value to process.
|
41
|
+
@function breakpoint($val: $-zf-zero-breakpoint) {
|
42
|
+
// Size or keyword
|
43
|
+
$bp: nth($val, 1);
|
44
|
+
// Value for max-width media queries
|
45
|
+
$bp-max: 0;
|
46
|
+
// Direction of media query (up, down, or only)
|
47
|
+
$dir: if(length($val) > 1, nth($val, 2), up);
|
48
|
+
// Eventual output
|
49
|
+
$str: '';
|
50
|
+
// Is it a named media query?
|
51
|
+
$named: false;
|
52
|
+
|
53
|
+
// Orientation media queries have a unique syntax
|
54
|
+
@if $bp == 'landscape' or $bp == 'portrait' {
|
55
|
+
@return '(orientation: #{$bp})';
|
56
|
+
}
|
57
|
+
@else if $bp == 'retina' {
|
58
|
+
@return '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)';
|
59
|
+
}
|
60
|
+
|
61
|
+
// Try to pull a named breakpoint out of the $breakpoints map
|
62
|
+
@if type-of($bp) == 'string' {
|
63
|
+
@if map-has-key($breakpoints, $bp) {
|
64
|
+
@if $dir == 'only' or $dir == 'down' {
|
65
|
+
$bp-max: -zf-map-next($breakpoints, $bp);
|
66
|
+
}
|
67
|
+
|
68
|
+
$bp: map-get($breakpoints, $bp);
|
69
|
+
$named: true;
|
70
|
+
}
|
71
|
+
@else {
|
72
|
+
$bp: 0;
|
73
|
+
@warn 'breakpoint(): "#{$val}" is not defined in your $breakpoints setting.';
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
// Convert any pixel, rem, or unitless value to em
|
78
|
+
$bp: -zf-bp-to-em($bp);
|
79
|
+
@if $bp-max {
|
80
|
+
$bp-max: -zf-bp-to-em($bp-max) - (1/16);
|
81
|
+
}
|
82
|
+
|
83
|
+
// Conditions to skip media query creation
|
84
|
+
// - It's a named breakpoint that resolved to "0 down" or "0 up"
|
85
|
+
// - It's a numeric breakpoint that resolved to "0 " + anything
|
86
|
+
@if $bp > 0em or $dir == 'only' or $dir == 'down' {
|
87
|
+
// `only` ranges use the format `(min-width: n) and (max-width: n)`
|
88
|
+
@if $dir == 'only' {
|
89
|
+
// Only named media queries can have an "only" range
|
90
|
+
@if $named == true {
|
91
|
+
// Only use "min-width" if the floor is greater than 0
|
92
|
+
@if $bp > 0em {
|
93
|
+
$str: $str + '(min-width: #{$bp})';
|
94
|
+
|
95
|
+
// Only add "and" to the media query if there's a ceiling
|
96
|
+
@if $bp-max != null {
|
97
|
+
$str: $str + ' and ';
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
// Only use "max-width" if there's a ceiling
|
102
|
+
@if $bp-max != null {
|
103
|
+
$str: $str + '(max-width: #{$bp-max})';
|
104
|
+
}
|
105
|
+
}
|
106
|
+
@else {
|
107
|
+
@warn 'breakpoint(): Only named media queries can have an `only` range.';
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
// `down` ranges use the format `(max-width: n)`
|
112
|
+
@else if $dir == 'down' {
|
113
|
+
$max: if($named, $bp-max, $bp);
|
114
|
+
|
115
|
+
// Skip media query creation if input value is exactly "0 down",
|
116
|
+
// unless the function was called as "small down", in which case it's just "small only"
|
117
|
+
@if $named or $bp > 0em {
|
118
|
+
@if $max != null {
|
119
|
+
$str: $str + '(max-width: #{$max})';
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
// `up` ranges use the format `(min-width: n)`
|
125
|
+
@else if $bp > 0em {
|
126
|
+
$str: $str + '(min-width: #{$bp})';
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
@return $str;
|
131
|
+
}
|
132
|
+
|
133
|
+
/// Wraps a media query around the content you put inside the mixin. This mixin accepts a number of values:
|
134
|
+
/// - If a string is passed, the mixin will look for it in the `$breakpoints` map, and use a media query there.
|
135
|
+
/// - If a pixel value is passed, it will be converted to an em value using `$global-font-size` as the base.
|
136
|
+
/// - If a rem value is passed, the unit will be changed to em.
|
137
|
+
/// - If an em value is passed, the value will be used as-is.
|
138
|
+
///
|
139
|
+
/// @param {Keyword|Number} $value - Breakpoint name, or px, rem, or em value to process.
|
140
|
+
///
|
141
|
+
/// @output If the breakpoint is "0px and larger", outputs the content as-is. Otherwise, outputs the content wrapped in a media query.
|
142
|
+
@mixin breakpoint($value) {
|
143
|
+
$str: breakpoint($value);
|
144
|
+
$bp: index($-zf-breakpoints-keys, $value);
|
145
|
+
$pbp: index($-zf-breakpoints-keys, $print-breakpoint);
|
146
|
+
|
147
|
+
$old-zf-size: null;
|
148
|
+
|
149
|
+
// Make breakpoint size available as a variable
|
150
|
+
@if global-variable-exists(-zf-size) {
|
151
|
+
$old-zf-size: $-zf-size;
|
152
|
+
}
|
153
|
+
$-zf-size: nth($value, 1) !global; // get the first value to account for `only` and `down` keywords
|
154
|
+
|
155
|
+
// If $str is still an empty string, no media query is needed
|
156
|
+
@if $str == '' {
|
157
|
+
@content;
|
158
|
+
}
|
159
|
+
|
160
|
+
// Otherwise, wrap the content in a media query
|
161
|
+
@else {
|
162
|
+
// For named breakpoints less than or equal to $print-breakpoint, add print to the media types
|
163
|
+
@if $bp != null and $bp <= $pbp {
|
164
|
+
@media print, screen and #{$str} {
|
165
|
+
@content;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
@else {
|
169
|
+
@media screen and #{$str} {
|
170
|
+
@content;
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
@if $old-zf-size != null {
|
176
|
+
// Restore the old breakpoint size
|
177
|
+
$-zf-size: $old-zf-size !global;
|
178
|
+
} @else {
|
179
|
+
$-zf-size: null !global;
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
/// Convers the breakpoints map to a URL-encoded string, like this: `key1=value1&key2=value2`. The value is then dropped into the CSS for a special `<meta>` tag, which is read by the Foundation JavaScript. This is how we transfer values from Sass to JavaScript, so they can be defined in one place.
|
184
|
+
/// @access private
|
185
|
+
///
|
186
|
+
/// @param {Map} $map - Map to convert.
|
187
|
+
///
|
188
|
+
/// @returns {String} A string containing the map's contents.
|
189
|
+
@function -zf-bp-serialize($map) {
|
190
|
+
$str: '';
|
191
|
+
@each $key, $value in $map {
|
192
|
+
$str: $str + $key + '=' + -zf-bp-to-em($value) + '&';
|
193
|
+
}
|
194
|
+
$str: str-slice($str, 1, -2);
|
195
|
+
|
196
|
+
@return $str;
|
197
|
+
}
|
198
|
+
|
199
|
+
/// Find the next key in a map.
|
200
|
+
/// @access private
|
201
|
+
///
|
202
|
+
/// @param {Map} $map - Map to traverse.
|
203
|
+
/// @param {Mixed} $key - Key to use as a starting point.
|
204
|
+
///
|
205
|
+
/// @returns {Mixed} The value for the key after `$key`, if `$key` was found. If `$key` was not found, or `$key` was the last value in the map, returns `null`.
|
206
|
+
@function -zf-map-next($map, $key) {
|
207
|
+
|
208
|
+
// Store the keys of the map as a list
|
209
|
+
$values: map-keys($map);
|
210
|
+
|
211
|
+
$i: 0;
|
212
|
+
|
213
|
+
// If the Key Exists, Get the index of the key within the map and add 1 to it for the next breakpoint in the map
|
214
|
+
@if (map-has-key($map, $key)) {
|
215
|
+
$i: index($values, $key) + 1;
|
216
|
+
}
|
217
|
+
|
218
|
+
// If the key doesn't exist, or it's the last key in the map, return null
|
219
|
+
@if ($i > length($map) or $i == 0) {
|
220
|
+
@return null;
|
221
|
+
}
|
222
|
+
// Otherwise, return the value
|
223
|
+
@else {
|
224
|
+
@return map-get($map, nth($values, $i));
|
225
|
+
}
|
226
|
+
|
227
|
+
}
|
228
|
+
|
229
|
+
/// Return a list of our named breakpoints less than $key. Useful for dealing with
|
230
|
+
/// responsive gutters for the grid.
|
231
|
+
/// @access private
|
232
|
+
///
|
233
|
+
/// @param {String} $key - Key to use as last breakpoint.
|
234
|
+
///
|
235
|
+
/// @returns {Array} The list of breakpoints up to and. If $key is auto, returns breakpoints above the zero
|
236
|
+
@function -zf-breakpoints-less-than($key) {
|
237
|
+
$list: ();
|
238
|
+
$found_key: false;
|
239
|
+
|
240
|
+
@each $name in $-zf-breakpoints-keys {
|
241
|
+
@if ($name == $key) {
|
242
|
+
$found_key: true;
|
243
|
+
}
|
244
|
+
@if not $found_key {
|
245
|
+
$list: append($list, $name);
|
246
|
+
}
|
247
|
+
}
|
248
|
+
@return $list;
|
249
|
+
}
|
250
|
+
|
251
|
+
/// Return a list of our named breakpoints less than $key. Useful for dealing with
|
252
|
+
/// responsive gutters for the grid.
|
253
|
+
/// @access private
|
254
|
+
///
|
255
|
+
/// @param {String} $breakpoing - a named or non-named breakpoing.
|
256
|
+
///
|
257
|
+
/// @returns {Array} The list of breakpoints up to and. If $key is auto, returns breakpoints above the zero
|
258
|
+
@function -zf-closest-named-breakpoint($breakpoint) {
|
259
|
+
$last: $-zf-zero-breakpoint;
|
260
|
+
$found: false;
|
261
|
+
|
262
|
+
$value: unitless-calc($breakpoint, 1px);
|
263
|
+
@each $key, $val in $breakpoints {
|
264
|
+
@if not $found {
|
265
|
+
@if unitless-calc($val) > $value {
|
266
|
+
$found: true;
|
267
|
+
} @else {
|
268
|
+
$last: $key;
|
269
|
+
}
|
270
|
+
}
|
271
|
+
}
|
272
|
+
|
273
|
+
@return $last;
|
274
|
+
}
|
275
|
+
|
276
|
+
/// Get a value for a breakpoint from a responsive config map or single value.
|
277
|
+
/// - If the config is a single value, return it regardless of `$value`.
|
278
|
+
/// - If the config is a map and has the key `$value`, the exact breakpoint value is returned.
|
279
|
+
/// - If the config is a map and does *not* have the breakpoint, the value matching the next lowest breakpoint in the config map is returned.
|
280
|
+
/// @access private
|
281
|
+
///
|
282
|
+
/// @param {Number|Map} $map - Responsive config map or single value.
|
283
|
+
/// @param {Keyword} $value - Breakpoint name to use.
|
284
|
+
///
|
285
|
+
/// @return {Mixed} The corresponding breakpoint value.
|
286
|
+
@function -zf-get-bp-val($map, $value) {
|
287
|
+
// If the given map is a single value, return it
|
288
|
+
@if type-of($map) == 'number' {
|
289
|
+
@return $map;
|
290
|
+
}
|
291
|
+
|
292
|
+
|
293
|
+
// Check if the breakpoint name exists globally
|
294
|
+
@if not map-has-key($breakpoints, $value) {
|
295
|
+
@if type-of($value) == 'number' {
|
296
|
+
$value: -zf-closest-named-breakpoint($value);
|
297
|
+
} @else {
|
298
|
+
@return null;
|
299
|
+
}
|
300
|
+
}
|
301
|
+
// Check if the breakpoint name exists in the local config map
|
302
|
+
@else if map-has-key($map, $value) {
|
303
|
+
// If it does, just return the value
|
304
|
+
@return map-get($map, $value);
|
305
|
+
}
|
306
|
+
// Otherwise, find the next lowest breakpoint and return that value
|
307
|
+
@else {
|
308
|
+
$anchor: null;
|
309
|
+
$found: false;
|
310
|
+
|
311
|
+
@each $key, $val in $breakpoints {
|
312
|
+
@if not $found {
|
313
|
+
@if map-has-key($map, $key) {
|
314
|
+
$anchor: $key;
|
315
|
+
}
|
316
|
+
@if $key == $value {
|
317
|
+
$found: true;
|
318
|
+
}
|
319
|
+
}
|
320
|
+
}
|
321
|
+
|
322
|
+
@return map-get($map, $anchor);
|
323
|
+
}
|
324
|
+
}
|
325
|
+
|
326
|
+
@if map-has-key($breakpoints, small) {
|
327
|
+
$small-up: screen;
|
328
|
+
$small-only: unquote('screen and #{breakpoint(small only)}');
|
329
|
+
}
|
330
|
+
|
331
|
+
@if map-has-key($breakpoints, medium) {
|
332
|
+
$medium-up: unquote('screen and #{breakpoint(medium)}');
|
333
|
+
$medium-only: unquote('screen and #{breakpoint(medium only)}');
|
334
|
+
}
|
335
|
+
|
336
|
+
@if map-has-key($breakpoints, large) {
|
337
|
+
$large-up: unquote('screen and #{breakpoint(large)}');
|
338
|
+
$large-only: unquote('screen and #{breakpoint(large only)}');
|
339
|
+
}
|
340
|
+
|
341
|
+
@if map-has-key($breakpoints, xlarge) {
|
342
|
+
$xlarge-up: unquote('screen and #{breakpoint(xlarge)}');
|
343
|
+
$xlarge-only: unquote('screen and #{breakpoint(xlarge only)}');
|
344
|
+
}
|
345
|
+
|
346
|
+
@if map-has-key($breakpoints, xxlarge) {
|
347
|
+
$xxlarge-up: unquote('screen and #{breakpoint(xxlarge)}');
|
348
|
+
}
|
@@ -0,0 +1,129 @@
|
|
1
|
+
// Foundation for Sites by ZURB
|
2
|
+
// foundation.zurb.com
|
3
|
+
// Licensed under MIT Open Source
|
4
|
+
|
5
|
+
@import 'math';
|
6
|
+
|
7
|
+
$contrast-warnings: true !default;
|
8
|
+
|
9
|
+
////
|
10
|
+
/// @group functions
|
11
|
+
////
|
12
|
+
|
13
|
+
/// Checks the luminance of `$color`.
|
14
|
+
///
|
15
|
+
/// @param {Color} $color - Color to check the luminance of.
|
16
|
+
///
|
17
|
+
/// @returns {Number} The luminance of `$color`.
|
18
|
+
@function color-luminance($color) {
|
19
|
+
// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js
|
20
|
+
// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
|
21
|
+
$rgba: red($color), green($color), blue($color);
|
22
|
+
$rgba2: ();
|
23
|
+
|
24
|
+
@for $i from 1 through 3 {
|
25
|
+
$rgb: nth($rgba, $i);
|
26
|
+
$rgb: $rgb / 255;
|
27
|
+
|
28
|
+
$rgb: if($rgb < 0.03928, $rgb / 12.92, pow(($rgb + 0.055) / 1.055, 2.4));
|
29
|
+
|
30
|
+
$rgba2: append($rgba2, $rgb);
|
31
|
+
}
|
32
|
+
|
33
|
+
@return 0.2126 * nth($rgba2, 1) + 0.7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3);
|
34
|
+
}
|
35
|
+
|
36
|
+
/// Checks the contrast ratio of two colors.
|
37
|
+
///
|
38
|
+
/// @param {Color} $color1 - First color to compare.
|
39
|
+
/// @param {Color} $color2 - Second color to compare.
|
40
|
+
///
|
41
|
+
/// @returns {Number} The contrast ratio of the compared colors.
|
42
|
+
@function color-contrast($color1, $color2) {
|
43
|
+
// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js
|
44
|
+
// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
|
45
|
+
$luminance1: color-luminance($color1) + 0.05;
|
46
|
+
$luminance2: color-luminance($color2) + 0.05;
|
47
|
+
$ratio: $luminance1 / $luminance2;
|
48
|
+
|
49
|
+
@if $luminance2 > $luminance1 {
|
50
|
+
$ratio: 1 / $ratio;
|
51
|
+
}
|
52
|
+
|
53
|
+
$ratio: round($ratio * 10) / 10;
|
54
|
+
|
55
|
+
@return $ratio;
|
56
|
+
}
|
57
|
+
|
58
|
+
/// Checks the luminance of `$base`, and returns the color from `$colors` (list of colors) that has the most contrast.
|
59
|
+
///
|
60
|
+
/// @param {Color} $base - Color to check luminance.
|
61
|
+
/// @param {List} $colors [($white, $black)] - Colors to compare.
|
62
|
+
/// @param {Number} $tolerance [$global-color-pick-contrast-tolerance] - Contrast tolerance.
|
63
|
+
///
|
64
|
+
/// @returns {Color} the color from `$colors` (list of colors) that has the most contrast.
|
65
|
+
@function color-pick-contrast($base, $colors: ($white, $black), $tolerance: $global-color-pick-contrast-tolerance) {
|
66
|
+
$contrast: color-contrast($base, nth($colors, 1));
|
67
|
+
$best: nth($colors, 1);
|
68
|
+
|
69
|
+
@for $i from 2 through length($colors) {
|
70
|
+
$current-contrast: color-contrast($base, nth($colors, $i));
|
71
|
+
@if ($current-contrast - $contrast > $tolerance) {
|
72
|
+
$contrast: color-contrast($base, nth($colors, $i));
|
73
|
+
$best: nth($colors, $i);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
@if ($contrast-warnings and $contrast < 3) {
|
78
|
+
@warn "Contrast ratio of #{$best} on #{$base} is pretty bad, just #{$contrast}";
|
79
|
+
}
|
80
|
+
|
81
|
+
@return $best;
|
82
|
+
}
|
83
|
+
|
84
|
+
/// Scales a color to be darker if it's light, or lighter if it's dark. Use this function to tint a color appropriate to its lightness.
|
85
|
+
///
|
86
|
+
/// @param {Color} $color - Color to scale.
|
87
|
+
/// @param {Percentage} $scale [5%] - Amount to scale up or down.
|
88
|
+
/// @param {Percentage} $threshold [40%] - Threshold of lightness to check against.
|
89
|
+
///
|
90
|
+
/// @returns {Color} A scaled color.
|
91
|
+
@function smart-scale($color, $scale: 5%, $threshold: 40%) {
|
92
|
+
@if lightness($color) > $threshold {
|
93
|
+
$scale: -$scale;
|
94
|
+
}
|
95
|
+
@return scale-color($color, $lightness: $scale);
|
96
|
+
}
|
97
|
+
|
98
|
+
/// Get color from foundation-palette
|
99
|
+
///
|
100
|
+
/// @param {key} color key from foundation-palette
|
101
|
+
///
|
102
|
+
/// @returns {Color} color from foundation-palette
|
103
|
+
@function get-color($key) {
|
104
|
+
@if map-has-key($foundation-palette, $key) {
|
105
|
+
@return map-get($foundation-palette, $key);
|
106
|
+
}
|
107
|
+
@else {
|
108
|
+
@error 'given $key is not available in $foundation-palette';
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
/// Transfers the colors in the `$foundation-palette`map into variables, such as `$primary-color` and `$secondary-color`. Call this mixin below the Global section of your settings file to properly migrate your codebase.
|
113
|
+
@mixin add-foundation-colors() {
|
114
|
+
@if map-has-key($foundation-palette, primary) {
|
115
|
+
$primary-color: map-get($foundation-palette, primary) !global;
|
116
|
+
}
|
117
|
+
@if map-has-key($foundation-palette, secondary) {
|
118
|
+
$secondary-color: map-get($foundation-palette, secondary) !global;
|
119
|
+
}
|
120
|
+
@if map-has-key($foundation-palette, success) {
|
121
|
+
$success-color: map-get($foundation-palette, success) !global;
|
122
|
+
}
|
123
|
+
@if map-has-key($foundation-palette, warning) {
|
124
|
+
$warning-color: map-get($foundation-palette, warning) !global;
|
125
|
+
}
|
126
|
+
@if map-has-key($foundation-palette, alert) {
|
127
|
+
$alert-color: map-get($foundation-palette, alert) !global;
|
128
|
+
}
|
129
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
// Foundation for Sites by ZURB
|
2
|
+
// foundation.zurb.com
|
3
|
+
// Licensed under MIT Open Source
|
4
|
+
|
5
|
+
////
|
6
|
+
/// @group functions
|
7
|
+
////
|
8
|
+
|
9
|
+
/// Returns the opposite direction of $dir
|
10
|
+
///
|
11
|
+
/// @param {Keyword} $dir - Used direction between "top", "right", "bottom" and "left".
|
12
|
+
/// @return {Keyword} Opposite direction of $dir
|
13
|
+
@function direction-opposite(
|
14
|
+
$dir
|
15
|
+
) {
|
16
|
+
$dirs: (top, right, bottom, left);
|
17
|
+
$place: index($dirs, $dir);
|
18
|
+
|
19
|
+
@if $place == null {
|
20
|
+
@error 'direction-opposite: Invalid $dir parameter, expected a value from "#{$dirs}", found "#{$dir}".';
|
21
|
+
@return null;
|
22
|
+
}
|
23
|
+
|
24
|
+
// Calcul the opposite place in a circle, with a starting index of 1
|
25
|
+
$length: length($dirs);
|
26
|
+
$demi: $length / 2;
|
27
|
+
$opposite-place: (($place + $demi - 1) % $length) + 1;
|
28
|
+
|
29
|
+
@return nth($dirs, $opposite-place);
|
30
|
+
}
|
31
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
$-zf-flex-justify: (
|
2
|
+
'left': flex-start,
|
3
|
+
'right': flex-end,
|
4
|
+
'center': center,
|
5
|
+
'justify': space-between,
|
6
|
+
'spaced': space-around,
|
7
|
+
);
|
8
|
+
|
9
|
+
$-zf-flex-align: (
|
10
|
+
'top': flex-start,
|
11
|
+
'bottom': flex-end,
|
12
|
+
'middle': center,
|
13
|
+
'stretch': stretch,
|
14
|
+
);
|
15
|
+
|
16
|
+
$-zf-flex-direction: (
|
17
|
+
'row': row,
|
18
|
+
'row-reverse': row-reverse,
|
19
|
+
'column': column,
|
20
|
+
'column-reverse': column-reverse,
|
21
|
+
);
|
22
|
+
|
23
|
+
/// Enables flexbox by adding `display: flex` to the element.
|
24
|
+
@mixin flex {
|
25
|
+
display: flex;
|
26
|
+
}
|
27
|
+
|
28
|
+
/// Horizontally or vertically aligns the items within a flex container.
|
29
|
+
///
|
30
|
+
/// @param {Keyword} $x [null] - Horizontal alignment to use. Can be `left`, `right`, `center`, `justify`, or `spaced`. Or, set it to `null` (the default) to not set horizontal alignment.
|
31
|
+
/// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment.
|
32
|
+
@mixin flex-align($x: null, $y: null) {
|
33
|
+
@if $x {
|
34
|
+
@if map-has-key($-zf-flex-justify, $x) {
|
35
|
+
$x: map-get($-zf-flex-justify, $x);
|
36
|
+
}
|
37
|
+
@else {
|
38
|
+
@warn 'flex-grid-row-align(): #{$x} is not a valid value for horizontal alignment. Use left, right, center, justify, or spaced.';
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
@if $y {
|
43
|
+
@if map-has-key($-zf-flex-align, $y) {
|
44
|
+
$y: map-get($-zf-flex-align, $y);
|
45
|
+
}
|
46
|
+
@else {
|
47
|
+
@warn 'flex-grid-row-align(): #{$y} is not a valid value for vertical alignment. Use top, bottom, middle, or stretch.';
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
justify-content: $x;
|
52
|
+
align-items: $y;
|
53
|
+
}
|
54
|
+
|
55
|
+
/// Vertically align a single column within a flex row. Apply this mixin to a flex column.
|
56
|
+
///
|
57
|
+
/// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment.
|
58
|
+
@mixin flex-align-self($y: null) {
|
59
|
+
@if $y {
|
60
|
+
@if map-has-key($-zf-flex-align, $y) {
|
61
|
+
$y: map-get($-zf-flex-align, $y);
|
62
|
+
}
|
63
|
+
@else {
|
64
|
+
@warn 'flex-grid-column-align(): #{$y} is not a valid value for alignment. Use top, bottom, middle, or stretch.';
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
align-self: $y;
|
69
|
+
}
|
70
|
+
|
71
|
+
/// Changes the source order of a flex child. Children with lower numbers appear first in the layout.
|
72
|
+
/// @param {Number} $order [0] - Order number to apply.
|
73
|
+
@mixin flex-order($order: 0) {
|
74
|
+
order: $order;
|
75
|
+
}
|
76
|
+
|
77
|
+
/// Change flex-direction
|
78
|
+
/// @param {Keyword} $direction [row] - Flex direction to use. Can be
|
79
|
+
/// - row (default): same as text direction
|
80
|
+
/// - row-reverse: opposite to text direction
|
81
|
+
/// - column: same as row but top to bottom
|
82
|
+
/// - column-reverse: same as row-reverse top to bottom
|
83
|
+
@mixin flex-direction($direction: row) {
|
84
|
+
flex-direction: $direction;
|
85
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
// Foundation for Sites by ZURB
|
2
|
+
// foundation.zurb.com
|
3
|
+
// Licensed under MIT Open Source
|
4
|
+
|
5
|
+
////
|
6
|
+
/// @group functions
|
7
|
+
////
|
8
|
+
|
9
|
+
/// Finds the greatest common divisor of two integers.
|
10
|
+
///
|
11
|
+
/// @param {Number} $a - First number to compare.
|
12
|
+
/// @param {Number} $b - Second number to compare.
|
13
|
+
///
|
14
|
+
/// @returns {Number} The greatest common divisor.
|
15
|
+
@function gcd($a, $b) {
|
16
|
+
// From: http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript
|
17
|
+
@if ($b != 0) {
|
18
|
+
@return gcd($b, $a % $b);
|
19
|
+
}
|
20
|
+
@else {
|
21
|
+
@return abs($a);
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
/// Handles decimal exponents by trying to convert them into a fraction and then use a nth-root-algorithm for parts of the calculation
|
26
|
+
///
|
27
|
+
/// @param {Number} $base - The base number.
|
28
|
+
/// @param {Number} $exponent - The exponent.
|
29
|
+
///
|
30
|
+
/// @returns {Number} The product of the exponentiation.
|
31
|
+
@function pow($base, $exponent, $prec: 16) {
|
32
|
+
@if (floor($exponent) != $exponent) {
|
33
|
+
$prec2 : pow(10, $prec);
|
34
|
+
$exponent: round($exponent * $prec2);
|
35
|
+
$denominator: gcd($exponent, $prec2);
|
36
|
+
@return nth-root(pow($base, $exponent / $denominator), $prec2 / $denominator, $prec);
|
37
|
+
}
|
38
|
+
|
39
|
+
$value: $base;
|
40
|
+
@if $exponent > 1 {
|
41
|
+
@for $i from 2 through $exponent {
|
42
|
+
$value: $value * $base;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
@else if $exponent < 1 {
|
46
|
+
@for $i from 0 through -$exponent {
|
47
|
+
$value: $value / $base;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
@return $value;
|
52
|
+
}
|
53
|
+
|
54
|
+
@function nth-root($num, $n: 2, $prec: 12) {
|
55
|
+
// From: http://rosettacode.org/wiki/Nth_root#JavaScript
|
56
|
+
$x: 1;
|
57
|
+
|
58
|
+
@for $i from 0 through $prec {
|
59
|
+
$x: 1 / $n * (($n - 1) * $x + ($num / pow($x, $n - 1)));
|
60
|
+
}
|
61
|
+
|
62
|
+
@return $x;
|
63
|
+
}
|
64
|
+
|
65
|
+
/// Calculates the height as a percentage of the width for a given ratio.
|
66
|
+
/// @param {List} $ratio - Ratio to use to calculate the height, formatted as `x by y`.
|
67
|
+
/// @return {Number} A percentage value for the height relative to the width of a responsive container.
|
68
|
+
@function ratio-to-percentage($ratio) {
|
69
|
+
$w: nth($ratio, 1);
|
70
|
+
$h: nth($ratio, 3);
|
71
|
+
@return $h / $w * 100%;
|
72
|
+
}
|