simple_pvr 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/.travis.yml +6 -0
- data/Gemfile.lock +22 -14
- data/README.md +32 -18
- data/Rakefile +1 -1
- data/development_server +10 -0
- data/development_xmltv +18 -0
- data/features/scheduling.feature +3 -3
- data/features/step_definitions/pvr_steps.rb +47 -11
- data/features/support/env.rb +3 -2
- data/lib/simple_pvr/model/schedule.rb +9 -0
- data/lib/simple_pvr/recording_manager.rb +1 -1
- data/lib/simple_pvr/recording_planner.rb +27 -3
- data/lib/simple_pvr/version.rb +1 -1
- data/public/css/bootstrap-responsive.min.css +2 -2
- data/public/css/bootstrap.min.css +2 -2
- data/public/index.html +3 -3
- data/public/js/angular/angular-resource.min.js +6 -6
- data/public/js/angular/angular.min.js +158 -153
- data/public/js/bootstrap/bootstrap.min.js +1 -1
- data/public/js/jquery/jquery.min.js +5 -0
- data/public/partials/about.html +11 -0
- data/public/partials/schedules.html +3 -3
- data/simple_pvr.gemspec +2 -1
- data/spec/resources/recordings/Extensive Metadata/1/metadata.yml +9 -0
- data/spec/simple_pvr/model/schedule_spec.rb +4 -0
- data/spec/simple_pvr/recording_planner_spec.rb +44 -9
- data/test/{testacular.conf.js → karma.conf.js} +2 -2
- data/test/lib/angular/angular-mocks.js +60 -11
- metadata +29 -7
- data/.rspec +0 -1
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simple_pvr (0.0.
|
4
|
+
simple_pvr (0.0.4)
|
5
5
|
activesupport (~> 3.2)
|
6
6
|
data_mapper (~> 1.2)
|
7
7
|
dm-sqlite-adapter (~> 1.2)
|
@@ -18,15 +18,15 @@ GEM
|
|
18
18
|
addressable (2.2.8)
|
19
19
|
bcrypt-ruby (3.0.1)
|
20
20
|
builder (3.1.0)
|
21
|
-
capybara (
|
21
|
+
capybara (2.0.3)
|
22
22
|
mime-types (>= 1.16)
|
23
23
|
nokogiri (>= 1.3.3)
|
24
24
|
rack (>= 1.0.0)
|
25
25
|
rack-test (>= 0.5.4)
|
26
26
|
selenium-webdriver (~> 2.0)
|
27
|
-
xpath (~> 0.
|
28
|
-
childprocess (0.3.
|
29
|
-
ffi (~> 1.0, >= 1.0.
|
27
|
+
xpath (~> 1.0.0)
|
28
|
+
childprocess (0.3.9)
|
29
|
+
ffi (~> 1.0, >= 1.0.11)
|
30
30
|
cucumber (1.2.1)
|
31
31
|
builder (>= 2.1.2)
|
32
32
|
diff-lcs (>= 1.1.3)
|
@@ -81,24 +81,30 @@ GEM
|
|
81
81
|
dm-core (~> 1.2.0)
|
82
82
|
do_sqlite3 (0.10.12)
|
83
83
|
data_objects (= 0.10.12)
|
84
|
+
eventmachine (1.0.3)
|
84
85
|
fastercsv (1.5.5)
|
85
|
-
|
86
|
+
faye-websocket (0.4.7)
|
87
|
+
eventmachine (>= 0.12.0)
|
88
|
+
ffi (1.6.0)
|
86
89
|
gherkin (2.11.2)
|
87
90
|
json (>= 1.4.6)
|
91
|
+
http_parser.rb (0.5.3)
|
88
92
|
i18n (0.6.4)
|
89
93
|
json (1.7.5)
|
90
94
|
json_pure (1.7.7)
|
91
|
-
|
92
|
-
addressable
|
93
|
-
mime-types (1.19)
|
95
|
+
mime-types (1.21)
|
94
96
|
multi_json (1.3.6)
|
95
97
|
nokogiri (1.5.5)
|
98
|
+
poltergeist (1.1.0)
|
99
|
+
capybara (~> 2.0, >= 2.0.1)
|
100
|
+
faye-websocket (~> 0.4, >= 0.4.4)
|
101
|
+
http_parser.rb (~> 0.5.3)
|
96
102
|
puma (1.6.3)
|
97
103
|
rack (~> 1.2)
|
98
104
|
rack (1.4.1)
|
99
105
|
rack-protection (1.5.0)
|
100
106
|
rack
|
101
|
-
rack-test (0.6.
|
107
|
+
rack-test (0.6.2)
|
102
108
|
rack (>= 1.0)
|
103
109
|
rake (10.0.3)
|
104
110
|
rspec (2.11.0)
|
@@ -110,11 +116,11 @@ GEM
|
|
110
116
|
diff-lcs (~> 1.1.3)
|
111
117
|
rspec-mocks (2.11.2)
|
112
118
|
rubyzip (0.9.9)
|
113
|
-
selenium-webdriver (2.
|
119
|
+
selenium-webdriver (2.31.0)
|
114
120
|
childprocess (>= 0.2.5)
|
115
|
-
libwebsocket (~> 0.1.3)
|
116
121
|
multi_json (~> 1.0)
|
117
122
|
rubyzip
|
123
|
+
websocket (~> 1.0.4)
|
118
124
|
sinatra (1.3.6)
|
119
125
|
rack (~> 1.4)
|
120
126
|
rack-protection (~> 1.3)
|
@@ -122,15 +128,17 @@ GEM
|
|
122
128
|
stringex (1.5.1)
|
123
129
|
tilt (1.3.5)
|
124
130
|
uuidtools (2.1.3)
|
125
|
-
|
131
|
+
websocket (1.0.7)
|
132
|
+
xpath (1.0.0)
|
126
133
|
nokogiri (~> 1.3)
|
127
134
|
|
128
135
|
PLATFORMS
|
129
136
|
ruby
|
130
137
|
|
131
138
|
DEPENDENCIES
|
132
|
-
capybara (~>
|
139
|
+
capybara (~> 2.0)
|
133
140
|
cucumber (~> 1.2)
|
141
|
+
poltergeist (~> 1.1)
|
134
142
|
rake (>= 10.0.0)
|
135
143
|
rspec (~> 2.11)
|
136
144
|
simple_pvr!
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
SimplePVR-Ruby-backend
|
2
|
+
======================
|
3
3
|
A really, really simple PVR (Personal Video Recorder) system which only supports the
|
4
4
|
[HDHomeRun network tuners](http://www.silicondust.com/). It's written in Ruby and is highly hackable. If
|
5
5
|
you don't want to hack it, but just want a solid PVR system, no worries: It's dead-simple to use.
|
@@ -108,16 +108,8 @@ Future?
|
|
108
108
|
This projects needs to be a nice, readable, hackable, tested system. No pull requests are
|
109
109
|
accepted that violate this.
|
110
110
|
|
111
|
-
For version 1 of SimplePVR, there are no more features planned.
|
112
|
-
|
113
|
-
* Updating dependencies:
|
114
|
-
* Twitter Bootstrap.
|
115
|
-
* AngularJS.
|
116
|
-
* JQuery (should be part of the project, instead of fetched through CDN).
|
117
|
-
* Testacular is now called Karma.
|
118
|
-
* Various code clean-ups (no grand plan).
|
119
|
-
* Various GUI clean-ups (no grand plan).
|
120
|
-
* Various bug fixes (no known issues at this point).
|
111
|
+
For version 1 of SimplePVR, there are no more features planned. I'll see if the current incarnation seems
|
112
|
+
stable in the long run on my own setup, and if so, I'll mark it as 1.0.0.
|
121
113
|
|
122
114
|
There is lots of stuff I'd like to do after that, but I have no deadline - which means that pull
|
123
115
|
requests are the only means you have for speeding things up. This includes:
|
@@ -137,7 +129,7 @@ requests are the only means you have for speeding things up. This includes:
|
|
137
129
|
* Let SimplePVR itself fetch XMLTV URLs at specified times of day.
|
138
130
|
* Set-up of matching XMLTV IDs to channels could make good use of a GUI.
|
139
131
|
* Parse and make use of programme icons etc.
|
140
|
-
* Searching for tuners and scanning for channels would be nice through
|
132
|
+
* Searching for tuners and scanning for channels would be nice through the web GUI.
|
141
133
|
* Saving with the hdhomerun_config command is done through a shell script, so we can shut it down properly. I'd
|
142
134
|
like a simpler solution, but haven't found anything that works both on OS X and Linux.
|
143
135
|
[Bluepill](https://github.com/arya/bluepill) seems to do the job, but seems like too big a hammer...
|
@@ -155,16 +147,36 @@ to implement...
|
|
155
147
|
|
156
148
|
Development
|
157
149
|
===========
|
150
|
+
You need the following installed:
|
151
|
+
|
152
|
+
* Ruby 1.9.3 or newer.
|
153
|
+
* [Bundler](http://gembundler.com/).
|
154
|
+
* [Karma](http://karma-runner.github.com/0.8/index.html).
|
155
|
+
* [PhantomJS](http://phantomjs.org/) - and the phantomjs executable must be on your path.
|
156
|
+
|
157
|
+
When you have cloned the repository, run
|
158
|
+
|
159
|
+
bundle install
|
160
|
+
|
161
|
+
When writing a gem, there's no apparent way to run the commands in the bin directory, in our case pvr_server
|
162
|
+
and pvr_xmltv. (If you know better than I, please let me know!) Therefore, the commands development_server and
|
163
|
+
development_xmltv are included. Use them as you would pvr_server and pvr_xmltv (see above).
|
164
|
+
|
158
165
|
Run all automatic tests like this:
|
159
166
|
|
160
167
|
rake test
|
161
168
|
|
162
|
-
This runs the Ruby specs
|
169
|
+
(Or just "rake" with no arguments.) This runs the Ruby specs, features, and JavaScript unit tests.
|
170
|
+
|
171
|
+
If you want to keep Karma running and let it execute whenever a file changes, run this:
|
172
|
+
|
173
|
+
karma start test/karma.conf.js
|
163
174
|
|
164
|
-
|
165
|
-
If you want to keep Testacular running and let it execute whenever a file changes, just run this:
|
175
|
+
The specs currently use Selenium to drive Firefox, but you can choose to use PhantomJS instead:
|
166
176
|
|
167
|
-
|
177
|
+
capybara_driver=poltergeist rake test:features
|
178
|
+
|
179
|
+
This currently doesn't work for all specs, though. (Again, if you can fix it, please send a pull request!)
|
168
180
|
|
169
181
|
To create the gem, make sure that lib/simple_pvr/version.rb is up-to-date, commit everything and run:
|
170
182
|
|
@@ -175,4 +187,6 @@ the automatic tests, right?), and execute
|
|
175
187
|
|
176
188
|
rake release
|
177
189
|
|
178
|
-
...which will release the gem to rubygems.org.
|
190
|
+
...which will release the gem to rubygems.org.
|
191
|
+
|
192
|
+
I'm trying to make Travis CI like SimplePVR, but it's not easy: [![Build Status](https://travis-ci.org/olefriis/simplepvr-backend-ruby.png)](https://travis-ci.org/olefriis/simplepvr-backend-ruby)
|
data/Rakefile
CHANGED
data/development_server
ADDED
data/development_xmltv
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/lib/simple_pvr'
|
4
|
+
require 'yaml'
|
5
|
+
require 'open-uri'
|
6
|
+
|
7
|
+
if ARGV.length != 2
|
8
|
+
puts "Requires two arguments: The XMLTV file name, and the channel mapping file name"
|
9
|
+
exit 1
|
10
|
+
end
|
11
|
+
|
12
|
+
SimplePvr::PvrInitializer.setup
|
13
|
+
|
14
|
+
xmltv_file = File.new(ARGV[0])
|
15
|
+
mapping_to_channels = YAML.load_file(ARGV[1])
|
16
|
+
|
17
|
+
reader = SimplePvr::XmltvReader.new(mapping_to_channels)
|
18
|
+
reader.read(xmltv_file)
|
data/features/scheduling.feature
CHANGED
@@ -64,7 +64,7 @@ Scenario: Remove schedule
|
|
64
64
|
Given I have navigated to the programme page for "Bonderøven" on channel "Channel 1"
|
65
65
|
And I choose to record the programme on this channel
|
66
66
|
And I am on the schedules page
|
67
|
-
And I
|
67
|
+
And I delete the first schedule
|
68
68
|
Then I should not see the schedule "Bonderøven on Channel 1"
|
69
69
|
And there should be 0 upcoming recordings
|
70
70
|
|
@@ -82,7 +82,7 @@ Scenario: Fixing conflicts by removing a schedule
|
|
82
82
|
And I have navigated to the programme page for "Noddy" on channel "Channel 1"
|
83
83
|
And I choose to record the programme on this channel
|
84
84
|
When I am on the schedules page
|
85
|
-
And I
|
85
|
+
And I delete the first schedule
|
86
86
|
Then there should be no conflicts
|
87
87
|
|
88
88
|
Scenario: Removing a specific recording from a schedule
|
@@ -90,7 +90,7 @@ Scenario: Removing a specific recording from a schedule
|
|
90
90
|
And I choose to record the programme on any channel
|
91
91
|
And I am on the schedules page
|
92
92
|
Then there should be 3 upcoming recordings
|
93
|
-
When I
|
93
|
+
When I choose not to record the first scheduled show
|
94
94
|
Then there should be 2 upcoming recordings
|
95
95
|
And I should see "Exception: Bonderøven"
|
96
96
|
|
@@ -1,5 +1,30 @@
|
|
1
1
|
require 'timeout'
|
2
2
|
|
3
|
+
RSpec::Matchers.define :become do |expected|
|
4
|
+
match do |block|
|
5
|
+
begin
|
6
|
+
Timeout.timeout(Capybara.default_wait_time) do
|
7
|
+
sleep(0.1) until expected == block.call
|
8
|
+
end
|
9
|
+
true
|
10
|
+
rescue TimeoutError
|
11
|
+
false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
failure_message_for_should do |block|
|
16
|
+
"expected that #{block.call} would become #{expected}"
|
17
|
+
end
|
18
|
+
|
19
|
+
failure_message_for_should_not do |block|
|
20
|
+
"expected that #{block.call} would not become #{expected}"
|
21
|
+
end
|
22
|
+
|
23
|
+
description do
|
24
|
+
"become #{expected}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
3
28
|
Given /the following programmes\:/ do |programme_table|
|
4
29
|
programme_table.hashes.each do |programme|
|
5
30
|
channel = find_or_create_channel_with_name(programme['channel'] || 'Channel 1')
|
@@ -25,7 +50,8 @@ Given /I have navigated to the programme page for "(.*)" on channel "(.*)"/ do |
|
|
25
50
|
visit path_to('the channel overview page')
|
26
51
|
fill_in('channel_filter', :with => channel)
|
27
52
|
click_link('...')
|
28
|
-
|
53
|
+
page.should have_link(title)
|
54
|
+
first(:link, title).click
|
29
55
|
end
|
30
56
|
|
31
57
|
Given /I have navigated to the programme page for yesterday's "(.*)" on channel "(.*)"/ do |title, channel|
|
@@ -57,48 +83,58 @@ When /I search for programmes with title "(.*)"/ do |query|
|
|
57
83
|
click_button('Search')
|
58
84
|
end
|
59
85
|
|
86
|
+
When /I delete the first schedule/ do
|
87
|
+
page.should have_button('Delete')
|
88
|
+
first(:button, 'Delete').click
|
89
|
+
end
|
90
|
+
|
91
|
+
When /I choose not to record the first scheduled show/ do
|
92
|
+
page.should have_link('Do not record this specific show')
|
93
|
+
first(:link, 'Do not record this specific show').click
|
94
|
+
end
|
95
|
+
|
60
96
|
Then /I should see the programme title suggestion "(.*)"/ do |suggestion|
|
61
|
-
page.
|
97
|
+
page.should have_text(text)
|
62
98
|
end
|
63
99
|
|
64
100
|
Then /I should see "(.*)" in the page contents/ do |text|
|
65
101
|
within('#contents') do
|
66
|
-
page.
|
102
|
+
page.should have_text(text)
|
67
103
|
end
|
68
104
|
end
|
69
105
|
|
70
106
|
Then /I should see the schedule "(.*)"/ do |text|
|
71
107
|
within('#schedules') do
|
72
|
-
page.
|
108
|
+
page.should have_text(text)
|
73
109
|
end
|
74
110
|
end
|
75
111
|
|
76
112
|
Then /I should see the timed schedule "(.*)"/ do |text|
|
77
113
|
within('#schedules') do
|
78
|
-
page.
|
114
|
+
page.should have_content(/#{text} .* \d+, \d{4} at \d?\d:\d\d/)
|
79
115
|
end
|
80
116
|
end
|
81
117
|
|
82
118
|
Then /I should not see the schedule "(.*)"/ do |text|
|
83
119
|
within('#schedules') do
|
84
|
-
page.
|
120
|
+
page.should_not have_text(text)
|
85
121
|
end
|
86
122
|
end
|
87
123
|
|
88
124
|
Then /I should not see the button "(.*)"/ do |text|
|
89
|
-
|
125
|
+
page.should_not have_button(text)
|
90
126
|
end
|
91
127
|
|
92
128
|
Then /there should be (\d*) upcoming recordings?/ do |upcoming_recordings|
|
93
|
-
|
129
|
+
expect { page.find('#upcoming_recordings').all('h2').length }.to become(upcoming_recordings.to_i)
|
94
130
|
end
|
95
131
|
|
96
132
|
Then /^there should be a conflict$/ do
|
97
|
-
page.
|
133
|
+
page.should have_text('(Conflicting)')
|
98
134
|
end
|
99
135
|
|
100
136
|
Then /^there should be no conflicts$/ do
|
101
|
-
page.
|
137
|
+
page.should_not have_text('(Conflicting)')
|
102
138
|
end
|
103
139
|
|
104
140
|
Then /I wait (\d*) seconds/ do |seconds|
|
@@ -112,5 +148,5 @@ end
|
|
112
148
|
|
113
149
|
def choose_to_record(button_text)
|
114
150
|
click_button(button_text)
|
115
|
-
page.
|
151
|
+
page.should have_text('This programme is being recorded')
|
116
152
|
end
|
data/features/support/env.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
ENV['RACK_ENV'] = 'test'
|
2
2
|
require 'capybara'
|
3
3
|
require 'capybara/cucumber'
|
4
|
+
require 'capybara/poltergeist'
|
4
5
|
require 'rspec'
|
5
6
|
|
6
7
|
require File.join(File.dirname(__FILE__), '../../lib/simple_pvr')
|
@@ -9,8 +10,8 @@ SimplePvr::PvrInitializer.setup_for_integration_test
|
|
9
10
|
SimplePvr::RecordingPlanner.reload
|
10
11
|
|
11
12
|
Capybara.app = eval "Rack::Builder.new {( " + SimplePvr::PvrInitializer.rack_maps_file + ")}"
|
12
|
-
Capybara.default_driver =
|
13
|
-
Capybara.default_wait_time =
|
13
|
+
Capybara.default_driver = (ENV['capybara_driver'] || 'selenium').to_sym
|
14
|
+
Capybara.default_wait_time = 30
|
14
15
|
Capybara.ignore_hidden_elements = true # AngularJS shows and hides elements all the time, so this is important
|
15
16
|
|
16
17
|
class SimplePvrWorld
|
@@ -16,6 +16,15 @@ module SimplePvr
|
|
16
16
|
start_time: options[:start_time],
|
17
17
|
end_time: options[:end_time])
|
18
18
|
end
|
19
|
+
|
20
|
+
def self.add_exception(options)
|
21
|
+
Schedule.create(
|
22
|
+
type: :exception,
|
23
|
+
title: options[:title],
|
24
|
+
channel: options[:channel],
|
25
|
+
start_time: options[:start_time],
|
26
|
+
end_time: options[:end_time])
|
27
|
+
end
|
19
28
|
|
20
29
|
property :id, Serial
|
21
30
|
property :type, Enum[:specification, :exception]
|
@@ -1,10 +1,9 @@
|
|
1
1
|
module SimplePvr
|
2
2
|
class RecordingPlanner
|
3
3
|
def self.reload
|
4
|
-
Model::Schedule.cleanup
|
5
|
-
|
6
4
|
planner = self.new
|
7
5
|
planner.read
|
6
|
+
SimplePvr::Model::Schedule.cleanup
|
8
7
|
end
|
9
8
|
|
10
9
|
def initialize
|
@@ -18,6 +17,10 @@ module SimplePvr
|
|
18
17
|
|
19
18
|
specifications.each do |specification|
|
20
19
|
programmes = programmes_matching(specification)
|
20
|
+
|
21
|
+
adjust_end_time_of_specification(specification, programmes)
|
22
|
+
adjust_end_time_of_exceptions(specification, programmes, exceptions)
|
23
|
+
|
21
24
|
programmes_with_exceptions_removed = programmes.find_all {|programme| !matches_exception(programme, exceptions) }
|
22
25
|
programmes_filtered_by_weekdays = programmes_with_exceptions_removed.find_all {|programme| on_allowed_weekday(programme, specification) }
|
23
26
|
programmes_filtered_by_time_of_day = programmes_filtered_by_weekdays.find_all {|programme| at_allowed_time_of_day(programme, specification) }
|
@@ -39,8 +42,29 @@ module SimplePvr
|
|
39
42
|
end
|
40
43
|
end
|
41
44
|
|
45
|
+
def adjust_end_time_of_specification(specification, programmes)
|
46
|
+
if specification.start_time && programmes.length == 1
|
47
|
+
specification.end_time = specification.start_time + programmes[0].duration.seconds + specification.end_late_minutes.minutes
|
48
|
+
specification.save!
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def adjust_end_time_of_exceptions(specification, programmes, exceptions)
|
53
|
+
programmes.find_all {|p| matches_exception(p, exceptions) }.each do |programme|
|
54
|
+
exceptions_to_programme = exceptions_matching_programme(programme, exceptions)
|
55
|
+
exceptions_to_programme.each do |exception|
|
56
|
+
exception.end_time = exception.start_time + programmes[0].duration.seconds + specification.end_late_minutes.minutes
|
57
|
+
exception.save!
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
42
62
|
def matches_exception(programme, exceptions)
|
43
|
-
exceptions.
|
63
|
+
exceptions_matching_programme(programme, exceptions).length > 0
|
64
|
+
end
|
65
|
+
|
66
|
+
def exceptions_matching_programme(programme, exceptions)
|
67
|
+
exceptions.find_all do |exception|
|
44
68
|
programme.title == exception.title &&
|
45
69
|
programme.channel == exception.channel &&
|
46
70
|
programme.start_time == exception.start_time
|
data/lib/simple_pvr/version.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
/*!
|
2
|
-
* Bootstrap Responsive v2.1
|
2
|
+
* Bootstrap Responsive v2.3.1
|
3
3
|
*
|
4
4
|
* Copyright 2012 Twitter, Inc
|
5
5
|
* Licensed under the Apache License v2.0
|
6
6
|
* http://www.apache.org/licenses/LICENSE-2.0
|
7
7
|
*
|
8
8
|
* Designed and built with all the love in the world @twitter by @mdo and @fat.
|
9
|
-
*/.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;margin-left:0}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade.in{top:auto}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#555;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#555;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
|
9
|
+
*/.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
|