material_design_lite-sass 1.0.6.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -2
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +41 -32
  5. data/lib/material_design_lite/sass/version.rb +1 -1
  6. data/vendor/assets/javascripts/material.js +377 -301
  7. data/vendor/assets/javascripts/material/button.js +0 -24
  8. data/vendor/assets/javascripts/material/checkbox.js +0 -26
  9. data/vendor/assets/javascripts/material/data-table.js +18 -10
  10. data/vendor/assets/javascripts/material/icon-toggle.js +0 -26
  11. data/vendor/assets/javascripts/material/layout.js +104 -6
  12. data/vendor/assets/javascripts/material/mdlComponentHandler.js +15 -36
  13. data/vendor/assets/javascripts/material/menu.js +16 -36
  14. data/vendor/assets/javascripts/material/progress.js +0 -22
  15. data/vendor/assets/javascripts/material/radio.js +0 -28
  16. data/vendor/assets/javascripts/material/ripple.js +6 -35
  17. data/vendor/assets/javascripts/material/slider.js +0 -23
  18. data/vendor/assets/javascripts/material/snackbar.js +189 -0
  19. data/vendor/assets/javascripts/material/switch.js +0 -26
  20. data/vendor/assets/javascripts/material/tabs.js +2 -2
  21. data/vendor/assets/javascripts/material/textfield.js +32 -25
  22. data/vendor/assets/javascripts/material/tooltip.js +39 -49
  23. data/vendor/assets/stylesheets/_material.scss +3 -0
  24. data/vendor/assets/stylesheets/material/_badge.scss +6 -0
  25. data/vendor/assets/stylesheets/material/_button.scss +3 -3
  26. data/vendor/assets/stylesheets/material/_checkbox.scss +5 -0
  27. data/vendor/assets/stylesheets/material/_data-table.scss +17 -9
  28. data/vendor/assets/stylesheets/material/_dialog.scss +57 -0
  29. data/vendor/assets/stylesheets/material/_grid.scss +60 -0
  30. data/vendor/assets/stylesheets/material/_layout.scss +77 -3
  31. data/vendor/assets/stylesheets/material/_list.scss +103 -0
  32. data/vendor/assets/stylesheets/material/_mega_footer.scss +1 -1
  33. data/vendor/assets/stylesheets/material/_menu.scss +5 -1
  34. data/vendor/assets/stylesheets/material/_mixins.scss +33 -0
  35. data/vendor/assets/stylesheets/material/_progress.scss +5 -0
  36. data/vendor/assets/stylesheets/material/_radio.scss +5 -0
  37. data/vendor/assets/stylesheets/material/_shadow.scss +4 -0
  38. data/vendor/assets/stylesheets/material/_snackbar.scss +81 -0
  39. data/vendor/assets/stylesheets/material/_switch.scss +5 -1
  40. data/vendor/assets/stylesheets/material/_tabs.scss +0 -1
  41. data/vendor/assets/stylesheets/material/_textfield.scss +13 -3
  42. data/vendor/assets/stylesheets/material/_typography.scss +4 -0
  43. data/vendor/assets/stylesheets/material/_variables.scss +102 -81
  44. metadata +7 -3
@@ -81,6 +81,7 @@
81
81
  background: $switch-track-color;
82
82
  }
83
83
 
84
+ fieldset[disabled] .mdl-switch,
84
85
  .mdl-switch.is-disabled & {
85
86
  background: $switch-disabled-track-color;
86
87
  cursor: auto;
@@ -110,6 +111,7 @@
110
111
  @include shadow-3dp();
111
112
  }
112
113
 
