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 ADDED
@@ -0,0 +1,8 @@
1
+ .DS_Store
2
+ /channels.txt
3
+ channel_mappings.yaml
4
+ *.sqlite
5
+ tvgrabbed.xmltv
6
+ *.gem
7
+ .bundle
8
+ recordings
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ before_install:
5
+ - "export DISPLAY=:99.0"
6
+ - "sh -e /etc/init.d/xvfb start"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_pvr (0.0.3)
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 (1.1.2)
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.1.4)
28
- childprocess (0.3.5)
29
- ffi (~> 1.0, >= 1.0.6)
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
- ffi (1.1.5)
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
- libwebsocket (0.1.5)
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.1)
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.25.0)
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
- xpath (0.1.4)
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 (~> 1.1)
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
- What?
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. Instead, there'll be a little clean-up:
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 a GUI.
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 and features along with the JavaScript unit tests.
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
- For the JavaScript tests to run, first install [Testacular](http://testacular.github.com/0.6.0/index.html).
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
- testacular start test/testacular.conf.js
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
@@ -9,7 +9,7 @@ namespace :test do
9
9
  RSpec::Core::RakeTask.new(:spec)
10
10
  Cucumber::Rake::Task.new(:features)
11
11
  task :javascript do
12
- sh 'testacular start test/testacular.conf.js --singleRun'
12
+ sh 'karma start test/karma.conf.js --singleRun'
13
13
  end
14
14
  end
15
15
 
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rack'
4
+ require File.dirname(__FILE__) + '/lib/simple_pvr'
5
+
6
+ Rack::Server.start(
7
+ :config => SimplePvr::PvrInitializer.rackup_file_path,
8
+ :Port => 4567,
9
+ :server => 'puma'
10
+ )
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)
@@ -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 follow "Delete"
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 follow "Delete"
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 follow "Do not record this specific show"
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
- click_link(title)
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.wait_until { page.text.include? suggestion }
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.wait_until { page.text.include? text }
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.wait_until { page.text.include? text }
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.wait_until { page.text =~ /#{text} .* \d+, \d{4} at \d?\d:\d\d/ }
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.wait_until { !(page.text.include? text) }
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
- page.wait_until { page.has_no_button?(text) }
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
- page.wait_until { find('#upcoming_recordings').all('h2').length == upcoming_recordings.to_i }
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.wait_until { page.text.include? '(Conflicting)' }
133
+ page.should have_text('(Conflicting)')
98
134
  end
99
135
 
100
136
  Then /^there should be no conflicts$/ do
101
- page.wait_until { !(page.text.include? '(Conflicting)') }
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.wait_until { page.text.include? 'This programme is being recorded' }
151
+ page.should have_text('This programme is being recorded')
116
152
  end
@@ -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 = :selenium
13
- Capybara.default_wait_time = 5
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]
@@ -16,7 +16,7 @@ module SimplePvr
16
16
 
17
17
  def episodes_of(show_name)
18
18
  episodes = Dir.new(directory_for_show(show_name)).entries - ['.', '..']
19
- episodes.map do |episode|
19
+ episodes.sort.map do |episode|
20
20
  metadata_for(show_name, episode)
21
21
  end
22
22
  end
@@ -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.any? do |exception|
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
@@ -1,3 +1,3 @@
1
1
  module SimplePvr
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Bootstrap Responsive v2.1.0
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}}