panopticon 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c80e381ea888d082a8bfe63c05a72e722f84f70a
4
+ data.tar.gz: 7668b347e08bb3eee49d4e778ad3d8f489676e2c
5
+ SHA512:
6
+ metadata.gz: 8e078780cf16c947e7e4b7b26cf211ba2881cd57c038d4dc71ced1d908068881e01b60ff7940e51b4e6da9ae60b2200fb4a28c8b609fbd1ca9381cf395bbb831
7
+ data.tar.gz: 2aadfc4eb37f30b4bee129997520b4e5e9297a2e8e7092d262d8c0442f8b88e9a986654f14f9aca633df05fab06005aa31e7dc4d13989a24eeb058363322d6d6
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .idea
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in panopticon.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 enukane
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ # Panopticon
2
+
3
+ "Panopticon" is softwares to build Wi-Fi frame capturing box with Raspberry Pi.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'panopticon'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install panopticon
20
+
21
+ ## Usage
22
+
23
+ 1. copy extra/panopticon into /etc/init.d
24
+ 2. do chmod +x to /etc/init.d/panopticon
25
+ 3. do 'update-rc.d panopticon defaults' to start panopticon at boot time
26
+
27
+ ![screenshot here](https://pbs.twimg.com/media/CoQ-yB0VUAIFB7w.jpg)
28
+
29
+ ## Development
30
+
31
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec panopticon` to use the gem in this directory, ignoring other installed copies of this gem.
32
+
33
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
34
+
35
+ ## Contributing
36
+
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/enukane/panopticon.
38
+
39
+
40
+ ## License
41
+
42
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
43
+
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "panopticon"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "optparse"
4
+
5
+ require "panopticon"
6
+
7
+ opt = OptionParser.new
8
+ OPTS=Panopticon::Daemon.default_options
9
+
10
+ opt.on("-f", "--config-file [CONFIGFILE=#{Panopticon::Daemon::DEFAULT_CONFIG_PATH}]",
11
+ "config file") {|v|
12
+ OPTS[:config_file] = v
13
+ }
14
+
15
+ opt.on("-p", "--port [APIPORT=#{Panopticon::Daemon::DEFAULT_API_PORT}]",
16
+ "api port") {|v|
17
+ OPTS[:port] = v.to_i
18
+ }
19
+
20
+ opt.on("-i", "--interface [IFNAME=#{Panopticon::Daemon::DEFAULT_IFNAME}]",
21
+ "interface name to capture") {|v|
22
+ OPTS[:ifname] = v
23
+ }
24
+
25
+ opt.on("-c", "--capture-path [CAPTUREPATH=#{Panopticon::Daemon::DEFAULT_CAPTURE_PATH}]", "path to save capture files") {|v|
26
+ OPTS[:capture_path] = v
27
+ }
28
+
29
+ opt.on('-l', "--log-file [LOG_FILE=#{Panopticon::Daemon::DEFAULT_LOG_FILE}]",
30
+ "log output file (accepts 'STDOUT', 'STDERR')") {|v|
31
+ OPTS[:log_file] = v
32
+ }
33
+
34
+ (class<<self;self;end).module_eval do
35
+ define_method(:usage) do |msg|
36
+ puts opt.to_s
37
+ puts "error: #{msg}" if msg
38
+ exit 1
39
+ end
40
+ end
41
+
42
+ begin
43
+ rest = opt.parse(ARGV)
44
+ if rest.length != 0
45
+ usage nil
46
+ end
47
+ rescue
48
+ usage $!.to_s
49
+ end
50
+
51
+ $log = Log.new(:output => OPTS[:log_file])
52
+ Panopticon::Daemon.new(OPTS).run
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+
3
+ BASEDIR=`dirname "${0}"`
4
+
5
+ if [ "root" != `whoami` ]; then
6
+ echo "panopticon failed to install"
7
+ logger "panopticon failed to install"
8
+ exit 1
9
+ fi
10
+
11
+ cp $BASEDIR/panopticond /etc/init.d/panopticond
12
+ chmod +x /etc/init.d/panopticond
13
+
14
+ update-rc.d panopticond defaults
@@ -0,0 +1,62 @@
1
+ #!/bin/sh
2
+
3
+ ### BEGIN INIT INFO
4
+ # Provides: panopticond
5
+ # Required-Start: $remote_fs $syslog
6
+ # Required-Stop: $remote_fs $syslog
7
+ # Default-Start: 2 3 4 5
8
+ # Default-Stop: 0 1 6
9
+ # Short-Description: Put a short description of the service here
10
+ # Description: Put a long description of the service here
11
+ ### END INIT INFO
12
+
13
+ # Change the next 3 lines to suit where you install your script and what you want to call it
14
+ DIR=/usr/local/bin/
15
+ DAEMON=$DIR/panopticond
16
+ DAEMON_NAME=panopticond
17
+
18
+ # Add any command line options for your daemon here
19
+ DAEMON_OPTS="-i wlan0 -c /cap -p 8080"
20
+
21
+ # This next line determines what user the script runs as.
22
+ # Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
23
+ DAEMON_USER=root
24
+
25
+ # The process ID of the script when it runs is stored here:
26
+ PIDFILE=/var/run/$DAEMON_NAME.pid
27
+
28
+ . /lib/lsb/init-functions
29
+
30
+ do_start () {
31
+ log_daemon_msg "Starting system $DAEMON_NAME daemon"
32
+ start-stop-daemon --start --background --pidfile $PIDFILE --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
33
+ log_end_msg $?
34
+ }
35
+ do_stop () {
36
+ log_daemon_msg "Stopping system $DAEMON_NAME daemon"
37
+ start-stop-daemon --stop --pidfile $PIDFILE --retry 10
38
+ log_end_msg $?
39
+ }
40
+
41
+ case "$1" in
42
+
43
+ start|stop)
44
+ do_${1}
45
+ ;;
46
+
47
+ restart|reload|force-reload)
48
+ do_stop
49
+ do_start
50
+ ;;
51
+
52
+ status)
53
+ status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
54
+ ;;
55
+
56
+ *)
57
+ echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
58
+ exit 1
59
+ ;;
60
+
61
+ esac
62
+ exit 0
@@ -0,0 +1,384 @@
1
+ .btn-default,
2
+ .btn-primary,
3
+ .btn-success,
4
+ .btn-info,
5
+ .btn-warning,
6
+ .btn-danger {
7
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
8
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
9
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
10
+ }
11
+
12
+ .btn-default:active,
13
+ .btn-primary:active,
14
+ .btn-success:active,
15
+ .btn-info:active,
16
+ .btn-warning:active,
17
+ .btn-danger:active,
18
+ .btn-default.active,
19
+ .btn-primary.active,
20
+ .btn-success.active,
21
+ .btn-info.active,
22
+ .btn-warning.active,
23
+ .btn-danger.active {
24
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
25
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
26
+ }
27
+
28
+ .btn:active,
29
+ .btn.active {
30
+ background-image: none;
31
+ }
32
+
33
+ .btn-default {
34
+ text-shadow: 0 1px 0 #fff;
35
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6));
36
+ background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%);
37
+ background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%);
38
+ background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%);
39
+ background-repeat: repeat-x;
40
+ border-color: #e0e0e0;
41
+ border-color: #ccc;
42
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
43
+ }
44
+
45
+ .btn-default:active,
46
+ .btn-default.active {
47
+ background-color: #e6e6e6;
48
+ border-color: #e0e0e0;
49
+ }
50
+
51
+ .btn-primary {
52
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
53
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
54
+ background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
55
+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
56
+ background-repeat: repeat-x;
57
+ border-color: #2d6ca2;
58
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
59
+ }
60
+
61
+ .btn-primary:active,
62
+ .btn-primary.active {
63
+ background-color: #3071a9;
64
+ border-color: #2d6ca2;
65
+ }
66
+
67
+ .btn-success {
68
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
69
+ background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
70
+ background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
71
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
72
+ background-repeat: repeat-x;
73
+ border-color: #419641;
74
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
75
+ }
76
+
77
+ .btn-success:active,
78
+ .btn-success.active {
79
+ background-color: #449d44;
80
+ border-color: #419641;
81
+ }
82
+
83
+ .btn-warning {
84
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
85
+ background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
86
+ background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
87
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
88
+ background-repeat: repeat-x;
89
+ border-color: #eb9316;
90
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
91
+ }
92
+
93
+ .btn-warning:active,
94
+ .btn-warning.active {
95
+ background-color: #ec971f;
96
+ border-color: #eb9316;
97
+ }
98
+
99
+ .btn-danger {
100
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
101
+ background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
102
+ background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
103
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
104
+ background-repeat: repeat-x;
105
+ border-color: #c12e2a;
106
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
107
+ }
108
+
109
+ .btn-danger:active,
110
+ .btn-danger.active {
111
+ background-color: #c9302c;
112
+ border-color: #c12e2a;
113
+ }
114
+
115
+ .btn-info {
116
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
117
+ background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
118
+ background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
119
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
120
+ background-repeat: repeat-x;
121
+ border-color: #2aabd2;
122
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
123
+ }
124
+
125
+ .btn-info:active,
126
+ .btn-info.active {
127
+ background-color: #31b0d5;
128
+ border-color: #2aabd2;
129
+ }
130
+
131
+ .thumbnail,
132
+ .img-thumbnail {
133
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
134
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
135
+ }
136
+
137
+ .dropdown-menu > li > a:hover,
138
+ .dropdown-menu > li > a:focus,
139
+ .dropdown-menu > .active > a,
140
+ .dropdown-menu > .active > a:hover,
141
+ .dropdown-menu > .active > a:focus {
142
+ background-color: #357ebd;
143
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
144
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
145
+ background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
146
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
147
+ background-repeat: repeat-x;
148
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
149
+ }
150
+
151
+ .navbar {
152
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));
153
+ background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%);
154
+ background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
155
+ background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
156
+ background-repeat: repeat-x;
157
+ border-radius: 4px;
158
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
159
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
160
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
161
+ }
162
+
163
+ .navbar .navbar-nav > .active > a {
164
+ background-color: #f8f8f8;
165
+ }
166
+
167
+ .navbar-brand,
168
+ .navbar-nav > li > a {
169
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
170
+ }
171
+
172
+ .navbar-inverse {
173
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));
174
+ background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%);
175
+ background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);
176
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
177
+ background-repeat: repeat-x;
178
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
179
+ }
180
+
181
+ .navbar-inverse .navbar-nav > .active > a {
182
+ background-color: #222222;
183
+ }
184
+
185
+ .navbar-inverse .navbar-brand,
186
+ .navbar-inverse .navbar-nav > li > a {
187
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
188
+ }
189
+
190
+ .navbar-static-top,
191
+ .navbar-fixed-top,
192
+ .navbar-fixed-bottom {
193
+ border-radius: 0;
194
+ }
195
+
196
+ .alert {
197
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
198
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
199
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
200
+ }
201
+
202
+ .alert-success {
203
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));
204
+ background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);
205
+ background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
206
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
207
+ background-repeat: repeat-x;
208
+ border-color: #b2dba1;
209
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
210
+ }
211
+
212
+ .alert-info {
213
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));
214
+ background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);
215
+ background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
216
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
217
+ background-repeat: repeat-x;
218
+ border-color: #9acfea;
219
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
220
+ }
221
+
222
+ .alert-warning {
223
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));
224
+ background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);
225
+ background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
226
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
227
+ background-repeat: repeat-x;
228
+ border-color: #f5e79e;
229
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
230
+ }
231
+
232
+ .alert-danger {
233
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));
234
+ background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);
235
+ background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
236
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
237
+ background-repeat: repeat-x;
238
+ border-color: #dca7a7;
239
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
240
+ }
241
+
242
+ .progress {
243
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));
244
+ background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);
245
+ background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
246
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
247
+ background-repeat: repeat-x;
248
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
249
+ }
250
+
251
+ .progress-bar {
252
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
253
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
254
+ background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
255
+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
256
+ background-repeat: repeat-x;
257
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
258
+ }
259
+
260
+ .progress-bar-success {
261
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
262
+ background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
263
+ background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
264
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
265
+ background-repeat: repeat-x;
266
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
267
+ }
268
+
269
+ .progress-bar-info {
270
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
271
+ background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
272
+ background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
273
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
274
+ background-repeat: repeat-x;
275
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
276
+ }
277
+
278
+ .progress-bar-warning {
279
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
280
+ background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
281
+ background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
282
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
283
+ background-repeat: repeat-x;
284
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
285
+ }
286
+
287
+ .progress-bar-danger {
288
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
289
+ background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
290
+ background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
291
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
292
+ background-repeat: repeat-x;
293
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
294
+ }
295
+
296
+ .list-group {
297
+ border-radius: 4px;
298
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
299
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
300
+ }
301
+
302
+ .list-group-item.active,
303
+ .list-group-item.active:hover,
304
+ .list-group-item.active:focus {
305
+ text-shadow: 0 -1px 0 #3071a9;
306
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));
307
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);
308
+ background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);
309
+ background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
310
+ background-repeat: repeat-x;
311
+ border-color: #3278b3;
312
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
313
+ }
314
+
315
+ .panel {
316
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
317
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
318
+ }
319
+
320
+ .panel-default > .panel-heading {
321
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));
322
+ background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);
323
+ background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
324
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
325
+ background-repeat: repeat-x;
326
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
327
+ }
328
+
329
+ .panel-primary > .panel-heading {
330
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
331
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
332
+ background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
333
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
334
+ background-repeat: repeat-x;
335
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
336
+ }
337
+
338
+ .panel-success > .panel-heading {
339
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));
340
+ background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);
341
+ background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
342
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
343
+ background-repeat: repeat-x;
344
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
345
+ }
346
+
347
+ .panel-info > .panel-heading {
348
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));
349
+ background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);
350
+ background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
351
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
352
+ background-repeat: repeat-x;
353
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
354
+ }
355
+
356
+ .panel-warning > .panel-heading {
357
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));
358
+ background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);
359
+ background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
360
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
361
+ background-repeat: repeat-x;
362
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
363
+ }
364
+
365
+ .panel-danger > .panel-heading {
366
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));
367
+ background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);
368
+ background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
369
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
370
+ background-repeat: repeat-x;
371
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
372
+ }
373
+
374
+ .well {
375
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));
376
+ background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);
377
+ background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
378
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
379
+ background-repeat: repeat-x;
380
+ border-color: #dcdcdc;
381
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
382
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
383
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
384
+ }