grandstand 0.2.1

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.
Files changed (151) hide show
  1. data/.gitignore +2 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +7 -0
  4. data/Rakefile +44 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/admin/galleries_controller.rb +52 -0
  7. data/app/controllers/admin/images_controller.rb +68 -0
  8. data/app/controllers/admin/main_controller.rb +36 -0
  9. data/app/controllers/admin/pages_controller.rb +51 -0
  10. data/app/controllers/admin/posts_controller.rb +48 -0
  11. data/app/controllers/admin/sessions_controller.rb +41 -0
  12. data/app/controllers/admin/templates_controller.rb +6 -0
  13. data/app/controllers/admin/users_controller.rb +48 -0
  14. data/app/controllers/galleries_controller.rb +5 -0
  15. data/app/controllers/pages_controller.rb +5 -0
  16. data/app/controllers/posts_controller.rb +5 -0
  17. data/app/helpers/admin/main_helper.rb +31 -0
  18. data/app/helpers/admin/pages_helper.rb +2 -0
  19. data/app/helpers/admin/posts_helper.rb +2 -0
  20. data/app/helpers/admin/sessions_helper.rb +2 -0
  21. data/app/helpers/admin/templates_helper.rb +2 -0
  22. data/app/helpers/admin/users_helper.rb +2 -0
  23. data/app/helpers/pages_helper.rb +2 -0
  24. data/app/helpers/posts_helper.rb +2 -0
  25. data/app/helpers/site_helper.rb +2 -0
  26. data/app/models/gallery.rb +22 -0
  27. data/app/models/image.rb +61 -0
  28. data/app/models/page.rb +45 -0
  29. data/app/models/page_section.rb +6 -0
  30. data/app/models/post.rb +27 -0
  31. data/app/models/template.rb +33 -0
  32. data/app/models/user.rb +68 -0
  33. data/app/stylesheets/_buttons.less +76 -0
  34. data/app/stylesheets/_dialogs.less +85 -0
  35. data/app/stylesheets/application.less +238 -0
  36. data/app/stylesheets/global.less +435 -0
  37. data/app/stylesheets/login.less +30 -0
  38. data/app/stylesheets/wysiwyg.less +96 -0
  39. data/app/views/admin/galleries/_form.html.erb +11 -0
  40. data/app/views/admin/galleries/_gallery.html.erb +16 -0
  41. data/app/views/admin/galleries/_list.html.erb +17 -0
  42. data/app/views/admin/galleries/delete.html.erb +8 -0
  43. data/app/views/admin/galleries/edit.html.erb +8 -0
  44. data/app/views/admin/galleries/editor.html.erb +13 -0
  45. data/app/views/admin/galleries/editor_with_images.html.erb +19 -0
  46. data/app/views/admin/galleries/index.html.erb +13 -0
  47. data/app/views/admin/galleries/new.html.erb +8 -0
  48. data/app/views/admin/galleries/show.html.erb +15 -0
  49. data/app/views/admin/images/_form.html.erb +11 -0
  50. data/app/views/admin/images/delete.html.erb +8 -0
  51. data/app/views/admin/images/edit.html.erb +8 -0
  52. data/app/views/admin/images/new.html.erb +8 -0
  53. data/app/views/admin/images/upload.html.erb +11 -0
  54. data/app/views/admin/main/index.html.erb +10 -0
  55. data/app/views/admin/pages/_form.html.erb +33 -0
  56. data/app/views/admin/pages/_left.html.erb +3 -0
  57. data/app/views/admin/pages/_row.html.erb +9 -0
  58. data/app/views/admin/pages/delete.html.erb +8 -0
  59. data/app/views/admin/pages/edit.html.erb +8 -0
  60. data/app/views/admin/pages/index.html.erb +20 -0
  61. data/app/views/admin/pages/new.html.erb +8 -0
  62. data/app/views/admin/pages/show.html.erb +3 -0
  63. data/app/views/admin/posts/_form.html.erb +29 -0
  64. data/app/views/admin/posts/_left.html.erb +3 -0
  65. data/app/views/admin/posts/_list.html.erb +22 -0
  66. data/app/views/admin/posts/delete.html.erb +9 -0
  67. data/app/views/admin/posts/edit.html.erb +10 -0
  68. data/app/views/admin/posts/index.html.erb +10 -0
  69. data/app/views/admin/posts/new.html.erb +10 -0
  70. data/app/views/admin/posts/show.html.erb +4 -0
  71. data/app/views/admin/sessions/forgot.html.erb +8 -0
  72. data/app/views/admin/sessions/show.html.erb +12 -0
  73. data/app/views/admin/shared/_flash.html.erb +3 -0
  74. data/app/views/admin/users/_form.html.erb +16 -0
  75. data/app/views/admin/users/_left.html.erb +3 -0
  76. data/app/views/admin/users/delete.html.erb +10 -0
  77. data/app/views/admin/users/edit.html.erb +8 -0
  78. data/app/views/admin/users/index.html.erb +22 -0
  79. data/app/views/admin/users/new.html.erb +8 -0
  80. data/app/views/admin/users/show.html.erb +12 -0
  81. data/app/views/galleries/index.html.erb +0 -0
  82. data/app/views/galleries/show.html.erb +12 -0
  83. data/app/views/layouts/admin.html.erb +80 -0
  84. data/app/views/layouts/admin_login.html.erb +17 -0
  85. data/app/views/layouts/admin_xhr.html.erb +3 -0
  86. data/app/views/pages/show.html.erb +8 -0
  87. data/app/views/posts/show.html.erb +3 -0
  88. data/app/views/shared/404.html.erb +5 -0
  89. data/app/views/shared/gallery.html +14 -0
  90. data/app/views/shared/image.html +1 -0
  91. data/app/views/shared/page.html +0 -0
  92. data/app/views/shared/post.html +3 -0
  93. data/grandstand.gemspec +189 -0
  94. data/lib/grandstand/application.rb +50 -0
  95. data/lib/grandstand/controller/development.rb +15 -0
  96. data/lib/grandstand/controller.rb +104 -0
  97. data/lib/grandstand/helper.rb +117 -0
  98. data/lib/grandstand/routes.rb +59 -0
  99. data/lib/grandstand/session.rb +25 -0
  100. data/lib/grandstand.rb +27 -0
  101. data/public/.DS_Store +0 -0
  102. data/public/admin/.DS_Store +0 -0
  103. data/public/admin/images/.DS_Store +0 -0
  104. data/public/admin/images/background-input.gif +0 -0
  105. data/public/admin/images/background-progress-bar.png +0 -0
  106. data/public/admin/images/background-progress-complete.gif +0 -0
  107. data/public/admin/images/background-progress.gif +0 -0
  108. data/public/admin/images/icons/.DS_Store +0 -0
  109. data/public/admin/images/icons/add.png +0 -0
  110. data/public/admin/images/icons/collapse.png +0 -0
  111. data/public/admin/images/icons/delete.png +0 -0
  112. data/public/admin/images/icons/edit.png +0 -0
  113. data/public/admin/images/icons/editor/bold.png +0 -0
  114. data/public/admin/images/icons/editor/gallery.png +0 -0
  115. data/public/admin/images/icons/editor/image-center.png +0 -0
  116. data/public/admin/images/icons/editor/image-left.png +0 -0
  117. data/public/admin/images/icons/editor/image-right.png +0 -0
  118. data/public/admin/images/icons/editor/image.png +0 -0
  119. data/public/admin/images/icons/editor/italic.png +0 -0
  120. data/public/admin/images/icons/editor/ordered-list.png +0 -0
  121. data/public/admin/images/icons/editor/quote.png +0 -0
  122. data/public/admin/images/icons/editor/source.png +0 -0
  123. data/public/admin/images/icons/editor/strikethrough.png +0 -0
  124. data/public/admin/images/icons/editor/underline.png +0 -0
  125. data/public/admin/images/icons/editor/unordered-list.png +0 -0
  126. data/public/admin/images/icons/error.png +0 -0
  127. data/public/admin/images/icons/expand.png +0 -0
  128. data/public/admin/images/icons/galleries.png +0 -0
  129. data/public/admin/images/icons/gallery.png +0 -0
  130. data/public/admin/images/icons/image.png +0 -0
  131. data/public/admin/images/icons/okay.png +0 -0
  132. data/public/admin/images/icons/pages.png +0 -0
  133. data/public/admin/images/icons/posts.png +0 -0
  134. data/public/admin/images/icons/upload.png +0 -0
  135. data/public/admin/images/icons/users.png +0 -0
  136. data/public/admin/images/logo.png +0 -0
  137. data/public/admin/images/spinner-dark.gif +0 -0
  138. data/public/admin/images/uploader.swf +0 -0
  139. data/public/admin/javascripts/application.js +231 -0
  140. data/public/admin/javascripts/jquery.js +404 -0
  141. data/public/admin/javascripts/mustache.js +324 -0
  142. data/public/admin/javascripts/selection.js +280 -0
  143. data/public/admin/javascripts/string.js +264 -0
  144. data/public/admin/javascripts/wysiwyg.js +335 -0
  145. data/public/admin/stylesheets/application.css +1 -0
  146. data/public/admin/stylesheets/global.css +1 -0
  147. data/public/admin/stylesheets/login.css +1 -0
  148. data/public/admin/stylesheets/wysiwyg-content.css +20 -0
  149. data/public/admin/stylesheets/wysiwyg.css +1 -0
  150. data/vendor/cache/more-0.1.1.gem +0 -0
  151. metadata +216 -0