114
+ fieldset[disabled] .mdl-switch,
113
115
  .mdl-switch.is-disabled & {
114
116
  background: $switch-disabled-thumb-color;
115
117
  cursor: auto;
@@ -153,6 +155,7 @@
153
155
  margin: 0;
154
156
  left: 24px;
155
157
 
158
+ fieldset[disabled] .mdl-switch,
156
159
  .mdl-switch.is-disabled & {
157
160
  color: $switch-disabled-thumb-color;
158
161
  cursor: auto;
@@ -183,16 +186,17 @@
183
186
  background: $switch-color;
184
187
  }
185
188
 
189
+ fieldset[disabled] .mdl-switch,
186
190
  .mdl-switch.is-disabled & {
187
191
  cursor: auto;
188
192
  }
189
193
 
194
+ fieldset[disabled] .mdl-switch & .mdl-ripple,
190
195
  .mdl-switch.is-disabled & .mdl-ripple {
191
196
  background: transparent;
192
197
  }
193
198
 
194
199
  .mdl-switch.is-checked & {
195
- cursor: auto;
196
200
  left: $switch-track-length - $switch-ripple-size / 2 -
197
201
  $switch-thumb-size / 2;
198
202
  }
@@ -44,7 +44,6 @@
44
44
  position: relative;
45
45
  display: block;
46
46
 
47
- color: red;
48
47
  text-decoration: none;
49
48
  height: 48px;
50
49
  line-height: 48px;
@@ -20,11 +20,8 @@
20
20
  // The container for the whole component.
21
21
  .mdl-textfield {
22
22
  position: relative;
23
-
24
23
  font-size: $input-text-font-size;
25
-
26
24
  display: inline-block;
27
-
28
25
  box-sizing: border-box;
29
26
  width: 300px;
30
27
  max-width: 100%;
@@ -61,6 +58,7 @@
61
58
  border-bottom: 1px solid $input-text-bottom-border-color;
62
59
  display: block;
63
60
  font-size: $input-text-font-size;
61
+ font-family: $performance_font;
64
62
  margin: 0;
65
63
  padding: $input-text-padding 0;
66
64
  width: $input-text-width;
@@ -68,6 +66,16 @@
68
66
  text-align: left;
69
67
  color: inherit;
70
68
 
69
+ &[type="number"] {
70
+ -moz-appearance: textfield;
71
+ }
72
+
73
+ &[type="number"]::-webkit-inner-spin-button,
74
+ &[type="number"]::-webkit-outer-spin-button {
75
+ -webkit-appearance: none;
76
+ margin: 0;
77
+ }
78
+
71
79
  .mdl-textfield.is-focused & {
72
80
  outline: none;
73
81
  }
@@ -77,6 +85,7 @@
77
85
  box-shadow: none;
78
86
  }
79
87
 
88
+ fieldset[disabled] .mdl-textfield &,
80
89
  .mdl-textfield.is-disabled & {
81
90
  background-color: transparent;
82
91
  border-bottom: 1px dotted $input-text-disabled-color;
@@ -113,6 +122,7 @@
113
122
  @include material-animation-default();
114
123
  }
115
124
 
125
+ fieldset[disabled] .mdl-textfield &,
116
126
  .mdl-textfield.is-disabled.is-disabled & {
117
127
  color: $input-text-disabled-text-color;
118
128
  }
@@ -295,3 +295,7 @@
295
295
  .mdl-typography--font-black {
296
296
  font-weight: 900 !important;
297
297
  }
298
+
299
+ .material-icons {
300
+ @include typo-icon;
301
+ }
@@ -40,6 +40,13 @@
40
40
  * -----Shadows
41
41
  * -----Grid
42
42
  * -----Data table
43
+ * -----Dialog
44
+ * -----Snackbar
45
+ *
46
+ * Even though all variables have the `!default` directive, most of them
47
+ * should not be changed as they are dependent one another. This can cause
48
+ * visual distortions (like alignment issues) that are hard to track down
49
+ * and fix.
43
50
  */
44
51
 
45
52
 
@@ -75,8 +82,8 @@ $image_path: '/images' !default;
75
82
 
76
83
  /* ========== Color & Themes ========== */
77
84
 
78
- // Define whether individual color pallet items should have classes created.
79
- // Setting this to true will remove individual color classes for each color in the pallets.
85
+ // Define whether individual color palette items should have classes created.
86
+ // Setting this to true will remove individual color classes for each color in the palettes.
80
87
  // To improve overall performance (assuming they aren't used) by:
81
88
  // * Saving server bandwidth sending the extra classes
82
89
  // * Save client computation against the classes
@@ -266,6 +273,7 @@ $progress-image-path: $image_path;
266
273
 
267
274
  $list-container-item-border-color: unquote("rgb(#{$palette-grey-300})") !default;
268
275
  $list-container-view-background: unquote("rgb(#{$color-white})") !default;
276
+ $list-supporting-text-text-color: unquote("rgba(#{$color-black}, 0.54)") !default;
269
277
 
270
278
  /* ========== Item ========== */
271
279
 
@@ -275,6 +283,7 @@ $default-item-outline-color: unquote("rgb(#{$palette-grey-400})") !default;
275
283
  $default-item-hover-bg-color: unquote("rgb(#{$palette-grey-200})") !default;
276
284
  $default-item-focus-bg-color: unquote("rgb(#{$palette-grey-200})") !default;
277
285
  $default-item-active-bg-color: unquote("rgb(#{$palette-grey-300})") !default;
286
+ $default-item-divider-color: unquote("rgba(#{$color-black}, 0.12)") !default;
278
287
 
279
288
  // Disabled Button Colors
280
289
  $disabled-item-text-color: unquote("rgb(#{$palette-grey-400})") !default;
@@ -299,28 +308,27 @@ $footer-underline-color: $footer-color !default;
299
308
 
300
309
  /* TEXTFIELD */
301
310
 
302
- $input-text-font-size: 16px;
303
- $input-text-width: 100%;
304
- $input-text-padding: 4px;
305
- $input-text-ripple-size: 32px;
306
- $input-text-vertical-spacing: 20px;
311
+ $input-text-font-size: 16px !default;
312
+ $input-text-width: 100% !default;
313
+ $input-text-padding: 4px !default;
314
+ $input-text-vertical-spacing: 20px !default;
307
315
 
308
- $input-text-button-size: 32px;
309
- $input-text-floating-label-fontsize: 12px;
310
- $input-text-expandable-icon-top: 16px;
316
+ $input-text-button-size: 32px !default;
317
+ $input-text-floating-label-fontsize: 12px !default;
318
+ $input-text-expandable-icon-top: 16px !default;
311
319
 
312
320
 
313
321
  /* SWITCH */
314
322
 
315
- $switch-label-font-size: 16px;
316
- $switch-label-height: 24px;
317
- $switch-track-height: 14px;
318
- $switch-track-length: 36px;
319
- $switch-thumb-size: 20px;
320
- $switch-track-top: ($switch-label-height - $switch-track-height) / 2;
321
- $switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2;
322
- $switch-ripple-size: $switch-label-height * 2;
323
- $switch-helper-size: 8px;
323
+ $switch-label-font-size: 16px !default;
324
+ $switch-label-height: 24px !default;
325
+ $switch-track-height: 14px !default;
326
+ $switch-track-length: 36px !default;
327
+ $switch-thumb-size: 20px !default;
328
+ $switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;
329
+ $switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;
330
+ $switch-ripple-size: $switch-label-height * 2 !default;
331
+ $switch-helper-size: 8px !default;
324
332
 
325
333
  /* SPINNER */
326
334
 
@@ -328,11 +336,11 @@ $spinner-size: 28px !default;
328
336
  $spinner-stroke-width: 3px !default;
329
337
 
330
338
  // Amount of circle the arc takes up.
331
- $spinner-arc-size: 270deg;
339
+ $spinner-arc-size: 270deg !default;
332
340
  // Time it takes to expand and contract arc.
333
- $spinner-arc-time: 1333ms;
341
+ $spinner-arc-time: 1333ms !default;
334
342
  // How much the start location of the arc should rotate each time.
335
- $spinner-arc-start-rot: 216deg;
343
+ $spinner-arc-start-rot: 216deg !default;
336
344
 
337
345
  $spinner-duration: 360 * $spinner-arc-time / (
338
346
  strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));
