rolodex 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +25 -0
  6. data/Rakefile +1 -0
  7. data/karma.conf.js +87 -0
  8. data/lib/rolodex.rb +31 -0
  9. data/lib/rolodex/engine.rb +12 -0
  10. data/lib/rolodex/sass.rb +5 -0
  11. data/lib/rolodex/version.rb +3 -0
  12. data/package.json +33 -0
  13. data/rolodex.gemspec +29 -0
  14. data/spec/javascripts/rolodex_angular/modal.spec.coffee +13 -0
  15. data/spec/spec_helper.rb +0 -0
  16. data/spec/test_lib/angular-mocks.js +2173 -0
  17. data/spec/test_lib/angular.js +21883 -0
  18. data/spec/test_lib/jquery-2.1.1.js +9190 -0
  19. data/spec/test_lib/lodash.js +6785 -0
  20. data/vendor/assets/.keep +0 -0
  21. data/vendor/assets/images/alerts/icon-danger-dark.png +0 -0
  22. data/vendor/assets/images/alerts/icon-danger-dark.svg +9 -0
  23. data/vendor/assets/images/alerts/icon-danger-light.png +0 -0
  24. data/vendor/assets/images/alerts/icon-danger-light.svg +9 -0
  25. data/vendor/assets/images/alerts/icon-flop-dark.png +0 -0
  26. data/vendor/assets/images/alerts/icon-flop-dark.svg +11 -0
  27. data/vendor/assets/images/alerts/icon-flop-light.png +0 -0
  28. data/vendor/assets/images/alerts/icon-flop-light.svg +11 -0
  29. data/vendor/assets/images/alerts/icon-info-dark.png +0 -0
  30. data/vendor/assets/images/alerts/icon-info-dark.svg +9 -0
  31. data/vendor/assets/images/alerts/icon-info-light.png +0 -0
  32. data/vendor/assets/images/alerts/icon-info-light.svg +9 -0
  33. data/vendor/assets/images/alerts/icon-tick-dark.png +0 -0
  34. data/vendor/assets/images/alerts/icon-tick-dark.svg +9 -0
  35. data/vendor/assets/images/alerts/icon-tick-light.png +0 -0
  36. data/vendor/assets/images/alerts/icon-tick-light.svg +9 -0
  37. data/vendor/assets/images/forms/checkbox.png +0 -0
  38. data/vendor/assets/images/forms/checkbox.svg +13 -0
  39. data/vendor/assets/images/forms/icon-calendar.png +0 -0
  40. data/vendor/assets/images/forms/icon-calendar.svg +20 -0
  41. data/vendor/assets/images/forms/icon-search.png +0 -0
  42. data/vendor/assets/images/forms/icon-search.svg +13 -0
  43. data/vendor/assets/images/forms/icon-validating.gif +0 -0
  44. data/vendor/assets/images/forms/icon-validating.psd +0 -0
  45. data/vendor/assets/images/forms/radio-button.png +0 -0
  46. data/vendor/assets/images/forms/radio-button.svg +12 -0
  47. data/vendor/assets/images/icons/icon-caret.png +0 -0
  48. data/vendor/assets/images/icons/icon-caret.svg +24 -0
  49. data/vendor/assets/images/icons/icon-close-x.png +0 -0
  50. data/vendor/assets/images/icons/icon-close-x.svg +9 -0
  51. data/vendor/assets/images/icons/icon-expand-gray.png +0 -0
  52. data/vendor/assets/images/icons/icon-expand-gray.svg +11 -0
  53. data/vendor/assets/images/icons/icon-expand-white.png +0 -0
  54. data/vendor/assets/images/icons/icon-expand-white.svg +11 -0
  55. data/vendor/assets/images/icons/icon-image.png +0 -0
  56. data/vendor/assets/images/icons/icon-image.svg +12 -0
  57. data/vendor/assets/images/icons/icon-invalid.png +0 -0
  58. data/vendor/assets/images/icons/icon-invalid.svg +14 -0
  59. data/vendor/assets/images/icons/icon-plane.png +0 -0
  60. data/vendor/assets/images/icons/icon-plane.svg +15 -0
  61. data/vendor/assets/images/icons/icon-star-banner.png +0 -0
  62. data/vendor/assets/images/icons/icon-star-banner.svg +16 -0
  63. data/vendor/assets/images/icons/icon-suggest.png +0 -0
  64. data/vendor/assets/images/icons/icon-suggest.svg +15 -0
  65. data/vendor/assets/images/icons/icon-tick.png +0 -0
  66. data/vendor/assets/images/icons/icon-tick.svg +9 -0
  67. data/vendor/assets/images/icons/icon-valid.png +0 -0
  68. data/vendor/assets/images/icons/icon-valid.svg +9 -0
  69. data/vendor/assets/images/loading/loading.png +0 -0
  70. data/vendor/assets/images/loading/loading.svg +23 -0
  71. data/vendor/assets/images/logo/belly-logo.png +0 -0
  72. data/vendor/assets/images/logo/belly-logo.svg +19 -0
  73. data/vendor/assets/images/tooltips/tooltip-star.png +0 -0
  74. data/vendor/assets/images/tooltips/tooltip-star.svg +20 -0
  75. data/vendor/assets/javascripts/rolodex_angular.coffee +3 -0
  76. data/vendor/assets/javascripts/rolodex_angular/README.md +68 -0
  77. data/vendor/assets/javascripts/rolodex_angular/rolodex.coffee +11 -0
  78. data/vendor/assets/javascripts/rolodex_angular/src/accordion.coffee +100 -0
  79. data/vendor/assets/javascripts/rolodex_angular/src/alert.coffee +17 -0
  80. data/vendor/assets/javascripts/rolodex_angular/src/buttons.coffee +59 -0
  81. data/vendor/assets/javascripts/rolodex_angular/src/collapse.coffee +65 -0
  82. data/vendor/assets/javascripts/rolodex_angular/src/dateparser.coffee +125 -0
  83. data/vendor/assets/javascripts/rolodex_angular/src/datepicker.coffee +547 -0
  84. data/vendor/assets/javascripts/rolodex_angular/src/dropdown.coffee +143 -0
  85. data/vendor/assets/javascripts/rolodex_angular/src/modal.coffee +331 -0
  86. data/vendor/assets/javascripts/rolodex_angular/src/position.coffee +128 -0
  87. data/vendor/assets/javascripts/rolodex_angular/src/transition.coffee +73 -0
  88. data/vendor/assets/javascripts/rolodex_angular/template/accordion/accordion-group.ngt.haml +7 -0
  89. data/vendor/assets/javascripts/rolodex_angular/template/accordion/accordion.ngt.haml +1 -0
  90. data/vendor/assets/javascripts/rolodex_angular/template/alert/alert.ngt.haml +3 -0
  91. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/datepicker.ngt.haml +4 -0
  92. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/day.ngt.haml +20 -0
  93. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/month.ngt.haml +17 -0
  94. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/popup.ngt.haml +2 -0
  95. data/vendor/assets/javascripts/rolodex_angular/template/datepicker/year.ngt.haml +17 -0
  96. data/vendor/assets/javascripts/rolodex_angular/template/modal/window.ngt.haml +2 -0
  97. data/vendor/assets/javascripts/vendor/jquery-1.10.2.min.js +6 -0
  98. data/vendor/assets/javascripts/vendor/modernizr-2.6.2.min.js +4 -0
  99. data/vendor/assets/stylesheets/rolodex.css.sass +26 -0
  100. data/vendor/assets/stylesheets/rolodex/base/_layout.sass +58 -0
  101. data/vendor/assets/stylesheets/rolodex/base/_typography.sass +123 -0
  102. data/vendor/assets/stylesheets/rolodex/components/_alerts.sass +112 -0
  103. data/vendor/assets/stylesheets/rolodex/components/_buttons.sass +103 -0
  104. data/vendor/assets/stylesheets/rolodex/components/_dropdowns.sass +121 -0
  105. data/vendor/assets/stylesheets/rolodex/components/_forms.sass +326 -0
  106. data/vendor/assets/stylesheets/rolodex/components/_icons.sass +76 -0
  107. data/vendor/assets/stylesheets/rolodex/components/_labels.sass +29 -0
  108. data/vendor/assets/stylesheets/rolodex/components/_lists.sass +15 -0
  109. data/vendor/assets/stylesheets/rolodex/components/_loading.sass +32 -0
  110. data/vendor/assets/stylesheets/rolodex/components/_media.sass +14 -0
  111. data/vendor/assets/stylesheets/rolodex/components/_modals.sass +83 -0
  112. data/vendor/assets/stylesheets/rolodex/components/_tables.sass +9 -0
  113. data/vendor/assets/stylesheets/rolodex/components/_tooltips.sass +123 -0
  114. data/vendor/assets/stylesheets/rolodex/settings/_settings.sass +33 -0
  115. data/vendor/assets/stylesheets/rolodex/settings/mixins/_bump.sass +51 -0
  116. data/vendor/assets/stylesheets/rolodex/settings/mixins/_icons.sass +17 -0
  117. data/vendor/assets/stylesheets/rolodex/settings/mixins/_layout.sass +52 -0
  118. data/vendor/assets/stylesheets/rolodex/settings/mixins/_rems.sass +41 -0
  119. data/vendor/assets/stylesheets/rolodex/settings/mixins/_svg.sass +10 -0
  120. data/vendor/assets/stylesheets/rolodex/settings/mixins/_typography.sass +65 -0
  121. data/vendor/assets/stylesheets/rolodex/settings/utilities/_layout.sass +51 -0
  122. data/vendor/assets/stylesheets/rolodex/settings/utilities/_misc.sass +13 -0
  123. data/vendor/assets/stylesheets/rolodex/settings/utilities/_typography.sass +60 -0
  124. data/vendor/assets/stylesheets/rolodex/settings/variables/_alerts.scss +27 -0
  125. data/vendor/assets/stylesheets/rolodex/settings/variables/_buttons.scss +10 -0
  126. data/vendor/assets/stylesheets/rolodex/settings/variables/_colors.scss +46 -0
  127. data/vendor/assets/stylesheets/rolodex/settings/variables/_labels.scss +10 -0
  128. data/vendor/assets/stylesheets/rolodex/settings/variables/_layout.scss +22 -0
  129. data/vendor/assets/stylesheets/rolodex/settings/variables/_misc.scss +12 -0
  130. data/vendor/assets/stylesheets/rolodex/settings/variables/_typography.scss +34 -0
  131. metadata +263 -0
