feathers 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +1 -0
- data/README.md +141 -0
- data/Rakefile +1 -0
- data/app/assets/stylesheets/base.css.scss.erb +132 -0
- data/app/assets/stylesheets/buttons.css.scss.erb +100 -0
- data/app/assets/stylesheets/flash-messages.css.scss.erb +33 -0
- data/app/assets/stylesheets/forms.css.scss.erb +118 -0
- data/app/assets/stylesheets/menus.css.scss.erb +184 -0
- data/app/assets/stylesheets/mixins.scss +43 -0
- data/app/assets/stylesheets/other-widgets.css.scss.erb +101 -0
- data/app/assets/stylesheets/tables.css.scss.erb +30 -0
- data/feathers.gemspec +23 -0
- data/lib/feathers.rb +8 -0
- data/lib/feathers/config.rb +67 -0
- data/lib/feathers/rails/engine.rb +6 -0
- data/lib/feathers/rails/railtie.rb +9 -0
- data/lib/feathers/version.rb +3 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a0ccd12ae4fc12169f5f1ac52e257faed51e21d5
|
4
|
+
data.tar.gz: 6ace0f2507569e11f7f52015feb5a7cc8f8c997f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7b9ddb790ed389adb4f901cd0b2cff1c35a1d8e504faf0145a18a1cafcbc87cb41911d7d8197580d11bce6d99a86b7687fe43a9580532d21c867d5e696b571b0
|
7
|
+
data.tar.gz: 8ac364a9e3159b060922f228d77d136f42b774f7b7d6741529ac63846c34efecf76619f866aa565ac5524adc17f57921cd7ca9924eec046b5ee19c6bc0646dd1
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gemspec
|
data/README.md
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
Feathers
|
2
|
+
====
|
3
|
+
|
4
|
+
Feathers is a minimalist CSS reset and boilerplate with optional rules that can be 'layered in' to apply sensible defaults to common widgets, such as navigation, forms, buttons, and menus
|
5
|
+
|
6
|
+
Feathers is a starting point, not an end to end solution. It does **not** contain a lot of layout rules, grid frameworks, or JavaScript libraries. It's not a replacement for Bootstrap or Foundation, etc. It's a lightweight alternative for people who want to start with minimal, but sensible CSS and build from there.
|
7
|
+
|
8
|
+
Getting Started
|
9
|
+
----
|
10
|
+
|
11
|
+
First, install Feathers.
|
12
|
+
|
13
|
+
gem install feathers
|
14
|
+
|
15
|
+
Next, Feathers assumes you're using SASS instead of Sprockets, so start by renaming your `application.css` file to `application.css.scss` and removing the Sprockets directives.
|
16
|
+
|
17
|
+
Now, simply `@import` the feathers you wish to use. They are:
|
18
|
+
|
19
|
+
* `base` - This is the basic CSS reset and boilerplate. It does some normalization and gives you sensible defaults for some basic things like typography, tap highlights, touch scroll behavior, etc.
|
20
|
+
* `buttons` - A collection of button styles; default, cancel, action, success, warning, delete
|
21
|
+
* `flash-messages` - Styling for flash messages; success, warning, notice
|
22
|
+
* `forms` - Nice defaults for form elements.
|
23
|
+
* `menus` - A collection of different menu types; breadcrumbs, dropdowns, horizontal nav bar, vertical list menu, link list, icon bar (works great with Font Awesome).
|
24
|
+
* `other-widgets` - This is a miscellaneous collection of other common widgets; pagination, avatars, progress bars, labels, notes, title bar, tag lines.
|
25
|
+
* `tables` - A nice default for data tables
|
26
|
+
|
27
|
+
CSS class names
|
28
|
+
----
|
29
|
+
|
30
|
+
I'm just going to make a list. Most are self-explanatory! Feathers tries to avid 'classitis' by applying CSS semantically within widgets.
|
31
|
+
|
32
|
+
####Base
|
33
|
+
|
34
|
+
* .align-center
|
35
|
+
* .align-right
|
36
|
+
* .align-left
|
37
|
+
* .hidden
|
38
|
+
|
39
|
+
####Buttons
|
40
|
+
* .button
|
41
|
+
* .button.cancel
|
42
|
+
* .button.delete
|
43
|
+
* .button.info
|
44
|
+
* .button.large
|
45
|
+
* .button.small
|
46
|
+
* .button.success
|
47
|
+
* .button.warning
|
48
|
+
|
49
|
+
May be combined, e.g. `class="button large info"`.
|
50
|
+
|
51
|
+
####Flash Messages
|
52
|
+
|
53
|
+
For block level elements.
|
54
|
+
|
55
|
+
* .notice
|
56
|
+
* .error
|
57
|
+
* .note
|
58
|
+
* .warning
|
59
|
+
|
60
|
+
####Forms
|
61
|
+
|
62
|
+
* input.error
|
63
|
+
* label.inline
|
64
|
+
* label.horizontal
|
65
|
+
* span.error-details
|
66
|
+
|
67
|
+
####Menus
|
68
|
+
|
69
|
+
* .breadcrumbs
|
70
|
+
* .drop-menu
|
71
|
+
* .drop-menu > ul
|
72
|
+
* .icon-bar
|
73
|
+
* ul.horizontal-menu
|
74
|
+
* ul.link-list
|
75
|
+
* ul.vertical-menu
|
76
|
+
|
77
|
+
####Other Widgets
|
78
|
+
|
79
|
+
* .avatar
|
80
|
+
* .avatar.circle
|
81
|
+
* .avatar.framed
|
82
|
+
* .note {
|
83
|
+
* .pagination
|
84
|
+
* .progress-bar
|
85
|
+
* span.label
|
86
|
+
* span.label.danger
|
87
|
+
* span.label.info
|
88
|
+
* span.label.success
|
89
|
+
* span.label.warning
|
90
|
+
* .tag-line
|
91
|
+
* .title-bar
|
92
|
+
|
93
|
+
####Tables
|
94
|
+
|
95
|
+
* table.data-table
|
96
|
+
|
97
|
+
Customizing Feathers
|
98
|
+
----
|
99
|
+
|
100
|
+
You can of course override any Feathers CSS declartion inside your own stylesheet, and this is probably the most common and straightfoward path toward customization for a lot of people. However, if you would like to simply change Feathers' default colors, it's easy to do.
|
101
|
+
|
102
|
+
First, create an initializer file.
|
103
|
+
|
104
|
+
touch config/initializers/feathers.rb
|
105
|
+
|
106
|
+
Then simply override the Feathers color presets. You can change any or all values to your liking.
|
107
|
+
|
108
|
+
module Feathers
|
109
|
+
class Config
|
110
|
+
|
111
|
+
@light_1 = "#efefef"
|
112
|
+
@light_2 = "#ddd"
|
113
|
+
@medium_1 = "#ccc"
|
114
|
+
@medium_2 = "#aaa"
|
115
|
+
@dark_1 = "#777"
|
116
|
+
@dark_2 = "#444"
|
117
|
+
@highlight = "#ffe"
|
118
|
+
@notice_background = "#ecffd6"
|
119
|
+
@warning_background = "#fbefb9"
|
120
|
+
@error_background = "#ffebeb"
|
121
|
+
@note_background = "#d8f2ff"
|
122
|
+
@default_element = "#ccc"
|
123
|
+
@danger_element = "#cf0404"
|
124
|
+
@info_element = "#448ccb"
|
125
|
+
@success_element = "#7ba900"
|
126
|
+
@warning_element = "#f3a24d"
|
127
|
+
@black = "#000"
|
128
|
+
@white = "#fff"
|
129
|
+
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
Borders and gradients are calculated automatically based on the defined values for their element.
|
134
|
+
|
135
|
+
ToDo
|
136
|
+
----
|
137
|
+
|
138
|
+
* Currently checkbox, radio buttons, and select box stylings are currently webkit only
|
139
|
+
* View Helpers for various Feathers elements
|
140
|
+
* JavaScript for better handling of tap states for touch events (`:hover` isn't always accurate)
|
141
|
+
* Add a demo and tests (tests don't really make sense until we have view helpers to test)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,132 @@
|
|
1
|
+
* {
|
2
|
+
box-sizing:border-box;
|
3
|
+
-moz-box-sizing:border-box;
|
4
|
+
-webkit-box-sizing:border-box;
|
5
|
+
}
|
6
|
+
|
7
|
+
::-moz-selection {
|
8
|
+
background:<%= Feathers::Config.dark_2 %>;
|
9
|
+
color:<%= Feathers::Config.white %>;
|
10
|
+
text-shadow:none;
|
11
|
+
}
|
12
|
+
|
13
|
+
::selection {
|
14
|
+
background:<%= Feathers::Config.dark_2 %>;
|
15
|
+
color:<%= Feathers::Config.white %>;
|
16
|
+
text-shadow:none;
|
17
|
+
}
|
18
|
+
|
19
|
+
a {
|
20
|
+
color:<%= Feathers::Config.dark_2 %>;
|
21
|
+
outline:none;
|
22
|
+
-webkit-tap-highlight-color:rgba(0, 0, 0, 0);
|
23
|
+
-moz-tap-highlight-color:rgba(0, 0, 0, 0);
|
24
|
+
-o-tap-highlight-color:rgba(0, 0, 0, 0);
|
25
|
+
tap-highlight-color:rgba(0, 0, 0, 0);
|
26
|
+
text-decoration:none;
|
27
|
+
}
|
28
|
+
|
29
|
+
a:hover {
|
30
|
+
color:<%= Feathers::Config.dark_1 %>;
|
31
|
+
}
|
32
|
+
|
33
|
+
.align-center {
|
34
|
+
text-align:center;
|
35
|
+
}
|
36
|
+
|
37
|
+
.align-right {
|
38
|
+
text-align: right;
|
39
|
+
}
|
40
|
+
|
41
|
+
.align-left {
|
42
|
+
text-align:left;
|
43
|
+
}
|
44
|
+
|
45
|
+
blockquote {
|
46
|
+
border-left:3px solid <%= Feathers::Config.medium_1 %>;
|
47
|
+
color:<%= Feathers::Config.dark_2 %>;
|
48
|
+
margin:0 1em 0.5em 1em;
|
49
|
+
padding:1em;
|
50
|
+
cite {
|
51
|
+
display:block;
|
52
|
+
text-align:right;
|
53
|
+
font-style:italic;
|
54
|
+
font-weight:bold;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
body {
|
59
|
+
background-color:<%= Feathers::Config.white %>;
|
60
|
+
font-family:helvetica, arial, sans-serif;
|
61
|
+
font-size:16px;
|
62
|
+
font-smoothing:antialiased;
|
63
|
+
-webkit-font-smoothing:antialiased;
|
64
|
+
line-height:150%;
|
65
|
+
margin:0;
|
66
|
+
overflow-scroll:touch;
|
67
|
+
-webkit-overflow-scroll:touch;
|
68
|
+
overflow-y:scroll;
|
69
|
+
-webkit-text-size-adjust:100%;
|
70
|
+
-ms-text-size-adjust:100%;
|
71
|
+
}
|
72
|
+
|
73
|
+
footer, header, nav, section {
|
74
|
+
display:block;
|
75
|
+
}
|
76
|
+
|
77
|
+
fieldset, img {
|
78
|
+
border:none;
|
79
|
+
}
|
80
|
+
|
81
|
+
form, legend, li {
|
82
|
+
margin:0;
|
83
|
+
padding:0;
|
84
|
+
}
|
85
|
+
|
86
|
+
h1, h2, h3, h4, h5, h6 {
|
87
|
+
line-height:1.5rem;
|
88
|
+
margin:0 0 0.5em 0;
|
89
|
+
padding:0;
|
90
|
+
}
|
91
|
+
|
92
|
+
h1 { font-size:200%; }
|
93
|
+
h2 { font-size:180%; }
|
94
|
+
h3 { font-size:160%; }
|
95
|
+
h4 { font-size:140%; }
|
96
|
+
h5 { font-size:120%; }
|
97
|
+
h6 { font-size:100%; }
|
98
|
+
|
99
|
+
.hidden {
|
100
|
+
display:none;
|
101
|
+
}
|
102
|
+
|
103
|
+
hr {
|
104
|
+
border:none;
|
105
|
+
border-bottom:1px solid <%= Feathers::Config.medium_1 %>;
|
106
|
+
height:0;
|
107
|
+
margin:1em 0;
|
108
|
+
padding:0;
|
109
|
+
}
|
110
|
+
|
111
|
+
i {
|
112
|
+
color:<%= Feathers::Config.dark_2 %>;
|
113
|
+
}
|
114
|
+
|
115
|
+
input, select, textarea {
|
116
|
+
color:#444;
|
117
|
+
font-family:helvetica, arial, sans-serif;
|
118
|
+
font-size:0.8em;
|
119
|
+
}
|
120
|
+
|
121
|
+
p {
|
122
|
+
margin:0 0 1em 0;
|
123
|
+
}
|
124
|
+
|
125
|
+
small {
|
126
|
+
font-size:70%;
|
127
|
+
}
|
128
|
+
|
129
|
+
ul, ol {
|
130
|
+
margin:0 0 1em 0;
|
131
|
+
padding:0 0 0 2em;
|
132
|
+
}
|
@@ -0,0 +1,100 @@
|
|
1
|
+
@import 'mixins';
|
2
|
+
|
3
|
+
.button {
|
4
|
+
border:1px solid darken(<%= Feathers::Config.default_element %>, 30%);
|
5
|
+
display:inline-block;
|
6
|
+
line-height:1.5em;
|
7
|
+
padding:0.25em 0.5em;
|
8
|
+
@include background-gradient(lighten(<%= Feathers::Config.default_element %>, 10%), <%= Feathers::Config.default_element %>);
|
9
|
+
@include border-radius(0.25em);
|
10
|
+
i {
|
11
|
+
margin-right:0.5em;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
.button:active {
|
16
|
+
@include box-shadow(0, 0, 0);
|
17
|
+
}
|
18
|
+
|
19
|
+
.button:hover {
|
20
|
+
@include background-gradient(darken(<%= Feathers::Config.default_element %>, 10%), darken(<%= Feathers::Config.default_element %>, 20%));
|
21
|
+
color:<%= Feathers::Config.white %>;
|
22
|
+
@include background-gradient(darken(<%= Feathers::Config.default_element %>, 10%), darken(<%= Feathers::Config.default_element %>, 20%));
|
23
|
+
i {
|
24
|
+
color:<%= Feathers::Config.white %>;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
.button.cancel {
|
29
|
+
border:1px solid darken(<%= Feathers::Config.default_element %>, 30%);
|
30
|
+
@include background-gradient(lighten(<%= Feathers::Config.default_element %>, 10%), <%= Feathers::Config.default_element %>);
|
31
|
+
}
|
32
|
+
|
33
|
+
.button.cancel:hover {
|
34
|
+
color:<%= Feathers::Config.white %>;
|
35
|
+
@include background-gradient(darken(<%= Feathers::Config.default_element %>, 10%), darken(<%= Feathers::Config.default_element %>, 20%));
|
36
|
+
i {
|
37
|
+
color:<%= Feathers::Config.white %>;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
.button.delete {
|
42
|
+
border:1px solid darken(<%= Feathers::Config.danger_element %>, 30%);
|
43
|
+
color:<%= Feathers::Config.white %>;
|
44
|
+
@include background-gradient(lighten(<%= Feathers::Config.danger_element %>, 10%), <%= Feathers::Config.danger_element %>);
|
45
|
+
i {
|
46
|
+
color:<%= Feathers::Config.white %>;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
.button.delete:hover {
|
51
|
+
@include background-gradient(darken(<%= Feathers::Config.danger_element %>, 10%), darken(<%= Feathers::Config.danger_element %>, 20%));
|
52
|
+
}
|
53
|
+
|
54
|
+
.button.large {
|
55
|
+
font-size:125%;
|
56
|
+
}
|
57
|
+
|
58
|
+
.button.small {
|
59
|
+
font-size:80%;
|
60
|
+
}
|
61
|
+
|
62
|
+
.button.info {
|
63
|
+
border:1px solid darken(<%= Feathers::Config.info_element %>, 30%);
|
64
|
+
color:<%= Feathers::Config.white %>;
|
65
|
+
@include background-gradient(lighten(<%= Feathers::Config.info_element %>, 10%), <%= Feathers::Config.info_element %>);
|
66
|
+
i {
|
67
|
+
color:<%= Feathers::Config.white %>;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
.button.info:hover {
|
72
|
+
@include background-gradient(darken(<%= Feathers::Config.info_element %>, 10%), darken(<%= Feathers::Config.info_element %>, 20%));
|
73
|
+
}
|
74
|
+
|
75
|
+
.button.success {
|
76
|
+
border:1px solid darken(<%= Feathers::Config.success_element %>, 30%);
|
77
|
+
color:<%= Feathers::Config.white %>;
|
78
|
+
@include background-gradient(lighten(<%= Feathers::Config.success_element %>, 10%), <%= Feathers::Config.success_element %>);
|
79
|
+
i {
|
80
|
+
color:<%= Feathers::Config.white %>;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
.button.success:hover {
|
85
|
+
@include background-gradient(darken(<%= Feathers::Config.success_element %>, 10%), darken(<%= Feathers::Config.success_element %>, 20%));
|
86
|
+
}
|
87
|
+
|
88
|
+
.button.warning {
|
89
|
+
border:1px solid darken(<%= Feathers::Config.warning_element %>, 30%);
|
90
|
+
@include background-gradient(lighten(<%= Feathers::Config.warning_element %>, 10%), <%= Feathers::Config.warning_element %>);
|
91
|
+
color:<%= Feathers::Config.white %>;
|
92
|
+
i {
|
93
|
+
color:<%= Feathers::Config.white %>;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
.button.warning:hover {
|
98
|
+
@include background-gradient(darken(<%= Feathers::Config.warning_element %>, 10%), darken(<%= Feathers::Config.warning_element %>, 20%));
|
99
|
+
}
|
100
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
div.notice, div.error, div.note, div.warning {
|
2
|
+
margin:1em 0;
|
3
|
+
padding:1em;
|
4
|
+
@include border-radius(0.5em);
|
5
|
+
i {
|
6
|
+
margin-right:1em;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
div.error {
|
11
|
+
background:<%= Feathers::Config.error_background %>;
|
12
|
+
border:2px solid darken(<%= Feathers::Config.error_background %>, 10%);
|
13
|
+
i {
|
14
|
+
color:darken(<%= Feathers::Config.error_background %>, 50%);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
div.notice {
|
19
|
+
background: <%= Feathers::Config.notice_background %>;
|
20
|
+
border:2px solid darken(<%= Feathers::Config.notice_background %>, 40%);
|
21
|
+
i {
|
22
|
+
color:darken(<%= Feathers::Config.notice_background %>, 50%);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
div.warning {
|
27
|
+
background:<%= Feathers::Config.warning_background %>;
|
28
|
+
border:2px solid darken(<%= Feathers::Config.warning_background %>, 30%);
|
29
|
+
i {
|
30
|
+
color:darken(<%= Feathers::Config.warning_background %>, 50%);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
@@ -0,0 +1,118 @@
|
|
1
|
+
fieldset {
|
2
|
+
margin:0;
|
3
|
+
|
4
|
+
input[type=search] { -webkit-appearance:none; }
|
5
|
+
input[type=search]::-webkit-search-decoration,
|
6
|
+
input[type=search]::-webkit-search-cancel-button,
|
7
|
+
input[type=search]::-webkit-search-results-button,
|
8
|
+
input[type=search]::-webkit-search-results-decoration {
|
9
|
+
display: none;
|
10
|
+
}
|
11
|
+
|
12
|
+
input[type=text],
|
13
|
+
input[type=email],
|
14
|
+
input[type=tel],
|
15
|
+
input[type=number],
|
16
|
+
input[type=date],
|
17
|
+
input[type=search],
|
18
|
+
input[type=password] {
|
19
|
+
background:<%= Feathers::Config.white %>;
|
20
|
+
border:1px solid <%= Feathers::Config.medium_1 %>;
|
21
|
+
padding:0.5em;
|
22
|
+
@include border-radius(0.25em);
|
23
|
+
}
|
24
|
+
|
25
|
+
input.error {
|
26
|
+
border:1px solid darken(<%= Feathers::Config.error_background %>, 20%);
|
27
|
+
}
|
28
|
+
|
29
|
+
label {
|
30
|
+
display:block;
|
31
|
+
line-height:2em;
|
32
|
+
}
|
33
|
+
|
34
|
+
label.horizontal {
|
35
|
+
display:inline-block;
|
36
|
+
min-width:16em;
|
37
|
+
}
|
38
|
+
|
39
|
+
label.inline {
|
40
|
+
display:inline-block;
|
41
|
+
margin-right:2em;
|
42
|
+
input {
|
43
|
+
-webkit-appearance:none;
|
44
|
+
-moz-appearance:none;
|
45
|
+
appearance:none;
|
46
|
+
border:none;
|
47
|
+
display:inline-block;
|
48
|
+
float:left;
|
49
|
+
height:20px;
|
50
|
+
margin-right:1em;
|
51
|
+
width:20px;
|
52
|
+
}
|
53
|
+
input[type=radio] {
|
54
|
+
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNrsVb1OAkEQ3uOfXCCQaAQsDBQ2xMLkOhtaH8CeR/A17HwEel9DOxILrSwgEH4DCQRy4Z9zvnXv3BPN6bGxYpIJw/x8Nzszu6NZlsVUUug7paZpQfo5IT4iThHrwmQSj4mHxH1KZuMJSGDH9HNWqVRuDMO4yOVy54lEIgvbdDrtdjqdt2q1+lIulx/It0GgAxcAjmwz0SlxqVarPVoeBB/4IsaFIYEhs1K/33+1fknwFaDHLkAi1Mz4TWY/ZGoAQwbMUc3uLJ+EWGAAKyBKeYQG+B0VEYuJcABT6KZfQBGbkgF1ezT8kIjVZUBlZAOaGFq/ICLWlAHHuAF+AUXsWAYc4jr5BRSxQ+fqKR9s5VdP5eOgfX1g//J8kWrn+dK+e7H3eWA11StA+U057JTdwV6v1xZlxhmy12DzLouaXdJX7/P5/JWdfa/XY6PRiM3nc/4/FouxdDrNMpmMc8J6vf5UKBRuSXxGTe0un6BmMliz2WSNRoO1Wi3Wbrc5Q4YONpsQg1jRRKcprp2CzLrdLhsMBsw0TUZH/ehgKMQWiwWXI5GIk6m0Uzo7O2Wz2fBjTiYTDrZarbgODBk62OADnedOmc1mvGbIBJltt1vneJChgw0+8P3/nRKPx3k3o9Eor1kg8PlNyNDBBh/4eu6UYDDIRyOZTDJd11k4HOY6MGToYIMPdF93SkjeKcVi8Rp/0L3lcskNyMbuLGSAZbNZ1yzKO0X5YCu/eoedsj+9CzAANMf9yP7GAVkAAAAASUVORK5CYII=) top left no-repeat;
|
55
|
+
}
|
56
|
+
input[type=radio]:checked {
|
57
|
+
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNrsVb1OAkEQ3uOfXCCQaAQsDBQ2xMLkOhtaH8CeR/A17HwEel9DOxILrSwgEH4DCQRy4Z9zvnXv3BPN6bGxYpIJw/x8Nzszu6NZlsVUUug7paZpQfo5IT4iThHrwmQSj4mHxH1KZuMJSGDH9HNWqVRuDMO4yOVy54lEIgvbdDrtdjqdt2q1+lIulx/It0GgAxcAjmwz0SlxqVarPVoeBB/4IsaFIYEhs1K/33+1fknwFaDHLkAi1Mz4TWY/ZGoAQwbMUc3uLJ+EWGAAKyBKeYQG+B0VEYuJcABT6KZfQBGbkgF1ezT8kIjVZUBlZAOaGFq/ICLWlAHHuAF+AUXsWAYc4jr5BRSxQ+fqKR9s5VdP5eOgfX1g//J8kWrn+dK+e7H3eWA11StA+U057JTdwV6v1xZlxhmy12DzLouaXdJX7/P5/JWdfa/XY6PRiM3nc/4/FouxdDrNMpmMc8J6vf5UKBRuSXxGTe0un6BmMliz2WSNRoO1Wi3Wbrc5Q4YONpsQg1jRRKcprp2CzLrdLhsMBsw0TUZH/ehgKMQWiwWXI5GIk6m0Uzo7O2Wz2fBjTiYTDrZarbgODBk62OADnedOmc1mvGbIBJltt1vneJChgw0+8P3/nRKPx3k3o9Eor1kg8PlNyNDBBh/4eu6UYDDIRyOZTDJd11k4HOY6MGToYIMPdF93SkjeKcVi8Rp/0L3lcskNyMbuLGSAZbNZ1yzKO0X5YCu/eoedsj+9CzAANMf9yP7GAVkAAAAASUVORK5CYII=) bottom left no-repeat;
|
58
|
+
}
|
59
|
+
input[type=checkbox] {
|
60
|
+
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWtJREFUeNrslU2LglAUhl/lUou2LhWCdubGsk1B/oKZHzvTDwgEd4lFm0Aoog8XgpswXVjTvaD0Nc2YzjAMvosr5yIP77n33HO44/GIIkXownHcSxGwk7l3cha85YGdTL3SL4+CVQJLYAksgb8DJNf9LK+4okfAz6T8v2dKGIbFnOHhcIBlWRiNRvmBcRxjOBxiOp2iWq3er8MMB89g6/WaxZVKJZ9D6iqBUe33++eBruvCtu2bvadSjqIIhmHg/GU1Gg10Op2vHXqeh8FggOVyme5NJpOL9FRVRa/XuzlDcu2CloHjOCwej8eQJAm73Q6z2Sz9r91uo9lsPu42VNvtFpvNJo1938d8PsdqtWJ1RyXL8qewG2C9XocoijBNE4vFgu3R4k1SFQQBrVYrW7chhKDf70NRFBYHQcAughawruvgef659kWd0PQSdbtd1Gq173fse9I0LX239HIyjYBH0Cxd/e/PlA8BBgA6gpuyV9X9zQAAAABJRU5ErkJggg==) top left no-repeat;
|
61
|
+
}
|
62
|
+
input[type=checkbox]:checked {
|
63
|
+
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWtJREFUeNrslU2LglAUhl/lUou2LhWCdubGsk1B/oKZHzvTDwgEd4lFm0Aoog8XgpswXVjTvaD0Nc2YzjAMvosr5yIP77n33HO44/GIIkXownHcSxGwk7l3cha85YGdTL3SL4+CVQJLYAksgb8DJNf9LK+4okfAz6T8v2dKGIbFnOHhcIBlWRiNRvmBcRxjOBxiOp2iWq3er8MMB89g6/WaxZVKJZ9D6iqBUe33++eBruvCtu2bvadSjqIIhmHg/GU1Gg10Op2vHXqeh8FggOVyme5NJpOL9FRVRa/XuzlDcu2CloHjOCwej8eQJAm73Q6z2Sz9r91uo9lsPu42VNvtFpvNJo1938d8PsdqtWJ1RyXL8qewG2C9XocoijBNE4vFgu3R4k1SFQQBrVYrW7chhKDf70NRFBYHQcAughawruvgef659kWd0PQSdbtd1Gq173fse9I0LX239HIyjYBH0Cxd/e/PlA8BBgA6gpuyV9X9zQAAAABJRU5ErkJggg==) bottom left no-repeat;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
legend {
|
68
|
+
background:<%= Feathers::Config.light_1 %>;
|
69
|
+
color:<%= Feathers::Config.dark_1 %>;
|
70
|
+
padding:0.5em;
|
71
|
+
@include border-radius(0.25em);
|
72
|
+
}
|
73
|
+
|
74
|
+
select {
|
75
|
+
-webkit-appearance:none;
|
76
|
+
-moz-appearance:none;
|
77
|
+
appearance:none;
|
78
|
+
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH1JREFUeNqkUTsKwCAMNaGDk4qDoGcQZwdHj+1pHLyFpE6l1P5o3xRCHu8TICL2Fch+YNmmUkpr7fSIc55Scs4d9rC3PfMBwBjjvbfWIuIdeeYrpYam1vpV5pzzZk8IEUIY/KvMcNr20O+9xxillHeN0QVqrfQE+PPnVYABAAwmZGpbdzcOAAAAAElFTkSuQmCC) 100% 50% no-repeat <%= Feathers::Config.white %>;
|
79
|
+
border:1px solid <%= Feathers::Config.medium_1 %>;
|
80
|
+
line-height:1.25em;
|
81
|
+
min-width:16em;
|
82
|
+
padding:0.5em 3em 0.5em 0.5em;
|
83
|
+
@include border-radius(0.25em);
|
84
|
+
}
|
85
|
+
|
86
|
+
input[type=date] {
|
87
|
+
-webkit-appearance:none;
|
88
|
+
-moz-appearance:none;
|
89
|
+
appearance:none;
|
90
|
+
border:1px solid <%= Feathers::Config.medium_1 %>;
|
91
|
+
line-height:1.25em;
|
92
|
+
padding:0.5em;
|
93
|
+
@include border-radius(0.25em);
|
94
|
+
}
|
95
|
+
|
96
|
+
span.error-details {
|
97
|
+
color:darken(<%= Feathers::Config.error_background %>, 50%);
|
98
|
+
display:inline-block;
|
99
|
+
margin-left:1em;
|
100
|
+
i {
|
101
|
+
color:darken(<%= Feathers::Config.error_background %>, 50%);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
fieldset > div {
|
108
|
+
overflow:hidden;
|
109
|
+
padding:0.5em;
|
110
|
+
}
|
111
|
+
|
112
|
+
input[type=reset], input[type=submit], input[type=button] {
|
113
|
+
display:inline-block;
|
114
|
+
-webkit-tap-highlight-color:rgba(0, 0, 0, 0);
|
115
|
+
-moz-tap-highlight-color:rgba(0, 0, 0, 0);
|
116
|
+
-o-tap-highlight-color:rgba(0, 0, 0, 0);
|
117
|
+
tap-highlight-color:rgba(0, 0, 0, 0);
|
118
|
+
}
|
@@ -0,0 +1,184 @@
|
|
1
|
+
.breadcrumbs {
|
2
|
+
background:<%= Feathers::Config.light_1 %>;
|
3
|
+
border:1px solid <%= Feathers::Config.light_2 %>;
|
4
|
+
color:<%= Feathers::Config.dark_1 %>;
|
5
|
+
padding:1em;
|
6
|
+
span {
|
7
|
+
color:<%= Feathers::Config.dark_2 %>;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
|
11
|
+
.drop-menu {
|
12
|
+
background:<%= Feathers::Config.light_1 %>;
|
13
|
+
display:inline-block;
|
14
|
+
padding:0.5em 1em;
|
15
|
+
position:relative;
|
16
|
+
@include border-radius(0.5em);
|
17
|
+
ul {
|
18
|
+
background:<%= Feathers::Config.light_1 %>;
|
19
|
+
display:none;
|
20
|
+
left:0.5em;
|
21
|
+
margin:0;
|
22
|
+
min-width:12em;
|
23
|
+
padding:0;
|
24
|
+
position:absolute;
|
25
|
+
top:2.5em;
|
26
|
+
z-index:1000;
|
27
|
+
@include border-radius(0.5em);
|
28
|
+
li {
|
29
|
+
list-style:none;
|
30
|
+
margin:0;
|
31
|
+
padding:0;
|
32
|
+
a {
|
33
|
+
background:<%= Feathers::Config.light_1 %>;
|
34
|
+
display:block;
|
35
|
+
padding:0.5em;
|
36
|
+
}
|
37
|
+
a:hover {
|
38
|
+
color:<%= Feathers::Config.light_1 %>;
|
39
|
+
background:<%= Feathers::Config.dark_1 %>;
|
40
|
+
@include border-radius(0.5em);
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
44
|
+
ul:before {
|
45
|
+
content: "";
|
46
|
+
position: absolute;
|
47
|
+
width: 0;
|
48
|
+
height: 0;
|
49
|
+
border-width: 12px;
|
50
|
+
border-style: solid;
|
51
|
+
border-color: transparent transparent <%= Feathers::Config.light_1 %> transparent;
|
52
|
+
top: -24px;
|
53
|
+
left: 1em;
|
54
|
+
z-index:1000;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
.drop-menu:hover {
|
58
|
+
background:<%= Feathers::Config.medium_1 %>;
|
59
|
+
> a {
|
60
|
+
color:<%= Feathers::Config.dark_2 %>;
|
61
|
+
i {
|
62
|
+
color:<%= Feathers::Config.dark_2 %>;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
ul {
|
66
|
+
display:block;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
ul.horizontal-menu, ul.vertical-menu {
|
71
|
+
margin:0 0 1em 0;
|
72
|
+
padding:0;
|
73
|
+
li {
|
74
|
+
list-style:none;
|
75
|
+
margin:0;
|
76
|
+
padding:0;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
ul.horizontal-menu {
|
81
|
+
background:<%= Feathers::Config.light_1 %>;
|
82
|
+
overflow:hidden;
|
83
|
+
padding:0.5em 0;
|
84
|
+
@include border-radius(0.5em);
|
85
|
+
li {
|
86
|
+
display:inline;
|
87
|
+
a {
|
88
|
+
display:inline-block;
|
89
|
+
float:left;
|
90
|
+
margin:0 0.5em;
|
91
|
+
padding:0 1em;
|
92
|
+
}
|
93
|
+
a:hover {
|
94
|
+
background:<%= Feathers::Config.dark_1 %>;
|
95
|
+
color:<%= Feathers::Config.white %>;
|
96
|
+
@include border-radius(0.5em);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
ul.vertical-menu {
|
102
|
+
li {
|
103
|
+
margin:0;
|
104
|
+
padding:0;
|
105
|
+
a {
|
106
|
+
background:<%= Feathers::Config.light_1 %>;
|
107
|
+
display:block;
|
108
|
+
margin-bottom:0.5em;
|
109
|
+
padding:0.5em 1em;
|
110
|
+
@include border-radius(0.5em);
|
111
|
+
i {
|
112
|
+
display:inline-block;
|
113
|
+
float:right;
|
114
|
+
line-height:1.5em;
|
115
|
+
@include opacity(0.2);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
a:hover {
|
119
|
+
background:<%= Feathers::Config.dark_1 %>;
|
120
|
+
color:<%= Feathers::Config.white %>;
|
121
|
+
i {
|
122
|
+
color:<%= Feathers::Config.white %>;
|
123
|
+
@include opacity(0.4);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
.icon-bar {
|
130
|
+
border:1px solid <%= Feathers::Config.medium_1 %>;
|
131
|
+
display:block;
|
132
|
+
height:3em;
|
133
|
+
line-height:2em;
|
134
|
+
padding:0.5em;
|
135
|
+
text-align:center;
|
136
|
+
@include background-gradient(lighten(<%= Feathers::Config.light_2 %>, 10%), <%= Feathers::Config.light_2 %>);
|
137
|
+
a {
|
138
|
+
display:inline-block;
|
139
|
+
margin:0 2em;
|
140
|
+
i {
|
141
|
+
font-size:180%;
|
142
|
+
color:<%= Feathers::Config.dark_1 %>;
|
143
|
+
@include text-shadow(1px 1px 1px <%= Feathers::Config.white %>);
|
144
|
+
}
|
145
|
+
}
|
146
|
+
a:hover, a:active {
|
147
|
+
i {
|
148
|
+
color:#333;
|
149
|
+
}
|
150
|
+
}
|
151
|
+
}
|
152
|
+
|
153
|
+
ul.link-list {
|
154
|
+
margin:0;
|
155
|
+
padding:0;
|
156
|
+
overflow-scroll:touch;
|
157
|
+
-webkit-overflow-scroll:touch;
|
158
|
+
li {
|
159
|
+
list-style:none;
|
160
|
+
margin:0;
|
161
|
+
padding:0;
|
162
|
+
a {
|
163
|
+
display:block;
|
164
|
+
padding:0.5em;
|
165
|
+
margin:0;
|
166
|
+
border-bottom:1px solid <%= Feathers::Config.medium_1 %>;
|
167
|
+
i {
|
168
|
+
color:<%= Feathers::Config.dark_1 %>;
|
169
|
+
display:inline-block;
|
170
|
+
float:right;
|
171
|
+
line-height:1.5em;
|
172
|
+
@include opacity(0.2);
|
173
|
+
}
|
174
|
+
}
|
175
|
+
a:hover {
|
176
|
+
background:<%= Feathers::Config.light_2 %>;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
li:last-child {
|
180
|
+
a {
|
181
|
+
border-bottom:none;
|
182
|
+
}
|
183
|
+
}
|
184
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
@mixin background-gradient($startColor: #3C3C3C, $endColor: #999999) {
|
2
|
+
background-color: $startColor;
|
3
|
+
background-image: -webkit-gradient(linear, left top, left bottom, from($startColor), to($endColor));
|
4
|
+
background-image: -webkit-linear-gradient(top, $startColor, $endColor);
|
5
|
+
background-image: -moz-linear-gradient(top, $startColor, $endColor);
|
6
|
+
background-image: -ms-linear-gradient(top, $startColor, $endColor);
|
7
|
+
background-image: -o-linear-gradient(top, $startColor, $endColor);
|
8
|
+
background-image: linear-gradient(top, $startColor, $endColor);
|
9
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=$startColor, EndColorStr=$endColor);
|
10
|
+
}
|
11
|
+
|
12
|
+
@mixin background-size($width: 100%, $height: 100%) {
|
13
|
+
-moz-background-size: $width $height;
|
14
|
+
-webkit-background-size: $width $height;
|
15
|
+
background-size: $width $height;
|
16
|
+
}
|
17
|
+
|
18
|
+
@mixin border-radius($radius: 5px) {
|
19
|
+
-moz-border-radius: $radius;
|
20
|
+
-webkit-border-radius: $radius;
|
21
|
+
border-radius: $radius;
|
22
|
+
}
|
23
|
+
|
24
|
+
@mixin box-shadow($x: 2px, $y: 2px, $blur: 5px, $color: rgba(0,0,0,.4), $inset: "") {
|
25
|
+
-webkit-box-shadow: $inset $x $y $blur $color;
|
26
|
+
-moz-box-shadow: $inset $x $y $blur $color;
|
27
|
+
box-shadow: $inset $x $y $blur $color;
|
28
|
+
}
|
29
|
+
|
30
|
+
@mixin opacity($opacity: 0.5) {
|
31
|
+
filter: alpha(opacity=($opacity * 100));
|
32
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + ($opacity * 100) + ")";
|
33
|
+
-moz-opacity: $opacity;
|
34
|
+
-khtml-opacity: $opacity;
|
35
|
+
opacity: $opacity;
|
36
|
+
}
|
37
|
+
|
38
|
+
@mixin text-shadow($x: 2px, $y: 2px, $blur: 5px, $color: rgba(0,0,0,.4)) {
|
39
|
+
-moz-text-shadow: $x $y $blur $color;
|
40
|
+
-webkit-text-shadow: $x $y $blur $color;
|
41
|
+
text-shadow: $x $y $blur $color;
|
42
|
+
}
|
43
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
.avatar {
|
2
|
+
width:64px;
|
3
|
+
height:64px;
|
4
|
+
}
|
5
|
+
|
6
|
+
.avatar.circle {
|
7
|
+
@include border-radius(100%);
|
8
|
+
}
|
9
|
+
|
10
|
+
.avatar.framed {
|
11
|
+
background:<%= Feathers::Config.white %>;
|
12
|
+
border:1px solid <%= Feathers::Config.medium_1 %>;
|
13
|
+
padding:3px;
|
14
|
+
}
|
15
|
+
|
16
|
+
.pagination {
|
17
|
+
overflow:hidden;
|
18
|
+
a {
|
19
|
+
border:1px solid <%= Feathers::Config.light_2 %>;
|
20
|
+
display:inline-block;
|
21
|
+
float:left;
|
22
|
+
margin-right:0.5em;
|
23
|
+
padding:0.25em 0.5em;
|
24
|
+
}
|
25
|
+
a.current {
|
26
|
+
background:#f6f6f6;
|
27
|
+
color:<%= Feathers::Config.dark_1 %>;
|
28
|
+
}
|
29
|
+
a.disabled {
|
30
|
+
border:none;
|
31
|
+
color:<%= Feathers::Config.medium_1 %>;
|
32
|
+
}
|
33
|
+
a:hover {
|
34
|
+
background:<%= Feathers::Config.dark_2 %>;
|
35
|
+
color:<%= Feathers::Config.white %>;
|
36
|
+
}
|
37
|
+
a.disabled:hover {
|
38
|
+
background:<%= Feathers::Config.medium_1 %>;
|
39
|
+
color:<%= Feathers::Config.white %>;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
.progress-bar {
|
44
|
+
background:<%= Feathers::Config.light_1 %>;
|
45
|
+
height:16px;
|
46
|
+
margin:1em 0;
|
47
|
+
@include border-radius(1em);
|
48
|
+
b {
|
49
|
+
background:<%= Feathers::Config.success_element %>;
|
50
|
+
color:<%= Feathers::Config.white %>;
|
51
|
+
display:block;
|
52
|
+
font-size:80%;
|
53
|
+
height:16px;
|
54
|
+
line-height:16px;
|
55
|
+
text-align:center;
|
56
|
+
@include border-radius(1em);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
span.label {
|
61
|
+
background:<%= Feathers::Config.default_element %>;
|
62
|
+
color:<%= Feathers::Config.white %>;
|
63
|
+
font-size:80%;
|
64
|
+
font-weight:bold;
|
65
|
+
margin-right:0.5em;
|
66
|
+
padding:0.25em 0.5em;
|
67
|
+
text-transform:lowercase;
|
68
|
+
white-space:nowrap;
|
69
|
+
@include border-radius(0.25em);
|
70
|
+
}
|
71
|
+
|
72
|
+
span.label.danger { background:<%= Feathers::Config.danger_element %>; }
|
73
|
+
span.label.info { background:<%= Feathers::Config.info_element %>; }
|
74
|
+
span.label.success { background:<%= Feathers::Config.success_element %>; }
|
75
|
+
span.label.warning { background:<%= Feathers::Config.warning_element %>; }
|
76
|
+
|
77
|
+
div.note {
|
78
|
+
background:<%= Feathers::Config.note_background %>;
|
79
|
+
border:2px solid darken(<%= Feathers::Config.note_background %>, 30%);
|
80
|
+
color:darken(<%= Feathers::Config.note_background %>, 75%);
|
81
|
+
margin:1em 0;
|
82
|
+
padding:0.5em;
|
83
|
+
}
|
84
|
+
|
85
|
+
.tag-line {
|
86
|
+
color:<%= Feathers::Config.dark_1 %>;
|
87
|
+
font-size:125%;
|
88
|
+
}
|
89
|
+
|
90
|
+
.title-bar {
|
91
|
+
border:1px solid <%= Feathers::Config.medium_2 %>;
|
92
|
+
padding:0.5em;
|
93
|
+
text-align:center;
|
94
|
+
@include background-gradient(lighten(<%= Feathers::Config.default_element %>, 10%), <%= Feathers::Config.default_element %>);
|
95
|
+
h1 {
|
96
|
+
color:<%= Feathers::Config.dark_1 %>;
|
97
|
+
font-size:180%;
|
98
|
+
margin:0;
|
99
|
+
@include text-shadow(1px 1px 1px <%= Feathers::Config.white %>);
|
100
|
+
}
|
101
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
@import 'mixins';
|
2
|
+
|
3
|
+
table.data-table {
|
4
|
+
thead {
|
5
|
+
th {
|
6
|
+
border-bottom:1px solid <%= Feathers::Config.medium_1 %>;
|
7
|
+
border-right:1px solid <%= Feathers::Config.medium_1 %>;
|
8
|
+
border-top:1px solid <%= Feathers::Config.medium_1 %>;
|
9
|
+
color:<%= Feathers::Config.dark_2 %>;
|
10
|
+
font-weight:bold;
|
11
|
+
text-align:left;
|
12
|
+
@include background-gradient(lighten(<%= Feathers::Config.default_element %>, 10%), <%= Feathers::Config.default_element %>);
|
13
|
+
}
|
14
|
+
th:first-child {
|
15
|
+
border-left:1px solid <%= Feathers::Config.medium_1 %>;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
tbody {
|
19
|
+
td {
|
20
|
+
border-bottom:1px solid <%= Feathers::Config.light_2 %>;
|
21
|
+
}
|
22
|
+
tr:hover {
|
23
|
+
background:<%= Feathers::Config.highlight %>;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
tfoot {
|
27
|
+
background:<%= Feathers::Config.light_2 %>;
|
28
|
+
color:<%= Feathers::Config.dark_1 %>;
|
29
|
+
}
|
30
|
+
}
|
data/feathers.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "feathers/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "feathers"
|
7
|
+
s.version = Feathers::VERSION
|
8
|
+
s.authors = ["Kelli Shaver"]
|
9
|
+
s.email = ["kelli@kellishaver.com"]
|
10
|
+
s.homepage = "https://github.com/kellishaver/feathers"
|
11
|
+
s.summary = %q{Lightweight CSS boilerplate with sensible defaults}
|
12
|
+
s.description = %q{Feathers is a minimalist CSS reset and boilerplate with optional rules that can be 'layered in' to apply sensible defaults to common widgets, such as navigation, forms, buttons, and menus}
|
13
|
+
s.license = "MIT"
|
14
|
+
|
15
|
+
s.rubyforge_project = "feathers"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency "rails", ">= 3.0", "< 4.1.0"
|
21
|
+
#s.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
#s.add_development_dependency "rake"
|
23
|
+
end
|
data/lib/feathers.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Feathers
|
2
|
+
class Config
|
3
|
+
class << self
|
4
|
+
|
5
|
+
attr_reader :light_1,
|
6
|
+
:light_2,
|
7
|
+
:medium_1,
|
8
|
+
:medium_2,
|
9
|
+
:dark_1,
|
10
|
+
:dark_2,
|
11
|
+
:highlight,
|
12
|
+
:notice_background,
|
13
|
+
:warning_background,
|
14
|
+
:error_background,
|
15
|
+
:note_background,
|
16
|
+
:default_element,
|
17
|
+
:danger_element,
|
18
|
+
:info_element,
|
19
|
+
:success_element,
|
20
|
+
:warning_element,
|
21
|
+
:black,
|
22
|
+
:white
|
23
|
+
|
24
|
+
attr_writer :light_1,
|
25
|
+
:light_2,
|
26
|
+
:medium_1,
|
27
|
+
:medium_2,
|
28
|
+
:dark_1,
|
29
|
+
:dark_2,
|
30
|
+
:highlight,
|
31
|
+
:notice_background,
|
32
|
+
:warning_border,
|
33
|
+
:warning_background,
|
34
|
+
:error_background,
|
35
|
+
:note_background,
|
36
|
+
:default_element,
|
37
|
+
:danger_element,
|
38
|
+
:info_element,
|
39
|
+
:success_element,
|
40
|
+
:warning_element,
|
41
|
+
:black,
|
42
|
+
:white
|
43
|
+
|
44
|
+
def set_defaults
|
45
|
+
@light_1 = "#efefef"
|
46
|
+
@light_2 = "#ddd"
|
47
|
+
@medium_1 = "#ccc"
|
48
|
+
@medium_2 = "#aaa"
|
49
|
+
@dark_1 = "#777"
|
50
|
+
@dark_2 = "#444"
|
51
|
+
@highlight = "#ffe"
|
52
|
+
@notice_background = "#ecffd6"
|
53
|
+
@warning_background = "#fbefb9"
|
54
|
+
@error_background = "#ffebeb"
|
55
|
+
@note_background = "#d8f2ff"
|
56
|
+
@default_element = "#ccc"
|
57
|
+
@danger_element = "#cf0404"
|
58
|
+
@info_element = "#448ccb"
|
59
|
+
@success_element = "#7ba900"
|
60
|
+
@warning_element = "#f3a24d"
|
61
|
+
@black = "#000"
|
62
|
+
@white = "#fff"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: feathers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kelli Shaver
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
- - <
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 4.1.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- - <
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 4.1.0
|
33
|
+
description: Feathers is a minimalist CSS reset and boilerplate with optional rules
|
34
|
+
that can be 'layered in' to apply sensible defaults to common widgets, such as navigation,
|
35
|
+
forms, buttons, and menus
|
36
|
+
email:
|
37
|
+
- kelli@kellishaver.com
|
38
|
+
executables: []
|
39
|
+
extensions: []
|
40
|
+
extra_rdoc_files: []
|
41
|
+
files:
|
42
|
+
- .gitignore
|
43
|
+
- Gemfile
|
44
|
+
- README.md
|
45
|
+
- Rakefile
|
46
|
+
- app/assets/stylesheets/base.css.scss.erb
|
47
|
+
- app/assets/stylesheets/buttons.css.scss.erb
|
48
|
+
- app/assets/stylesheets/flash-messages.css.scss.erb
|
49
|
+
- app/assets/stylesheets/forms.css.scss.erb
|
50
|
+
- app/assets/stylesheets/menus.css.scss.erb
|
51
|
+
- app/assets/stylesheets/mixins.scss
|
52
|
+
- app/assets/stylesheets/other-widgets.css.scss.erb
|
53
|
+
- app/assets/stylesheets/tables.css.scss.erb
|
54
|
+
- feathers.gemspec
|
55
|
+
- lib/feathers.rb
|
56
|
+
- lib/feathers/config.rb
|
57
|
+
- lib/feathers/rails/engine.rb
|
58
|
+
- lib/feathers/rails/railtie.rb
|
59
|
+
- lib/feathers/version.rb
|
60
|
+
homepage: https://github.com/kellishaver/feathers
|
61
|
+
licenses:
|
62
|
+
- MIT
|
63
|
+
metadata: {}
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubyforge_project: feathers
|
80
|
+
rubygems_version: 2.0.3
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: Lightweight CSS boilerplate with sensible defaults
|
84
|
+
test_files: []
|