@@ -0,0 +1,27 @@
1
+ class Post < ActiveRecord::Base
2
+ before_save :set_url
3
+ belongs_to :user
4
+ default_scope order('created_at DESC')
5
+
6
+ validates_presence_of :name, :message => 'Your post needs a name'
7
+ validates_uniqueness_of :name, :message => 'A post with that name already exists'
8
+
9
+ class << self
10
+ def extract_month(attribute)
11
+ "strftime('%m', #{attribute})"
12
+ end
13
+
14
+ def extract_year(attribute)
15
+ "strftime('%Y', #{attribute})"
16
+ end
17
+ end
18
+
19
+ # def to_param
20
+ # url
21
+ # end
22
+
23
+ protected
24
+ def set_url
25
+ self.url ||= name.parameterize
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ class Template
2
+ class << self
3
+ def [](name)
4
+ @templates ||= {}
5
+ @templates[name] ||= new(name)
6
+ end
7
+
8
+ protected
9
+ def method_missing(*args)
10
+ method = args.shift.to_sym
11
+ self[method].render
12
+ end
13
+ end
14
+
15
+ def initialize(name, body = nil)
16
+ @file = Dir[*ApplicationController.view_paths.map {|path| File.join(path.to_s, 'shared', "#{name}.html")}].find {|file| File.file?(file)}
17
+ if body
18
+ @body = body
19
+ elsif @file
20
+ @body = File.read(@file)
21
+ else
22
+ return false
23
+ end
24
+ end
25
+
26
+ def path
27
+ @file.freeze
28
+ end
29
+
30
+ def render
31
+ @body.freeze
32
+ end
33
+ end
@@ -0,0 +1,68 @@
1
+ class User < ActiveRecord::Base
2
+ attr_accessor :password
3
+ attr_accessible :email, :first_name, :last_name, :password, :password_confirmation
4
+
5
+ before_save :encrypt_password
6
+
7
+ default_scope :order => [:first_name, :last_name]
8
+
9
+ has_many :galleries
10
+ has_many :images
11
+ has_many :posts
12
+
13
+ validates_confirmation_of :password, :allow_nil => true
14
+ validates_presence_of :email
15
+ validates_uniqueness_of :email, :allow_nil => true
16
+
17
+ class << self
18
+ def authenticates_with(credentials)
19
+ password = credentials.delete(:password)
20
+ first(:conditions => credentials)
21
+ end
22
+ end
23
+
24
+ # Check whether or not a given password hashes out to this models'
25
+ # stored password.
26
+ def authenticates_with?(check_password)
27
+ encrypted_password == password_digest(check_password)
28
+ end
29
+
30
+ # Provides a mailto: formatted link to this users' e-mail address
31
+ def mailto
32
+ "mailto:#{email}"
33
+ end
34
+
35
+ # Creates a whitespace-cleaned combination of this users' first and
36
+ # last names
37
+ def name
38
+ return @name if @name
39
+ name = [first_name, last_name].reject(&:blank?).join(' ')
40
+ @name = name.blank? ? email : name
41
+ end
42
+
43
+ protected
44
+ # Store a models' salt and password fields. Salting ensures that
45
+ # identical passwords do not appear the same in the database. So
46
+ # if two people have "foobar" as their password, they'll be completely
47
+ # different. Helps prevent rainbow-style attackyness.
48
+ def encrypt_password
49
+ unless password.blank?
50
+ self.salt = Digest::SHA1.hexdigest([Time.now.to_s, (1..10).map{ rand.to_s }].join('--'))
51
+ self.encrypted_password = password_digest(password)
52
+ end
53
+ end
54
+
55
+ # Returns a hash of a given password string. Used both for storing
56
+ # passwords and authenticating later. The DIGEST_STRETCHES constant
57
+ # ensures passwords are hashed more than once - which prevents brute-
58
+ # force attacks from being even remotely efficient. Take that, hacker
59
+ # dickheads.
60
+ def password_digest(password)
61
+ password_digest = SITE_KEY
62
+ # Perform stretching per RESTful Authentication's guidelines
63
+ DIGEST_STRETCHES.times do
64
+ password_digest = Digest::SHA1.hexdigest([password_digest, salt, password, SITE_KEY].join('--'))
65
+ end
66
+ password_digest
67
+ end
68
+ end
@@ -0,0 +1,76 @@
1
+ /*
2
+ buttons.less contains all button styling. Button styling should be mixed-in
3
+ using #grandstand > .button-class to whatever elements need to look like buttons -
4
+ be they links, button tags, or menu items.
5
+ */
6
+ #grandstand {
7
+ .styled-toolbar {
8
+ background-color:#a7a7a7;
9
+ background-image:-moz-linear-gradient(top, #cacaca, #a7a7a7);
10
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#cacaca), to(#a7a7a7));
11
+ overflow:hidden;
12
+ padding:5px;
13
+ }
14
+
15
+ .button-default {
16
+ background-color:#ececec;
17
+ background-image:-moz-linear-gradient(top, #f4f4f4, #ececec);
18
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec));
19
+ border:1px solid #d4d4d4;
20
+ color:#333;
21
+ cursor:pointer;
22
+ display:inline-block;
23
+ font-size:12px;
24
+ font-weight:bold;
25
+ line-height:16px;
26
+ margin:0;
27
+ overflow:hidden;
28
+ padding:4px 10px;
29
+ text-decoration:none;
30
+ text-shadow:#fff 0 1px 0;
31
+ vertical-align:baseline;
32
+ vertical-align:middle;
33
+ -moz-border-radius:2px;
34
+ -webkit-border-radius:2px;
35
+ }
36
+
37
+ .button-hover {
38
+ background-color:#3072b3;
39
+ background-image:-moz-linear-gradient(top, #599bdc, #3072b3);
40
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3));
41
+ border-color:#518cc6;
42
+ border-bottom-color:#2a65a0;
43
+ color:#fff;
44
+ text-shadow:rgba(0, 0, 0, 0.4) 0 -1px 0;
45
+ }
46
+
47
+ .button-active {
48
+ background-color:#599bdc;
49
+ background-image:-moz-linear-gradient(top, #3072b3, #599bdc);
50
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#3072b3), to(#599bdc));
51
+ border-bottom-color:#518cc6;
52
+ border-top-color:#2a65a0;
53
+ -moz-box-shadow:inset rgba(0, 0, 0, 0.2) 0 0 1px;
54
+ -webkit-box-shadow:inset rgba(0, 0, 0, 0.2) 0 0 1px;
55
+ }
56
+
57
+ .button-grey {
58
+ background-color:#333;
59
+ background-image:-moz-linear-gradient(top, #333, #444);
60
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#444), to(#333));
61
+ border-color:#000;
62
+ color:#fff;
63
+ text-shadow:#000 0 -1px 0;
64
+ }
65
+
66
+ .button-grey-hover {
67
+ background-color:#444;
68
+ background-image:-moz-linear-gradient(top, #333, #444);
69
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#333), to(#444));
70
+ }
71
+
72
+ .button-grey-active {
73
+ -moz-box-shadow:inset rgba(0, 0, 0, 1) 0 0px 1px;
74
+ -webkit-box-shadow:inset rgba(0, 0, 0, 1) 0 0px 1px;
75
+ }
76
+ }
@@ -0,0 +1,85 @@
1
+ /*
2
+ dialogs.less contains the styling for drop-down dialogs in the WYSIWYG editor. Ideally,
3
+ it should be merged with the #pulldown styling from application.less to create something
4
+ a bit more seamless
5
+ */
6
+ .admin .wysiwyg .dialog {
7
+ > form {
8
+ background:#fff;
9
+ left:50%;
10
+ margin-left:-40%;
11
+ position:absolute;
12
+ top:0;
13
+ width:80%;
14
+ z-index:3;
15
+ -moz-border-radius-bottomleft:5px;
16
+ -moz-border-radius-bottomright:5px;
17
+ -moz-box-shadow:#444 0 2px 2px;
18
+ -webkit-border-bottom-left-radius:5px;
19
+ -webkit-border-bottom-right-radius:5px;
20
+ -webkit-box-shadow:#444 0 2px 2px;
21
+ }
22
+
23
+ .pad {
24
+ padding:10px;
25
+ }
26
+
27
+ .xhr, form, .source, .destination {
28
+ /* height:100%;*/
29
+ }
30
+
31
+ .source {
32
+ background:#d9dfe8;
33
+ border-right:1px solid #aaa;
34
+ float:left;
35
+ overflow-x:hidden;
36
+ overflow-y:auto;
37
+ width:200px;
38
+ -moz-border-radius-bottomleft:5px;
39
+ -webkit-border-bottom-left-radius:5px;
40
+
41
+ .header {
42
+ background-image:none !important;
43
+ border-width:0 !important;
44
+ color:#505d81;
45
+ font-weight:bold;
46
+ padding:10px 10px 5px 10px;
47
+ text-shadow:#f1f5f8 0 1px 0;
48
+ text-transform:uppercase;
49
+ }
50
+
51
+ a {
52
+ border-top:1px solid #d9dfe8;
53
+ color:#000;
54
+ display:block;
55
+ padding:5px 5px 5px 20px;
56
+ text-decoration:none;
57
+ }
58
+
59
+ a.active {
60
+ background:-webkit-gradient(linear, left top, left bottom, from(#63a4e2), to(#0066c0));
61
+ border-top:1px solid #4691d6;
62
+ color:#fff;
63
+ text-shadow:#000 0 1px 0;
64
+ }
65
+ }
66
+
67
+ .destination {
68
+ margin-left:201px;
69
+ }
70
+
71
+ .image {
72
+ cursor:pointer;
73
+ }
74
+
75
+ .scrollable {
76
+ /* height:100%;*/
77
+ overflow-x:hidden;
78
+ overflow-y:auto;
79
+ padding:10px 0;
80
+ width:100%;
81
+ -moz-box-sizing:border-box;
82
+ -ms-box-sizing:border-box;
83
+ -webkit-box-sizing:border-box;
84
+ }
85
+ }
@@ -0,0 +1,238 @@
1
+ /*
2
+ application.less contains all of the layout elements for the logged-in application state. This is styling
3
+ for the editor UI ONLY. It relies heavily on global.less, which provides all form element styling and much
4
+ of the generic UI found in the app - including during inline editing and the like.
5
+ */
6
+ @import url('_buttons');
7
+
8
+ /* Layout Elements */
9
+
10
+ body {
11
+ overflow:hidden;
12
+ }
13
+
14
+ #header {
15
+ background-color:#eee;
16
+ background-image:-moz-linear-gradient(top, #eee, #ddd);
17
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#eee), to(#ddd));
18
+ border-bottom:1px solid #eee;
19
+ border-top:1px solid #fff;
20
+ height:32px;
21
+ left:0;
22
+ padding:0 10px;
23
+ position:absolute;
24
+ width:100%;
25
+ z-index:2;
26
+ box-sizing:border-box;
27
+ -moz-box-sizing:border-box;
28
+ -ms-box-sizing:border-box;
29
+ -webkit-box-sizing:border-box;
30
+ -moz-box-shadow:#111 0 2px 2px;
31
+ -webkit-box-shadow:#999 0 1px 2px;
32
+
33
+ .float-right {
34
+ line-height:30px;
35
+ /* margin-top:11px;*/
36
+ }
37
+
38
+ .float-right a {
39
+ color:#000;
40
+ display:inline-block;
41
+ padding:0 7px;
42
+ }
43
+
44
+ .float-right a:hover {
45
+ background-color:rgba(255, 255, 255, 0.3);
46
+ text-decoration:underline;
47
+ }
48
+ }
49
+
50
+ #logo {
51
+ display:inline-block;
52
+ padding-top:0;
53
+ }
54
+
55
+ #content {
56
+ height:100%;
57
+ overflow:hidden;
58
+ padding:31px 0 0 0;
59
+ position:absolute;
60
+ width:100%;
61
+ box-sizing:border-box;
62
+ -moz-box-sizing:border-box;
63
+ -ms-box-sizing:border-box;
64
+ -webkit-box-sizing:border-box;
65
+ }
66
+
67
+ #left {
68
+ left:20px;
69
+ position:absolute;
70
+ top:51px;
71
+ width:150px;
72
+
73
+ .button {
74
+ display:block;
75
+ margin-bottom:10px;
76
+ }
77
+
78
+ ul {
79
+ background-color:#ececec;
80
+ background-image:-moz-linear-gradient(top, #f4f4f4, #ececec);
81
+ background-image:-webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec));
82
+ list-style-type:none;
83
+ margin:0;
84
+ padding:0;
85
+ -moz-border-radius:2px;
86
+ -webkit-border-radius:2px;
87
+
88
+ li.first {
89
+ > a {
90
+ border-top-color:#d4d4d4;
91
+ -webkit-border-top-left-radius:2px;
92
+ }
93
+
94
+ a.expand {
95
+ -webkit-border-top-left-radius:0;
96
+ -webkit-border-top-right-radius:2px;
97
+ }
98
+ }
99
+
100
+ li {
101
+ margin:0;
102
+ padding:0;
103
+
104
+ a {
105
+ #grandstand > .button-default;
106
+ border-top-color:#f4f4f4;
107
+ display:block;
108
+ padding:5px;
109
+ -moz-border-radius:0;
110
+ -webkit-border-radius:0;
111
+ }
112
+
113
+ a:hover {
114
+ #grandstand > .button-hover;
115
+ }
116
+
117
+ a:active {
118
+ #grandstand > .button-active;
119
+ }
120
+
121
+ a.expand {
122
+ float:right;
123
+ margin-right:0;
124
+ height:26px;
125
+ line-height:26px;
126
+ padding:0;
127
+ width:15px;
128
+
129
+ span {
130
+ background:url(../images/icons/expand.png) center bottom no-repeat;
131
+ display:block;
132
+ height:16px;
133
+ margin-top:4px;
134
+ width:16px;
135
+ }
136
+ }
137
+
138
+ ul {
139
+ display:none;
140
+
141
+ li a {
142
+ font-size:10px;
143
+ padding-left:20px;
144
+ }
145
+ }
146
+ }
147
+
148
+ li.expandable {
149
+ > a {
150
+ border-right-width:0;
151
+ }
152
+
153
+ > a.expand {
154
+ border-right-width:1px;
155
+ }
156
+ }
157
+
158
+ li.last a {
159
+ -webkit-border-bottom-left-radius:2px;
160
+ -webkit-border-bottom-right-radius:2px;
161
+ }
162
+
163
+ li.expanded {
164
+ a.expand span {
165
+ background-image:url(../images/icons/collapse.png);
166
+ }
167
+
168
+ ul {
169
+ display:block;
170
+ }
171
+ }
172
+ }
173
+ }
174
+
175
+ #main {
176
+ height:100%;
177
+ padding:20px 20px 20px 190px;
178
+ overflow-x:hidden;
179
+ overflow-y:auto;
180
+ box-sizing:border-box;
181
+ -moz-box-sizing:border-box;
182
+ -ms-box-sizing:border-box;
183
+ -webkit-box-sizing:border-box;
184
+ }
185
+
186
+ #cover {
187
+ background-color:#000;
188
+ height:100%;
189
+ left:0;
190
+ opacity:0.6;
191
+ position:fixed;
192
+ top:0;
193
+ width:100%;
194
+ z-index:2;
195
+ }
196
+
197
+ #pulldown {
198
+ left:50%;
199
+ margin-left:-200px;
200
+ position:fixed;
201
+ top:0;
202
+ width:400px;
203
+ z-index:3;
204
+
205
+ h2 {
206
+ background:#fafafa;
207
+ border-bottom:1px solid #ddd;
208
+ color:#555;
209
+ font-size:10pt;
210
+ margin-bottom:0;
211
+ padding:5px;
212
+ text-shadow:#fff 0 1px 0;
213
+ }
214
+
215
+ form {
216
+ border-top:1px solid #fff;
217
+ margin:0;
218
+ }
219
+
220
+ form .field {
221
+ background:#f0f0f0;
222
+ padding:10px;
223
+ }
224
+
225
+ .toolbar {
226
+ #grandstand > .styled-toolbar;
227
+ border-top:1px solid #888;
228
+ text-align:right;
229
+ -moz-border-radius-bottomleft:5px;
230
+ -moz-border-radius-bottomright:5px;
231
+ -webkit-border-bottom-left-radius:5px;
232
+ -webkit-border-bottom-right-radius:5px;
233
+
234
+ .button {
235
+ border-color:#888;
236
+ }
237
+ }
238
+ }