@@ -0,0 +1,112 @@
1
+ // Alerts
2
+ // ========================================
3
+
4
+ .alert-title
5
+ display: block
6
+ font-weight: 600
7
+ +rem(margin-bottom, $baseline-step)
8
+
9
+ .alert-signal
10
+ font-weight: 600
11
+ line-height: 1
12
+ +rem(padding-right, 5px)
13
+ text-transform: uppercase
14
+
15
+ .alert-action
16
+ float: right
17
+
18
+ // Kinds
19
+
20
+ @each $alert in $alerts
21
+
22
+ $kind: nth($alert, 1)
23
+ $icon: nth($alert, 2)
24
+ $color: nth($alert, 3)
25
+ $color-light: nth($alert, 4)
26
+ $color-dark: nth($alert, 5)
27
+
28
+ .alert-banner-#{$kind},
29
+ .alert-inline-#{$kind}
30
+ background-repeat: no-repeat
31
+
32
+ a
33
+ text-decoration: underline
34
+
35
+ // Banner alerts
36
+
37
+ .alert-banner-#{$kind}
38
+ background-color: $color
39
+ +background-svg("alerts/icon-#{$icon}-light")
40
+ color: $white
41
+ +s-echo
42
+ +bump(padding, baselines-small gutters-half)
43
+ position: relative
44
+
45
+ .i-close
46
+ +rem(top, 23px)
47
+
48
+ a,
49
+ .alert-signal
50
+ color: $color-light
51
+
52
+ a:active,
53
+ a:hover
54
+ color: $white
55
+
56
+ .alert-signal
57
+ +s-delta
58
+
59
+ .alert-action
60
+ text-decoration: none
61
+
62
+ &.alert-dismissible
63
+ +rem(padding-right, $gutter-half * 3)
64
+
65
+ // Inline alerts
66
+
67
+ .alert-inline-#{$kind}
68
+ background-color: $color-light
69
+ +background-svg("alerts/icon-#{$icon}-dark")
70
+ +rem(border, 1px solid $color)
71
+ +rem(border-radius, $border-radius-base)
72
+ color: $black-offset
73
+ display: inline-block
74
+ +rem(padding, (($baseline-step * 1.5) - 1) ($gutter-half - 1))
75
+
76
+ a,
77
+ .alert-signal
78
+ color: $color
79
+
80
+ a:active,
81
+ a:hover
82
+ color: $color-dark
83
+
84
+ // Banner alerts
85
+ // ========================================
86
+
87
+ @each $alert in $alerts-banner
88
+
89
+ $kind: nth($alert, 1)
90
+ $width: nth($alert, 2)
91
+ $height: nth($alert, 3)
92
+ $offset: nth($alert, 4)
93
+
94
+ .alert-banner-#{$kind}
95
+ +rem(background-position, $gutter-half $offset)
96
+ +rem(background-size, $width $height)
97
+ +rem(padding-left, $gutter + $width)
98
+
99
+ // Inline alerts
100
+ // ========================================
101
+
102
+ @each $alert in $alerts-inline
103
+
104
+ $kind: nth($alert, 1)
105
+ $width: nth($alert, 2)
106
+ $height: nth($alert, 3)
107
+ $offset: nth($alert, 4)
108
+
109
+ .alert-inline-#{$kind}
110
+ +rem(background-position, 14px $offset)
111
+ +rem(background-size, $width $height)
112
+ +rem(padding-left, 24px + $width)
@@ -0,0 +1,103 @@
1
+ // Buttons
2
+ // ========================================
3
+
4
+ .btn
5
+ +rem(border, 1px solid transparent)
6
+ +rem(border-radius, $border-radius-base)
7
+ color: $white
8
+ cursor: pointer
9
+ display: inline-block
10
+ font-family: $font-family-open-sans
11
+ +s-foxtrot
12
+ +rem(line-height, $baseline-base)
13
+ margin: 0
14
+ outline: 0
15
+ +rem(padding, 8px 14px)
16
+ text-align: center
17
+ text-decoration: none
18
+ transition: $transition-all
19
+ vertical-align: middle
20
+ white-space: nowrap
21
+
22
+ &:hover,
23
+ &:active
24
+ color: $white
25
+
26
+ &[disabled],
27
+ &[disabled]:hover,
28
+ &[disabled]:focus,
29
+ &[disabled]:active
30
+ background-color: $gray-light
31
+ border-color: transparent
32
+ color: #eee
33
+ cursor: not-allowed
34
+
35
+ .btn-large
36
+ +s-delta
37
+ +rem(padding, 16px $gutter $baseline-small $gutter)
38
+
39
+ .btn-small
40
+ +rem(border-radius, $border-radius-mini)
41
+ +s-golf
42
+ +rem(padding, ($baseline-step - 1) 10px)
43
+
44
+ // Kinds
45
+ // ========================================
46
+
47
+ @each $btn in $btns
48
+
49
+ $kind: nth($btn, 1)
50
+ $bg-normal: nth($btn, 2)
51
+ $bg-hover: nth($btn, 3)
52
+ $bg-active: nth($btn, 4)
53
+
54
+ .btn-#{$kind}
55
+ background-color: $bg-normal
56
+
57
+ @if $kind == "boring"
58
+ border-color: $gray-light
59
+ color: $gray-dark
60
+
61
+ &:hover
62
+ background-color: $bg-hover
63
+
64
+ &:active
65
+ background-color: $bg-active
66
+
67
+ .btn-boring:hover,
68
+ .btn-boring:active
69
+ color: $gray-dark
70
+
71
+ // Alternate & Overlay
72
+ // ========================================
73
+
74
+ .btn-alt,
75
+ .btn-overlay
76
+ +rem(padding, 7px 13px)
77
+
78
+ &.btn-large
79
+ +rem(padding, 15px 28px 17px 28px)
80
+
81
+ &.btn-small
82
+ +rem(padding, ($baseline-step - 2) 10px)
83
+
84
+ // Alternate
85
+
86
+ .btn-alt
87
+ border-color: $white
88
+ +rem(border-width, 2px)
89
+
90
+ // Overlay
91
+
92
+ .btn-overlay
93
+ background-color: rgba($black, .3)
94
+ border-color: rgba($white, .5)
95
+ +rem(border-width, 2px)
96
+ color: $white
97
+
98
+ &:hover,
99
+ &:focus
100
+ background-color: rgba($black, .5)
101
+
102
+ &:active
103
+ background-color: rgba($black, .7)
@@ -0,0 +1,121 @@
1
+ // Dropdowns
2
+ // ========================================
3
+
4
+ // Functionality
5
+ // ========================================
6
+
7
+ [data-dropdown]
8
+ position: relative
9
+
10
+ [data-dropdown-content]
11
+ opacity: 0
12
+ pointer-events: none
13
+ position: absolute
14
+ transition: $transition-all
15
+ z-index: 4
16
+
17
+ [data-dropdown-open] &
18
+ opacity: 1
19
+ pointer-events: auto
20
+
21
+ // Dropdown arrow
22
+ // ========================================
23
+
24
+ .dropdown,
25
+ .dropdown-alt
26
+ display: inline-block
27
+ vertical-align: middle
28
+
29
+ .dropdown:after
30
+ +i-caret
31
+ content: ""
32
+ cursor: pointer
33
+ position: absolute
34
+ +rem(right, $gutter-half)
35
+ +center(y)
36
+ z-index: 3
37
+
38
+ .dropdown:hover:after,
39
+ .dropdown[data-dropdown-open]:after,
40
+ [data-dropdown-open] .dropdown:after
41
+ +rem(background-position, 0 -8px)
42
+
43
+ // Dropdown toggle
44
+ // ========================================
45
+
46
+ .dropdown-toggle
47
+ background-color: $white
48
+ +rem(border, 1px solid $gray-light)
49
+ +rem(border-radius, $border-radius-base)
50
+ color: $black-offset
51
+ cursor: pointer
52
+ +rem(padding, ($baseline-step + 2) 36px ($baseline-step + 2) ($gutter-half - 1))
53
+ text-align: left
54
+
55
+ &:focus
56
+ outline: 0
57
+
58
+ [data-dropdown-open] &
59
+ border-color: $blue
60
+
61
+ .form-row &
62
+ border-bottom-left-radius: 0
63
+ border-top-left-radius: 0
64
+
65
+ .dropdown-toggle-solo
66
+ +rem(padding, 20px 26px 20px 14px)
67
+
68
+ // Menu
69
+ // ========================================
70
+
71
+ .dropdown-menu
72
+ +box-overlay
73
+ +rem(margin-top, $baseline-x-small)
74
+ +rem(min-width, 140px)
75
+ right: 0
76
+ top: 100%
77
+
78
+ .dropdown-right &
79
+ left: 0
80
+ right: auto
81
+
82
+ .dropdown-menu-item
83
+
84
+ &:not(:last-child)
85
+ +rem(border-bottom, 1px solid $gray-light)
86
+
87
+ a
88
+ color: $black-offset
89
+ display: block
90
+ +rem(padding, 10px 22px)
91
+
92
+ &:hover,
93
+ &:focus
94
+ color: $blue
95
+
96
+ // Within a form row
97
+ // ========================================
98
+
99
+ .form-row
100
+
101
+ [data-dropdown]
102
+ width: 100%
103
+
104
+ .form-control:first-child,
105
+ .form-area:first-child
106
+ border-bottom-left-radius: 0
107
+ border-top-left-radius: 0
108
+
109
+ &:not(:first-child):not(:last-child)
110
+ .form-control,
111
+ .form-area
112
+ border-radius: 0
113
+
114
+ .dropdown-toggle
115
+ +rem(min-height, $baseline-step * 7)
116
+
117
+ // Error state
118
+ // ========================================
119
+
120
+ .form-error .dropdown-toggle
121
+ border-color: $red
@@ -0,0 +1,326 @@
1
+ // Forms
2
+ // ========================================
3
+
4
+ // Resets
5
+ // ========================================
6
+
7
+ fieldset
8
+ border: 0
9
+ margin: 0
10
+ min-width: 0
11
+ padding: 0
12
+ width: 100%
13
+
14
+ legend,
15
+ button::-moz-focus-inner,
16
+ input::-moz-focus-inner
17
+ border: 0
18
+ padding: 0
19
+
20
+ button[disabled],
21
+ html input[disabled]
22
+ cursor: not-allowed
23
+
24
+ input[type="checkbox"],
25
+ input[type="radio"]
26
+ box-sizing: border-box
27
+ padding: 0
28
+
29
+ input[type="search"]
30
+ -webkit-appearance: textfield
31
+ box-sizing: border-box
32
+
33
+ input[type="search"]::-webkit-search-cancel-button,
34
+ input[type="search"]::-webkit-search-decoration
35
+ -webkit-appearance: none
36
+
37
+ // Default styles
38
+ // ========================================
39
+
40
+ button,
41
+ input,
42
+ optgroup,
43
+ select,
44
+ textarea
45
+ color: inherit
46
+ font: inherit
47
+ margin: 0
48
+
49
+ .form-group
50
+ +rem(margin-bottom, $baseline-base)
51
+ position: relative
52
+
53
+ .form-label
54
+ display: inline-block
55
+ font-weight: 600
56
+ +rem(margin-bottom, $baseline-step)
57
+
58
+ .form-subtle,
59
+ .form-claim
60
+ +s-golf
61
+
62
+ .form-subtle
63
+ color: $gray
64
+ font-weight: 400
65
+
66
+ .form-claim
67
+ float: right
68
+ +rem(line-height, $baseline-base)
69
+ transition: $transition-all
70
+
71
+ // Text inputs and textareas
72
+
73
+ .form-control,
74
+ .form-area,
75
+ .form-placeholder
76
+ background-color: $white
77
+ background-image: none
78
+ +rem(border, 1px solid $gray-light)
79
+ +rem(border-radius, $border-radius-base)
80
+ color: $black-offset
81
+ display: block
82
+ +rem(padding, ($baseline-step + 2) ($gutter-half - 1))
83
+ position: relative
84
+ transition: border .15s ease, background-image .15s ease
85
+ width: 100%
86
+
87
+ &:focus
88
+ border-color: $blue
89
+ outline: 0
90
+ z-index: 2
91
+
92
+ &[disabled],
93
+ &[readonly],
94
+ [disabled] &
95
+ background-color: $white-offset
96
+ color: $gray-light
97
+ cursor: not-allowed
98
+
99
+ &:-ms-input-placeholder,
100
+ &:-moz-placeholder,
101
+ &::-webkit-input-placeholder
102
+ color: $gray
103
+
104
+ &::-moz-placeholder
105
+ opacity: 1
106
+
107
+ &[type='search']
108
+ +background-svg("forms/icon-search", 15px)
109
+ background-position: 14px 50%
110
+ background-repeat: no-repeat
111
+ +rem(padding-left, 38px)
112
+
113
+ .form-area
114
+ +rem(min-height, $baseline-large)
115
+
116
+ .form-date
117
+ +background-svg("forms/icon-calendar", 20px 21px)
118
+ background-position: right 14px top 50% // +rem doesn't work with 50%
119
+ background-repeat: no-repeat
120
+ +rem(padding-right, 48px)
121
+
122
+ .form-placeholder
123
+ background-color: $white-offset
124
+
125
+ .form-placeholder-link
126
+ float: right
127
+ +s-golf
128
+ +rem(line-height, $baseline-base)
129
+
130
+ // Checkboxes and radio buttons
131
+
132
+ .form-choice
133
+ +rem(padding-left, 20px)
134
+
135
+ input[type="radio"],
136
+ input[type="checkbox"]
137
+ float: left
138
+ +rem(margin-top, $baseline-step)
139
+ +rem(margin-left, -20px)
140
+
141
+ label[disabled]
142
+ color: $gray
143
+ cursor: not-allowed
144
+
145
+ // Custom radio buttons
146
+
147
+ .form-radio
148
+ &:not(:last-of-type)
149
+ +rem(margin-bottom, $baseline-step / 2)
150
+
151
+ label
152
+ cursor: pointer
153
+ +rem(padding-left, 6px)
154
+ position: relative
155
+
156
+ &:before
157
+ +background-svg("forms/radio-button", 20px 40px)
158
+ content: ""
159
+ +rem(height, 20px)
160
+ +rem(left, -20px)
161
+ position: absolute
162
+ top: 0
163
+ +rem(width, 20px)
164
+
165
+ .form-radio-active:before
166
+ +rem(background-position, 0 -20px)
167
+
168
+ // Horizontal styles
169
+ // ========================================
170
+
171
+ .form-row
172
+ border-collapse: separate
173
+ display: table
174
+ width: 100%
175
+
176
+ .form-label,
177
+ .form-btn
178
+ width: 1%
179
+
180
+ .form-label,
181
+ .form-control,
182
+ .form-area,
183
+ .form-btn
184
+ display: table-cell
185
+ vertical-align: top
186
+
187
+ .form-label,
188
+ .form-btn
189
+ position: relative
190
+
191
+ .form-label
192
+ background-color: $white-offset
193
+ +rem(border, 1px solid $gray-light)
194
+ border-right: 0
195
+ +rem(border-radius, $border-radius-base 0 0 $border-radius-base)
196
+ color: $gray-dark
197
+ +rem(padding, ($baseline-step + 2) ($gutter-half - 1))
198
+ white-space: nowrap
199
+
200
+ &[disabled]
201
+ color: $gray
202
+ cursor: not-allowed
203
+
204
+ > .form-control,
205
+ > .form-area,
206
+
207
+ &:first-child
208
+ border-bottom-right-radius: 0
209
+ border-top-right-radius: 0
210
+
211
+ &:last-child
212
+ border-bottom-left-radius: 0
213
+ border-top-left-radius: 0
214
+
215
+ &:not(:first-child):not(:last-child)
216
+ border-radius: 0
217
+
218
+ .form-btn:last-child
219
+ &:hover,
220
+ &:focus,
221
+ &:active
222
+ z-index: 2
223
+
224
+ .btn
225
+ border-bottom-left-radius: 0
226
+ border-top-left-radius: 0
227
+ +rem(margin-left, -1px)
228
+
229
+ // Help blocks
230
+ // ========================================
231
+
232
+ .form-help
233
+ color: $gray
234
+ +s-golf
235
+ font-weight: 400
236
+ +rem(margin, $baseline-step $gutter-half 0 $gutter-half)
237
+
238
+ .form-choice &
239
+ margin-left: 0
240
+
241
+ .form-help-title
242
+ color: $gray-dark
243
+ display: inline-block
244
+ +bump(margin, baselines-step)
245
+
246
+ .form-help-suggestions
247
+
248
+ li
249
+ +rem(line-height, $baseline-base)
250
+ +rem(padding-left, 18px)
251
+ position: relative
252
+
253
+ .i-suggest-tick,
254
+ .form-help-bullet
255
+ position: absolute
256
+ left: 0
257
+ transition: $transition-all
258
+
259
+ .i-suggest-tick
260
+ opacity: 0
261
+ +rem(top, 7px)
262
+
263
+ .form-help-bullet
264
+ display: inline-block
265
+ +s-delta
266
+ text-align: center
267
+ +rem(width, 12px)
268
+
269
+ .form-help-success
270
+
271
+ .i-suggest-tick
272
+ opacity: 1
273
+
274
+ .form-help-bullet
275
+ opacity: 0
276
+
277
+ // Validation
278
+ // ========================================
279
+
280
+ // Errors
281
+
282
+ .form-error
283
+
284
+ &.form-control,
285
+ &.form-area
286
+ border-color: $red
287
+ z-index: 1
288
+
289
+ &.form-choice
290
+ color: $red
291
+
292
+ // Icons
293
+
294
+ .form-validating,
295
+ .form-valid,
296
+ .form-invalid
297
+ +rem(background-position, right ($gutter-half - 1) top $baseline-x-small)
298
+ background-repeat: no-repeat
299
+ +rem(background-size, 16px)
300
+ +rem(padding-right, 44px)
301
+
302
+ .form-validating
303
+ background-image: image-url("forms/icon-validating.gif")
304
+
305
+ .form-valid
306
+ +background-svg("icons/icon-valid")
307
+
308
+ .form-invalid,
309
+ .form-invalid:focus
310
+ +background-svg("icons/icon-invalid")
311
+ border-color: $red
312
+
313
+ // Shake
314
+
315
+ .form-submit-invalid
316
+ animation: shake 1s ease both
317
+
318
+ @keyframes shake
319
+ 0%, 100%
320
+ transform: translateX(0)
321
+
322
+ 10%, 30%, 50%, 70%, 90%
323
+ +rem(transform, translateX(-5px))
324
+
325
+ 20%, 40%, 60%, 80%
326
+ +rem(transform, translateX(5px))