simple_pvr 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: [](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}}
|