@@ -340,55 +348,54 @@ $spinner-duration: 360 * $spinner-arc-time / (
340
348
 
341
349
  /* RADIO */
342
350
 
343
- $radio-label-font-size: 16px;
344
- $radio-label-height: 24px;
345
- $radio-button-size: 16px;
351
+ $radio-label-font-size: 16px !default;
352
+ $radio-label-height: 24px !default;
353
+ $radio-button-size: 16px !default;
346
354
  $radio-inner-margin: $radio-button-size / 4;
347
- $radio-padding: 8px;
355
+ $radio-padding: 8px !default;
348
356
  $radio-top-offset: ($radio-label-height - $radio-button-size) / 2;
349
- $radio-ripple-size: 42px;
357
+ $radio-ripple-size: 42px !default;
350
358
 
351
359
 
352
360
  /* MENU */
353
361
 
354
- $menu-expand-duration: 0.3s;
355
- $menu-fade-duration: 0.2s;
362
+ $menu-expand-duration: 0.3s !default;
363
+ $menu-fade-duration: 0.2s !default;
356
364
 
357
365
  /* LIST */
358
366
 
359
- $list-container-height: 500px;
360
- $list-container-width: 400px;
361
- $list-container-item-height: 70px;
367
+ $list-container-height: 500px !default;
368
+ $list-container-width: 400px !default;
369
+ $list-container-item-height: 70px !default;
370
+ // $list__item-hover-color: unquote("rgb(#{$palette-grey-300})") !default;
362
371
 
363
372
  /* LAYOUT */
364
373
 
365
- $layout-nav-link-font-size: 13px;
366
-
367
- $layout-drawer-narrow: 240px;
368
- $layout-drawer-wide: 456px;
369
- $layout-drawer-width: $layout-drawer-narrow;
374
+ $layout-drawer-narrow: 240px !default;
375
+ $layout-drawer-wide: 456px !default;
376
+ $layout-drawer-width: $layout-drawer-narrow !default;
370
377
 
371
- $layout-header-icon-size: 32px;
372
- $layout-screen-size-threshold: 1024px;
373
- $layout-header-icon-margin: 24px;
374
- $layout-drawer-button-mobile-size: 32px;
375
- $layout-drawer-button-desktop-size: 48px;
378
+ $layout-header-icon-size: 32px !default;
379
+ $layout-screen-size-threshold: 1024px !default;
380
+ $layout-header-icon-margin: 24px !default;
381
+ $layout-drawer-button-mobile-size: 32px !default;
382
+ $layout-drawer-button-desktop-size: 48px !default;
376
383
 
377
- $layout-header-mobile-row-height: 56px;
384
+ $layout-header-mobile-row-height: 56px !default;
378
385
  $layout-mobile-header-height: $layout-header-mobile-row-height;
379
- $layout-header-desktop-row-height: 64px;
386
+ $layout-header-desktop-row-height: 64px !default;
380
387
  $layout-desktop-header-height: $layout-header-desktop-row-height;
381
388
 
382
- $layout-header-desktop-baseline: 80px;
383
- $layout-header-mobile-baseline: 72px;
384
- $layout-header-mobile-indent: 16px;
385
- $layout-header-desktop-indent: 40px;
389
+ $layout-header-desktop-baseline: 80px !default;
390
+ $layout-header-mobile-baseline: 72px !default;
391
+ $layout-header-mobile-indent: 16px !default;
392
+ $layout-header-desktop-indent: 40px !default;
386
393
 
387
- $layout-tab-font-size: 14px;
388
- $layout-tab-bar-height: 48px;
389
- $layout-tab-mobile-padding: 12px;
390
- $layout-tab-desktop-padding: 24px;
391
- $layout-tab-highlight-thickness: 2px;
394
+ $layout-tab-font-size: 14px !default;
395
+ $layout-tab-bar-height: 48px !default;
396
+ $layout-tab-mobile-padding: 12px !default;
397
+ $layout-tab-desktop-padding: 24px !default;
398
+ $layout-tab-highlight-thickness: 2px !default;
392
399
 
393
400
 
394
401
  /* ICON TOGGLE */
@@ -414,11 +421,11 @@ $footer-btn-size: 36px !default;
414
421
 
415
422
  /* CHECKBOX */
416
423
 
417
- $checkbox-label-font-size: 16px;
418
- $checkbox-label-height: 24px;
419
- $checkbox-button-size: 16px;
420
- $checkbox-inner-margin: 2px;
421
- $checkbox-padding: 8px;
424
+ $checkbox-label-font-size: 16px !default;
425
+ $checkbox-label-height: 24px !default;
426
+ $checkbox-button-size: 16px !default;
427
+ $checkbox-inner-margin: 2px !default;
428
+ $checkbox-padding: 8px !default;
422
429
  $checkbox-top-offset:
423
430
  ($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;
424
431
  $checkbox-ripple-size: $checkbox-label-height * 1.5;
@@ -443,7 +450,7 @@ $card-title-transform-origin-y: 56px !default;
443
450
  $card-title-text-transform-origin-x: 149px !default;
444
451
  $card-title-text-transform-origin-y: 48px !default;
445
452
 
446
- $card-supporting-text-font-size: 13px !default;
453
+ $card-supporting-text-font-size: 1rem !default;
447
454
  $card-supporting-text-line-height: 18px !default;
448
455
 
449
456
  $card-actions-font-size: 16px !default;
@@ -488,19 +495,20 @@ $animation-curve-default: $animation-curve-fast-out-slow-in !default;
488
495
  $bar-height: 4px !default;
489
496
 
490
497
  /* BADGE */
491
- $badge-font-size: 12px;
498
+ $badge-font-size: 12px !default;
492
499
  $badge-color: unquote("rgb(#{$color-accent-contrast})") !default;
493
500
  $badge-color-inverse: unquote("rgb(#{$color-accent})") !default;
494
501
  $badge-background: unquote("rgb(#{$color-accent})") !default;
495
- $badge-background-inverse: unquote("rgb(#{$color-accent-contrast})") !default;
496
- $badge-size : 22px;
497
- $badge-padding: 2px;
502
+ $badge-background-inverse: unquote("rgba(#{$color-accent-contrast},0.2)") !default;
503
+ $badge-size : 22px !default;
504
+ $badge-padding: 2px !default;
505
+ $badge-overlap: 12px !default;
498
506
 
499
507
  /* SHADOWS */
500
508
 
501
- $shadow-key-umbra-opacity: 0.2;
502
- $shadow-key-penumbra-opacity: 0.14;
503
- $shadow-ambient-shadow-opacity: 0.12;
509
+ $shadow-key-umbra-opacity: 0.2 !default;
510
+ $shadow-key-penumbra-opacity: 0.14 !default;
511
+ $shadow-ambient-shadow-opacity: 0.12 !default;
504
512
 
505
513
  /* GRID */
506
514
 
@@ -521,33 +529,46 @@ $grid-phone-gutter: $grid-desktop-gutter !default;
521
529
  $grid-phone-margin: $grid-desktop-margin !default;
522
530
 
523
531
  $grid-cell-default-columns: $grid-phone-columns !default;
532
+ $grid-max-columns: $grid-desktop-columns !default;
524
533
 
525
534
  /* DATA TABLE */
526
535
 
527
- $data-table-font-size: 13px;
528
- $data-table-header-font-size: 12px;
536
+ $data-table-font-size: 13px !default;
537
+ $data-table-header-font-size: 12px !default;
538
+ $data-table-header-sort-icon-size: 16px !default;
529
539
 
530
- $data-table-header-color: rgba(#000, 0.54);
531
- $data-table-divider-color: rgba(#000, 0.12);
540
+ $data-table-header-color: rgba(#000, 0.54) !default;
541
+ $data-table-header-sorted-color: rgba(#000, 0.87) !default;
542
+ $data-table-divider-color: rgba(#000, 0.12) !default;
532
543
 
533
- $data-table-hover-color: #eeeeee;
534
- $data-table-selection-color: #e0e0e0;
544
+ $data-table-hover-color: #eeeeee !default;
545
+ $data-table-selection-color: #e0e0e0 !default;
535
546
 
536
- $data-table-dividers: 1px solid $data-table-divider-color;
547
+ $data-table-dividers: 1px solid $data-table-divider-color !default;
537
548
 
538
- $data-table-row-height: 48px;
539
- $data-table-last-row-height: 56px;
540
- $data-table-header-height: 56px;
549
+ $data-table-row-height: 48px !default;
550
+ $data-table-last-row-height: 56px !default;
551
+ $data-table-header-height: 56px !default;
541
552
 
542
- $data-table-column-spacing: 36px;
553
+ $data-table-column-spacing: 36px !default;
543
554
  $data-table-column-padding: $data-table-column-spacing / 2;
544
555
 
545
- $data-table-card-header-height: 64px;
546
- $data-table-card-title-top: 20px;
547
- $data-table-card-padding: 24px;
548
- $data-table-button-padding-right: 16px;
556
+ $data-table-card-header-height: 64px !default;
557
+ $data-table-card-title-top: 20px !default;
558
+ $data-table-card-padding: 24px !default;
559
+ $data-table-button-padding-right: 16px !default;
549
560
  $data-table-cell-top: $data-table-card-padding / 2;
550
561
 
562
+ /* DIALOG */
563
+ $dialog-content-color: $card-supporting-text-text-color;
564
+
565
+ /* SNACKBAR */
566
+
567
+ // Hard coded since the color is not present in any palette.
568
+ $snackbar-background-color: #323232 !default;
569
+ $snackbar-tablet-breakpoint: $grid-tablet-breakpoint;
570
+ $snackbar-action-color: unquote("rgb(#{$color-accent})") !default;
571
+
551
572
  /* TOOLTIP */
552
573
  $tooltip-font-size: 10px !default;
553
574
  $tooltip-font-size-large: 14px !default;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: material_design_lite-sass
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitriy Tarasov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-21 00:00:00.000000000 Z
11
+ date: 2016-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sass
@@ -125,6 +125,7 @@ files:
125
125
  - vendor/assets/javascripts/material/radio.js
126
126
  - vendor/assets/javascripts/material/ripple.js
127
127
  - vendor/assets/javascripts/material/slider.js
128
+ - vendor/assets/javascripts/material/snackbar.js
128
129
  - vendor/assets/javascripts/material/spinner.js
129
130
  - vendor/assets/javascripts/material/switch.js
130
131
  - vendor/assets/javascripts/material/tabs.js
@@ -138,10 +139,12 @@ files:
138
139
  - vendor/assets/stylesheets/material/_checkbox.scss
139
140
  - vendor/assets/stylesheets/material/_color-definitions.scss
140
141
  - vendor/assets/stylesheets/material/_data-table.scss
142
+ - vendor/assets/stylesheets/material/_dialog.scss
141
143
  - vendor/assets/stylesheets/material/_functions.scss
142
144
  - vendor/assets/stylesheets/material/_grid.scss
143
145
  - vendor/assets/stylesheets/material/_icon-toggle.scss
144
146
  - vendor/assets/stylesheets/material/_layout.scss
147
+ - vendor/assets/stylesheets/material/_list.scss
145
148
  - vendor/assets/stylesheets/material/_material-icons.scss
146
149
  - vendor/assets/stylesheets/material/_mega_footer.scss
147
150
  - vendor/assets/stylesheets/material/_menu.scss
@@ -155,6 +158,7 @@ files:
155
158
  - vendor/assets/stylesheets/material/_roboto.scss
156
159
  - vendor/assets/stylesheets/material/_shadow.scss
157
160
  - vendor/assets/stylesheets/material/_slider.scss
161
+ - vendor/assets/stylesheets/material/_snackbar.scss
158
162
  - vendor/assets/stylesheets/material/_spinner.scss
159
163
  - vendor/assets/stylesheets/material/_switch.scss
160
164
  - vendor/assets/stylesheets/material/_tabs.scss
@@ -184,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
188
  version: '0'
185
189
  requirements: []
186
190
  rubyforge_project:
187
- rubygems_version: 2.4.7
191
+ rubygems_version: 2.4.8
188
192
  signing_key:
189
193
  specification_version: 4
190
194
  summary: Google's Material Design Lite with Material Icons and Roboto for Sass powered