vines-services 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/Gemfile +3 -0
  2. data/{README → README.md} +19 -9
  3. data/Rakefile +20 -113
  4. data/{web/coffeescripts → app/assets/javascripts}/api.coffee +1 -1
  5. data/{web/coffeescripts/init.coffee → app/assets/javascripts/application.coffee} +9 -0
  6. data/{web/coffeescripts → app/assets/javascripts}/commands.coffee +1 -1
  7. data/{web/coffeescripts → app/assets/javascripts}/files.coffee +1 -1
  8. data/{web/coffeescripts → app/assets/javascripts}/services.coffee +1 -1
  9. data/{web/coffeescripts → app/assets/javascripts}/setup.coffee +1 -1
  10. data/{web/coffeescripts → app/assets/javascripts}/systems.coffee +1 -1
  11. data/app/assets/stylesheets/application.css +9 -0
  12. data/{web → app/assets}/stylesheets/common.css +0 -0
  13. data/{web → app/assets}/stylesheets/files.css +0 -0
  14. data/{web → app/assets}/stylesheets/services.css +0 -0
  15. data/{web → app/assets}/stylesheets/setup.css +0 -0
  16. data/{web → app/assets}/stylesheets/systems.css +0 -0
  17. data/config.ru +12 -0
  18. data/lib/vines/services/command/init.rb +4 -1
  19. data/lib/vines/services/version.rb +1 -1
  20. data/{web/stylesheets/app.css → public/assets/application.css} +854 -395
  21. data/public/assets/application.js +10 -0
  22. data/{web → public}/images/default-service.png +0 -0
  23. data/{web → public}/images/linux.png +0 -0
  24. data/{web → public}/images/mac.png +0 -0
  25. data/{web → public}/images/run.png +0 -0
  26. data/{web → public}/images/windows.png +0 -0
  27. data/public/index.html +13 -0
  28. data/test/config_test.rb +1 -1
  29. data/test/priority_queue_test.rb +1 -1
  30. data/test/storage/couchdb_test.rb +1 -1
  31. data/test/vql/compiler_test.rb +1 -1
  32. data/test/vql/vql_test.rb +1 -1
  33. data/vines-services.gemspec +44 -0
  34. metadata +233 -59
  35. data/web/index.html +0 -17
  36. data/web/javascripts/api.js +0 -69
  37. data/web/javascripts/app.js +0 -2
  38. data/web/javascripts/commands.js +0 -28
  39. data/web/javascripts/files.js +0 -424
  40. data/web/javascripts/init.js +0 -27
  41. data/web/javascripts/services.js +0 -409
  42. data/web/javascripts/setup.js +0 -507
  43. data/web/javascripts/systems.js +0 -391
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -1,4 +1,4 @@
1
- == Welcome to Vines Services
1
+ # Welcome to Vines Services
2
2
 
3
3
  Vines Services are dynamically updated groups of systems based on criteria like
4
4
  hostname, installed software, operating system, etc. Send a command to the
@@ -13,22 +13,32 @@ be managed as one group.
13
13
 
14
14
  Additional documentation can be found at www.getvines.org.
15
15
 
16
- == Usage
16
+ ## Usage
17
17
 
18
- 1. gem install vines-services
19
- 2. vines-services init wonderland.lit
20
- 3. cd wonderland.lit && vines-services start
18
+ ```
19
+ $ gem install vines-services
20
+ $ vines-services init wonderland.lit
21
+ $ cd wonderland.lit && vines-services start
22
+ ```
21
23
 
22
- == Dependencies
24
+ ## Dependencies
23
25
 
24
- Vines Services requires Ruby 1.9.2 or better. Instructions for installing the
26
+ Vines Services requires Ruby 1.9.3 or better. Instructions for installing the
25
27
  needed OS packages, as well as Ruby itself, are available at
26
28
  http://www.getvines.org/ruby.
27
29
 
28
- == Contact
30
+ ## Development
31
+
32
+ ```
33
+ $ script/bootstrap
34
+ $ script/tests
35
+ $ script/server
36
+ ```
37
+
38
+ ## Contact
29
39
 
30
40
  * David Graham <david@negativecode.com>
31
41
 
32
- == License
42
+ ## License
33
43
 
34
44
  Vines Services is released under the MIT license. Check the LICENSE file for details.
data/Rakefile CHANGED
@@ -1,50 +1,15 @@
1
1
  require 'rake'
2
2
  require 'rake/clean'
3
3
  require 'rake/testtask'
4
- require 'rubygems/package_task'
5
- require 'nokogiri'
6
- require_relative 'lib/vines/services/version'
4
+ require './lib/vines/services/version'
7
5
 
8
- CLOBBER.include('pkg', 'web/javascripts', 'web/stylesheets/app.css')
6
+ CLOBBER.include('pkg', 'public/assets')
9
7
 
10
- spec = Gem::Specification.new do |s|
11
- s.name = "vines-services"
12
- s.version = Vines::Services::VERSION
8
+ directory 'pkg'
13
9
 
14
- s.summary = "An XMPP component that broadcasts shell commands to many agents."
15
- s.description = "Vines Services are dynamically updated groups of systems based
16
- on criteria like hostname, installed software, operating system, etc. Send a
17
- command to the service and it runs on every system in the group. Services, files
18
- and permissions are managed via the bundled web application."
19
-
20
- s.authors = ["David Graham"]
21
- s.email = %w[david@negativecode.com]
22
- s.homepage = "http://www.getvines.org"
23
-
24
- s.test_files = FileList["test/**/*"]
25
- s.executables = %w[vines-services]
26
- s.require_path = "lib"
27
-
28
- s.add_dependency "bcrypt-ruby", "~> 3.0.1"
29
- s.add_dependency "blather", "~> 0.5.12"
30
- s.add_dependency "citrus", "~> 2.4.0"
31
- s.add_dependency "couchrest_model", "~> 1.1.2"
32
- s.add_dependency "em-http-request", "~> 1.0.1"
33
- s.add_dependency "sqlite3", "~> 1.3.5"
34
- s.add_dependency "vines", ">= 0.4.0"
35
-
36
- s.add_development_dependency "minitest"
37
- s.add_development_dependency "rake"
38
-
39
- s.required_ruby_version = '>= 1.9.2'
40
- end
41
-
42
- # Set gem file list after CoffeeScripts have been compiled, so web/javascripts/
43
- # is included in the gem.
44
- task :gemprep do
45
- spec.files = FileList['[A-Z]*', '{bin,lib,conf,web}/**/*']
46
- Gem::PackageTask.new(spec).define
47
- Rake::Task['gem'].invoke
10
+ desc 'Build distributable packages'
11
+ task :build => [:pkg, :assets] do
12
+ system 'gem build vines-services.gemspec && mv vines-*.gem pkg/'
48
13
  end
49
14
 
50
15
  Rake::TestTask.new(:test) do |test|
@@ -53,80 +18,22 @@ Rake::TestTask.new(:test) do |test|
53
18
  test.warning = false
54
19
  end
55
20
 
56
- # Return an array of local, non-library, js includes.
57
- def scripts(doc)
58
- scripts = []
59
- doc.css('script').each do |node|
60
- file = node['src'].split('/').last()
61
- if node['src'].start_with?('javascripts/')
62
- scripts << file
63
- end
64
- end
65
- scripts
66
- end
67
-
68
- # Replace script tags with combined and minimized files.
69
- def rewrite_js(doc)
70
- doc.css('script').each {|node| node.remove }
71
- doc.css('head').each do |node|
72
- %w[/lib/javascripts/base.js javascripts/app.js].each do |src|
73
- script = doc.create_element('script',
74
- 'type' => 'text/javascript',
75
- 'src' => src)
76
- node.add_child(script)
77
- node.add_child(doc.create_text_node("\n"))
78
- end
79
- end
80
- end
21
+ desc 'Compile web assets'
22
+ task :assets do
23
+ require 'sprockets'
24
+ require 'vines/web'
81
25
 
82
- def stylesheets(doc)
83
- sheets = []
84
- doc.css('link[rel="stylesheet"]').each do |node|
85
- file = node['href'].split('/').last()
86
- if node['href'].start_with?('stylesheets/')
87
- sheets << file
88
- end
89
- end
90
- sheets
91
- end
26
+ env = Sprockets::Environment.new
27
+ env.cache = Sprockets::Cache::FileStore.new(Dir.tmpdir)
28
+ env.append_path 'app/assets/javascripts'
29
+ env.append_path 'app/assets/stylesheets'
30
+ Vines::Web.paths.each {|path| env.append_path path }
31
+ env.js_compressor = :uglifier
92
32
 
93
- def rewrite_css(doc)
94
- doc.css('link[rel="stylesheet"]').each {|node| node.remove }
95
- doc.css('head').each do |node|
96
- %w[/lib/stylesheets/base.css /lib/stylesheets/login.css stylesheets/app.css].each do |file|
97
- link = doc.create_element('link',
98
- 'rel' => 'stylesheet',
99
- 'href' => file)
100
- node.add_child(link)
101
- node.add_child(doc.create_text_node("\n"))
102
- end
33
+ assets = %w[application.js application.css]
34
+ assets.each do |asset|
35
+ env[asset].write_to "public/assets/#{asset}"
103
36
  end
104
37
  end
105
38
 
106
- task :compile do
107
- index = 'web/index.html'
108
- doc = Nokogiri::HTML(File.read(index))
109
- scripts, sheets = scripts(doc), stylesheets(doc)
110
-
111
- rewrite_js(doc)
112
- rewrite_css(doc)
113
-
114
- # save index.html before rewriting
115
- FileUtils.cp(index, '/tmp/index.html')
116
- File.open(index, 'w') {|f| f.write(doc.to_xml(:indent => 2)) }
117
-
118
- js_files = scripts.map {|f| "web/javascripts/#{f}"}.join(' ')
119
- css_files = sheets.map {|f| "web/stylesheets/#{f}"}.join(' ')
120
-
121
- sh %{coffee -c -b -o web/javascripts web/coffeescripts/*.coffee}
122
- sh %{cat #{js_files} | uglifyjs -nc > web/javascripts/app.js}
123
- sh %{cat #{css_files} > web/stylesheets/app.css}
124
- end
125
-
126
- task :cleanup do
127
- # move index.html back into place after gem packaging
128
- FileUtils.cp('/tmp/index.html', 'web/index.html')
129
- File.delete('/tmp/index.html')
130
- end
131
-
132
- task :default => [:clobber, :test, :compile, :gemprep, :cleanup]
39
+ task :default => [:clobber, :test, :build]
@@ -1,4 +1,4 @@
1
- class Api
1
+ class @Api
2
2
  USERS = 'http://getvines.com/protocol/users'
3
3
 
4
4
  constructor: (@session) ->
@@ -1,3 +1,12 @@
1
+ #= require vendor
2
+ #= require lib
3
+ #= require api
4
+ #= require commands
5
+ #= require systems
6
+ #= require services
7
+ #= require files
8
+ #= require setup
9
+
1
10
  $ ->
2
11
  session = new Session()
3
12
  nav = new NavBar(session)
@@ -1,4 +1,4 @@
1
- class Commands
1
+ class @Commands
2
2
  constructor: ->
3
3
  @buf = []
4
4
  @index = 0
@@ -1,4 +1,4 @@
1
- class FilesPage
1
+ class @FilesPage
2
2
  FILES = 'http://getvines.com/protocol/files'
3
3
  LABELS = 'http://getvines.com/protocol/files/labels'
4
4
 
@@ -1,4 +1,4 @@
1
- class ServicesPage
1
+ class @ServicesPage
2
2
  SERVICES = 'http://getvines.com/protocol/services'
3
3
  MEMBERS = 'http://getvines.com/protocol/services/members'
4
4
  SYSTEMS = 'http://getvines.com/protocol/systems'
@@ -1,4 +1,4 @@
1
- class SetupPage
1
+ class @SetupPage
2
2
  SERVICES = 'http://getvines.com/protocol/services'
3
3
  SYSTEMS = 'http://getvines.com/protocol/systems'
4
4
  USERS = 'http://getvines.com/protocol/users'
@@ -1,4 +1,4 @@
1
- class SystemsPage
1
+ class @SystemsPage
2
2
  constructor: (@session) ->
3
3
  @session.onRoster ( ) => this.roster()
4
4
  @session.onMessage (m) => this.message(m)
@@ -0,0 +1,9 @@
1
+ /*
2
+ *= require base
3
+ *= require login
4
+ *= require common
5
+ *= require files
6
+ *= require services
7
+ *= require setup
8
+ *= require systems
9
+ */
File without changes
File without changes
File without changes
File without changes
File without changes
data/config.ru ADDED
@@ -0,0 +1,12 @@
1
+ require 'sprockets'
2
+ require 'vines/web'
3
+
4
+ use Rack::Static, urls: ['/images'], root: 'public', index: 'index.html'
5
+
6
+ map '/assets' do
7
+ env = Sprockets::Environment.new
8
+ env.append_path 'app/assets/javascripts'
9
+ env.append_path 'app/assets/stylesheets'
10
+ Vines::Web.paths.each {|path| env.append_path path }
11
+ run env
12
+ end
@@ -39,8 +39,11 @@ module Vines
39
39
  FileUtils.mv(Dir.glob("#{@domain}/*"), '.')
40
40
  FileUtils.remove_dir(@domain)
41
41
  FileUtils.remove_dir('data')
42
- web = File.expand_path("../../../../../web", __FILE__)
42
+
43
+ `vines-web install web`
44
+ web = File.expand_path("../../../../../public", __FILE__)
43
45
  FileUtils.cp_r(Dir.glob("#{web}/*"), 'web')
46
+
44
47
  update_server_config('conf/config.rb')
45
48
  `vines start -d`
46
49
  puts "Started vines server: vines start -d"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Vines
4
4
  module Services
5
- VERSION = '0.1.3'
5
+ VERSION = '0.1.4'
6
6
  end
7
7
  end
@@ -1,407 +1,510 @@
1
- #editor-buttons {
2
- background: #f8f8f8;
3
- border-top: 1px solid #dfdfdf;
4
- height: 50px;
5
- position: absolute;
6
- bottom: 0;
7
- width: 100%;
8
- }
9
- #editor-buttons {
10
- text-align: right;
11
- }
12
- #editor-buttons #save {
13
- position: relative;
14
- right: 10px;
15
- top: 10px;
16
- }
17
- form.sections h2 {
18
- background: none;
1
+ * {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ html, body {
6
+ height: 100%;
7
+ overflow: hidden; }
8
+
9
+ body {
10
+ color: #222;
11
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
12
+ font-size: 10pt;
13
+ line-height: 20pt; }
14
+
15
+ input[type="text"],
16
+ input[type="email"],
17
+ input[type="password"],
18
+ textarea {
19
+ border-radius: 2px;
19
20
  border: none;
20
- padding-left: 0;
21
- }
22
- form.sections label {
23
- display: block;
21
+ box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.2);
22
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
23
+ font-size: 10pt;
24
+ outline: none;
25
+ padding: 6px; }
26
+
27
+ /* ipad */
28
+ @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
29
+ input[type="text"],
30
+ input[type="email"],
31
+ input[type="password"],
32
+ textarea {
33
+ border: 1px solid #eee; } }
34
+ input[type="text"]:focus,
35
+ input[type="email"]:focus,
36
+ input[type="password"]:focus,
37
+ textarea:focus {
38
+ box-shadow: inset 1px 1px 2px rgba(0, 0, 0, 0.6); }
39
+
40
+ input[type="button"],
41
+ input[type="submit"] {
42
+ background: -moz-linear-gradient(#ececec, gainsboro);
43
+ background: -ms-linear-gradient(#ececec, gainsboro);
44
+ background: -o-linear-gradient(#ececec, gainsboro);
45
+ background: -webkit-linear-gradient(#ececec, gainsboro);
46
+ border: 1px solid #ccc;
47
+ border-radius: 3px;
48
+ box-shadow: 0 1px 1px white, inset 0 1px 1px rgba(255, 255, 255, 0.5);
49
+ color: #222;
50
+ cursor: pointer;
51
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
52
+ font-size: 13px;
24
53
  font-weight: bold;
25
- font-size: 9pt;
26
- color: rgba(0,0,0,0.8);
27
- margin: 10px 0 -2px 0;
28
- }
29
- form.sections input[type="text"],
30
- form.sections input[type="email"],
31
- form.sections input[type="password"],
32
- form.sections textarea {
33
- width: 90%;
34
- }
35
- form.sections section {
36
- border-bottom: 1px solid #ddd;
37
- margin: 0 20px;
38
- }
39
- form.sections section fieldset {
40
- padding-left: 30%;
41
- margin-top: -33px;
42
- margin-bottom: 10px;
43
- }
44
- form.sections section:last-child {
45
- border-bottom: none;
46
- margin-bottom: 20px;
47
- }
48
- form.sections .error {
49
- color: #dd2828;
50
- font-size: 8pt;
51
- width: 89%;
52
- }
53
- .hint {
54
- color: #aaa;
55
- font-size: 8pt;
54
+ height: 27px;
56
55
  line-height: 1;
57
- margin-top: 3px;
58
- }
59
- #systems-page #container {
60
- height: 100%;
61
- }
62
- #systems-page #alpha {
63
- background: #fff;
64
- box-shadow: none;
65
- left: 0;
66
- }
67
- #systems-page #blank-slate {
68
- margin-top: -65px;
69
- margin-left: -215px;
70
- text-align: center;
71
- width: 430px;
56
+ padding: 0 20px;
57
+ margin-bottom: 10px;
58
+ margin-left: 7px;
59
+ text-shadow: 0 1px 1px #fff; }
60
+
61
+ input[type="submit"] {
62
+ background: #8dd2f7;
63
+ background: -moz-linear-gradient(#8dd2f7, #58b8f4);
64
+ background: -ms-linear-gradient(#8dd2f7, #58b8f4);
65
+ background: -o-linear-gradient(#8dd2f7, #58b8f4);
66
+ background: -webkit-linear-gradient(#8dd2f7, #58b8f4);
67
+ border: 1px solid #448ccd;
68
+ border-top: 1px solid #5da8db;
69
+ color: #0d4078;
70
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.4); }
71
+
72
+ input[type="button"]:active,
73
+ input[type="submit"]:active {
74
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.8);
75
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); }
76
+
77
+ input[type="button"].cancel,
78
+ input[type="submit"].cancel {
79
+ background: #ff3137;
80
+ background: -moz-linear-gradient(#ff3137, #dd2828);
81
+ background: -ms-linear-gradient(#ff3137, #dd2828);
82
+ background: -o-linear-gradient(#ff3137, #dd2828);
83
+ background: -webkit-linear-gradient(#ff3137, #dd2828);
84
+ border: 1px solid #981a1a;
85
+ border-top: 1px solid #ac1f23;
86
+ color: #4a0f11; }
87
+
88
+ fieldset {
89
+ border: none; }
90
+
91
+ optgroup {
92
+ font-style: normal; }
93
+
94
+ optgroup option {
95
+ padding-left: 20px; }
96
+
97
+ #container {
98
+ position: relative; }
99
+
100
+ #navbar {
101
+ background: #0c1a2d;
102
+ background: -moz-linear-gradient(#1e4171, #0c1a2d);
103
+ background: -ms-linear-gradient(#1e4171, #0c1a2d);
104
+ background: -o-linear-gradient(#1e4171, #0c1a2d);
105
+ background: -webkit-linear-gradient(#1e4171, #0c1a2d);
106
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
107
+ box-shadow: 0 0 3px 1px #222;
108
+ color: #bdd5ff;
109
+ height: 60px;
110
+ position: relative;
111
+ text-shadow: 0 1px 1px #000, 0 0 1px #fff;
112
+ z-index: 10; }
113
+
114
+ #navbar #logo {
115
+ background: url(../images/logo-small.png) no-repeat;
116
+ color: transparent;
117
+ height: 40px;
118
+ opacity: 0.2;
72
119
  position: absolute;
73
- top: 50%;
74
- left: 50%;
75
- }
76
- #systems-page #blank-slate p {
77
- color: rgba(0, 0, 0, 0.3);
78
- font-size: 12pt;
79
- margin-bottom: 20px;
80
- }
81
- #systems-page #messages {
82
- list-style: none;
83
- width: 100%;
84
- }
85
- #systems-page #messages li {
86
- padding: 0 10px;
120
+ top: 10px;
121
+ right: 10px;
122
+ width: 125px;
123
+ text-shadow: none; }
124
+
125
+ #navbar #current-user {
126
+ height: 50px;
127
+ width: 240px;
87
128
  position: relative;
88
- }
89
- #systems-page #messages li:first-child {
90
- padding-top: 10px;
91
- }
92
- #systems-page #messages li:hover > span .time {
93
- opacity: 0.3;
94
- }
95
- #systems-page #messages li pre,
96
- #systems-page #messages li footer {
97
- font-family: Menlo, monospace;
98
- font-size: 11px;
99
- line-height: 1.3;
100
- word-wrap: break-word;
101
- }
102
- #systems-page #messages li footer {
129
+ top: 5px;
130
+ left: 10px; }
131
+
132
+ #navbar #current-user-avatar {
133
+ border: 1px solid rgba(255, 255, 255, 0.1);
134
+ box-shadow: 0 0 1px 0px #bdd5ff;
135
+ height: 48px;
136
+ width: 48px; }
137
+
138
+ #navbar #current-user-info {
139
+ position: relative;
140
+ top: -60px;
141
+ left: 58px; }
142
+
143
+ #navbar #current-user-name {
144
+ font-size: 10pt;
145
+ font-weight: normal;
146
+ line-height: 1.7;
147
+ overflow: hidden;
148
+ text-overflow: ellipsis;
149
+ width: 180px; }
150
+
151
+ #navbar #current-user-presence-form .select {
152
+ background: rgba(255, 255, 255, 0.2);
153
+ border: 1px solid rgba(255, 255, 255, 0.1);
154
+ border-radius: 30px;
155
+ color: rgba(255, 255, 255, 0.8);
156
+ line-height: 16px; }
157
+
158
+ #navbar #current-user-presence {
159
+ border: 1px solid; }
160
+
161
+ #navbar #app-nav {
162
+ height: 100%;
163
+ overflow: hidden;
164
+ position: absolute;
165
+ left: 260px;
166
+ top: 0;
167
+ width: 600px; }
168
+
169
+ #navbar #nav-links {
170
+ height: 100%; }
171
+
172
+ #navbar #nav-links li {
173
+ border-left: 1px solid transparent;
174
+ border-right: 1px solid transparent;
175
+ color: rgba(255, 255, 255, 0.8);
176
+ display: inline-block;
177
+ font-family: "Trebuchet MS", "Helvetica Neue", Helvetica, sans-serif;
103
178
  font-weight: bold;
104
- }
105
- #systems-page #message-form {
106
- height: 21px;
179
+ font-size: 11px;
180
+ height: 100%;
181
+ min-width: 100px;
107
182
  line-height: 1;
183
+ list-style: none;
184
+ text-align: center;
185
+ text-transform: uppercase; }
186
+
187
+ #navbar #nav-links li:hover,
188
+ #navbar #nav-links li.selected {
189
+ background: rgba(255, 255, 255, 0.1);
190
+ border-left: 1px solid rgba(255, 255, 255, 0.15);
191
+ border-right: 1px solid rgba(255, 255, 255, 0.15); }
192
+
193
+ #navbar #nav-links li a {
194
+ color: inherit;
195
+ display: inline-block;
196
+ height: 100%;
197
+ line-height: 60px;
108
198
  position: relative;
109
- width: 100%;
110
- }
111
- #systems-page #message-label {
112
- background: transparent;
113
- cursor: pointer;
114
- font-family: Menlo, monospace;
115
- font-size: 11px;
116
- padding: 0 2px 0 10px;
117
- }
118
- #systems-page #message-label::after {
119
- margin: 0;
120
- content: '$';
121
- }
122
- #systems-page #message-label:hover {
123
- text-decoration: underline;
124
- }
125
- #systems-page #message {
126
- box-shadow: none;
199
+ text-decoration: none;
200
+ width: 100%; }
201
+
202
+ #navbar #nav-links li a svg {
203
+ height: 32px;
204
+ width: 32px;
205
+ position: absolute !important;
206
+ left: 33px;
207
+ top: 4px; }
208
+
209
+ #navbar #nav-links li a span {
210
+ position: relative;
211
+ top: 15px; }
212
+
213
+ .select {
214
+ background: #f0f0f0;
215
+ border-radius: 3px;
127
216
  display: inline-block;
128
- font-family: Menlo, monospace;
129
217
  font-size: 11px;
130
- margin: 0;
131
- padding: 0;
132
- }
133
- #systems-page #message:focus {
134
- box-shadow: none;
135
- }
136
- #systems-page #roster {
137
- background: rgba(60, 60, 60, 0.98);
138
- border: 2px solid rgb(12, 12, 12);
139
- border-radius: 3px;
140
- box-shadow: 0 3px 10px rgba(0, 0, 0, 0.75);
141
- min-width: 250px;
218
+ line-height: 18px;
219
+ padding: 0 5px;
220
+ position: relative; }
221
+
222
+ .select span::after {
223
+ margin-left: 3px;
224
+ content: '\25be'; }
225
+
226
+ .select select {
227
+ cursor: pointer;
228
+ opacity: 0;
142
229
  position: absolute;
143
- left: 10px;
144
- }
145
- #systems-page #roster-items {
146
- color: #fff;
147
- font-size: 13px;
148
- font-weight: 500;
149
- overflow-y: auto;
150
- text-shadow: 0 1px 1px rgb(21, 21, 21);
151
- }
152
- #systems-page #roster-items li {
153
- border-top: 1px solid rgb(80, 80, 80);
154
- border-bottom: 1px solid rgb(48, 48, 48);
155
- line-height: 38px;
156
- list-style: none;
157
- padding-right: 50px;
158
- position: relative;
159
- }
160
- #systems-page #roster-items li.offline {
161
- color: #888;
162
- }
163
- #systems-page #roster-items li.offline .icon {
164
- opacity: 0.3;
165
- }
166
- #systems-page #roster-items li:hover:not(.group) {
230
+ top: 0;
231
+ bottom: 0;
232
+ left: 0;
233
+ right: 0; }
234
+
235
+ .filter-button {
236
+ cursor: pointer;
237
+ display: inline-block;
238
+ line-height: 1;
239
+ position: absolute;
240
+ right: 10px;
241
+ top: 6px; }
242
+
243
+ .filter-button svg {
244
+ height: 16px;
245
+ width: 16px; }
246
+
247
+ .filter-form {
248
+ border-bottom: 1px solid #ddd;
249
+ padding: 5px 10px; }
250
+
251
+ .filter-text {
252
+ width: 100%; }
253
+
254
+ .scroll {
255
+ overflow-y: auto; }
256
+
257
+ .scroll::-webkit-scrollbar {
258
+ width: 6px; }
259
+
260
+ .scroll::-webkit-scrollbar-thumb {
261
+ border-radius: 10px; }
262
+
263
+ .scroll::-webkit-scrollbar-thumb:vertical {
264
+ background: rgba(0, 0, 0, 0.2); }
265
+
266
+ ul.selectable li.selected {
167
267
  background: #319be7;
168
268
  background: -moz-linear-gradient(#319be7, #1b78d9);
169
269
  background: -ms-linear-gradient(#319be7, #1b78d9);
170
270
  background: -o-linear-gradient(#319be7, #1b78d9);
171
271
  background: -webkit-linear-gradient(#319be7, #1b78d9);
172
272
  border-top: 1px solid #148ddf;
273
+ border-bottom: 1px solid #095bba;
173
274
  color: #fff;
174
- cursor: pointer;
175
- text-shadow: -1px 1px 1px hsl(210, 51%, 45%), 0px -1px 1px hsl(210, 51%, 49%);
176
- }
177
- #systems-page #roster-items li.group {
178
- background: #404040;
179
- background: -moz-linear-gradient(#404040, #353535);
180
- background: -ms-linear-gradient(#404040, #353535);
181
- background: -o-linear-gradient(#404040, #353535);
182
- background: -webkit-linear-gradient(#404040, #353535);
183
- color: #ccc;
184
- font-size: 10px;
185
- font-weight: bold;
186
- line-height: 2;
187
- padding-left: 10px;
188
- text-transform: uppercase;
189
- }
190
- #systems-page #roster-items li .icon {
191
- position: absolute;
192
- height: 32px;
193
- width: 32px;
194
- top: 2px;
195
- }
196
- #systems-page #roster-items li .icon svg {
197
- height: 32px;
198
- width: 32px;
199
- }
200
- #systems-page #roster-items li .text {
201
- padding-left: 32px;
202
- }
203
- #systems-page #roster-items li .unread {
204
- background: rgba(255, 255, 255, 0.15);
205
- border-radius: 30px;
275
+ text-shadow: -1px 1px 1px #3873ad, 0px -1px 1px #3d7dbd; }
276
+
277
+ ul.selectable li.selected.secondary {
278
+ background: #bdc7db;
279
+ background: -moz-linear-gradient(#bdc7db, #9cabc4);
280
+ background: -ms-linear-gradient(#bdc7db, #9cabc4);
281
+ background: -o-linear-gradient(#bdc7db, #9cabc4);
282
+ background: -webkit-linear-gradient(#bdc7db, #9cabc4);
283
+ border-top: 1px solid #bdc6d6;
284
+ border-bottom: 1px solid #94a1b8;
206
285
  color: #fff;
207
- display: inline-block;
208
- font-size: 11px;
209
- font-weight: bold;
210
- line-height: 15px;
211
- padding: 0 6px;
212
- position: absolute;
213
- right: 10px;
214
- top: 12px;
215
- }
216
- #systems-page #roster-items li:hover .unread {
217
- color: #fff;
218
- }
219
- #systems-page #roster-form {
220
- background: rgb(80, 80, 80);
221
- background: -moz-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
222
- background: -ms-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
223
- background: -o-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
224
- background: -webkit-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
225
- padding: 3px 5px;
226
- }
227
- #systems-page #roster-form form {
228
- padding: 0;
229
- border: none;
230
- }
231
- #systems-page #roster-filter {
232
- width: 100%;
233
- }
234
- #services-page #container {
286
+ text-shadow: -1px 1px 1px #94a1b8; }
287
+
288
+ .column {
235
289
  height: 100%;
236
- }
237
- #services-page #beta {
238
- background: #fff;
239
- }
240
- #services-page #services {
241
- height: 100%;
242
- list-style: none;
243
- text-shadow: 0 1px 1px #fff;
244
- width: 260px;
245
- }
246
- #services-page #services li {
247
- cursor: pointer;
290
+ position: absolute; }
291
+
292
+ .column h2 {
248
293
  border-bottom: 1px solid #ddd;
249
- font-weight: bold;
250
- min-height: 42px;
251
- padding: 0 10px;
294
+ font-size: 10pt;
295
+ padding-left: 10px;
252
296
  position: relative;
253
- -moz-transition: background 0.3s;
254
- -o-transition: background 0.3s;
255
- -webkit-transition: background 0.3s;
256
- transition: background 0.3s;
257
- }
258
- #services-page #services li #status{
259
- margin-left:100px;
260
- }
261
- #services-page #services li:hover:not(.selected) {
262
- background: rgba(255, 255, 255, 1.0);
263
- }
264
- #services-page #services li.selected .count {
265
- color: rgba(255, 255, 255, 0.85);
266
- }
267
- #services-page #operators {
268
- margin-bottom: 10px;
269
- }
270
- #services-page #operators li {
297
+ text-shadow: 0 -1px 1px #fff; }
298
+
299
+ .column .controls {
300
+ background: rgba(255, 255, 255, 0.05);
301
+ border-top: 1px solid #ddd;
302
+ height: 50px;
303
+ position: absolute;
304
+ bottom: 0;
305
+ width: 260px; }
306
+
307
+ .column .controls > div {
271
308
  cursor: pointer;
272
- position: relative;
273
- -moz-transition: background 0.3s;
274
- -o-transition: background 0.3s;
275
- -webkit-transition: background 0.3s;
276
- transition: background 0.3s;
277
309
  display: inline-block;
278
- border: 1px solid #DDD;
279
- border-radius: 30px;
280
- width: 60px;
281
- height: 15px;
282
- line-height: 15px;
283
- text-align: center;
284
- font-size: 8pt;
285
- margin-left: 10px;
286
- }
287
- #services-page #operators li:hover:not(.selected) {
288
- color: rgba(23, 51, 88, 1.0);
289
- background: rgba(255, 255, 255, 1.0);
290
- }
291
- #services-page #attributes li {
292
- cursor: pointer;
293
- border-bottom: 1px solid #ddd;
294
- padding: 0 10px;
310
+ height: 27px;
311
+ margin: 0 10px;
295
312
  position: relative;
296
- color: rgba(23, 51, 88, 0.85);
297
- -moz-transition: background 0.3s;
298
- -o-transition: background 0.3s;
299
- -webkit-transition: background 0.3s;
300
- transition: background 0.3s;
301
- }
302
- #services-page #attributes li:hover:not(.selected) {
303
- color: rgba(23, 51, 88, 1.0);
304
- background: rgba(255, 255, 255, 1.0);
305
- }
306
- #services-page #services .count {
307
- display: block;
308
- font-size: 11px;
309
- font-weight: normal;
310
- line-height: 11px;
311
- }
312
- #services-page #charlie-controls {
313
- text-align: right;
314
- }
315
- #services-page #search-services-form {
316
- background: #f8f8f8;
317
- }
318
- #services-page #syntax {
319
- height: 45px;
320
- }
321
- #services-page #syntax-status {
322
- font-size: 8pt;
323
- height: 12px;
313
+ top: 10px;
314
+ width: 27px; }
315
+
316
+ .column .controls > div > svg {
317
+ height: 27px;
318
+ width: 27px; }
319
+
320
+ .primary {
321
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.5), 0 0 40px rgba(0, 0, 0, 0.1) inset;
322
+ width: 460px;
323
+ left: 260px;
324
+ z-index: 1; }
325
+
326
+ .sidebar {
327
+ background: url(../images/light-gray.png);
328
+ box-shadow: 0 0 40px rgba(0, 0, 0, 0.1) inset;
329
+ width: 260px; }
330
+
331
+ form.overlay {
332
+ background: rgba(255, 255, 255, 0.95);
333
+ border-bottom: 1px solid #ddd;
334
+ border-top: 1px solid #fff;
335
+ box-shadow: 0px -3px 5px rgba(0, 0, 0, 0.1);
336
+ padding-top: 10px;
337
+ position: absolute;
338
+ bottom: 50px;
339
+ left: 0;
340
+ width: 260px; }
341
+
342
+ form.overlay h2,
343
+ form.inset h2 {
344
+ border: none !important;
324
345
  line-height: 1;
325
- margin: -5px 0 10px 0;
326
- width: 93%;
327
- }
328
- #services-page #service-preview {
329
- margin-top: -15px;
330
- }
331
- #services-page #members {
332
- height: 200px;
333
- margin-bottom: 20px;
334
- }
335
- #services-page #members li {
336
- display: inline-block;
337
- background-color: #fff;
338
- font-size: 8pt;
339
- width: 150px;
340
- max-width: 150px;
341
- height: 25px;
342
- max-height: 25px;
343
- text-overflow: ellipsis;
344
- overflow: hidden;
345
- white-space:nowrap;
346
- float: left;
346
+ margin-bottom: 10px; }
347
+
348
+ form.overlay p,
349
+ form.inset p {
350
+ line-height: 1.5;
351
+ margin: 0 10px 10px 10px;
352
+ text-shadow: 0 1px 1px #fff; }
353
+
354
+ form.inset p {
355
+ margin-top: -5px; }
356
+
357
+ form.overlay .buttons,
358
+ form.inset .buttons {
359
+ padding-right: 10px;
360
+ text-align: right; }
361
+
362
+ form.overlay input[type="text"],
363
+ form.overlay input[type="password"],
364
+ form.overlay input[type="email"] {
365
+ margin-bottom: 10px;
366
+ width: 228px;
367
+ position: relative;
368
+ left: 10px; }
369
+
370
+ .notification {
371
+ background: rgba(12, 26, 45, 0.75);
372
+ border-radius: 30px;
373
+ color: #fff;
374
+ font-size: 10pt;
375
+ font-weight: bold;
376
+ padding: 5px 100px;
377
+ position: absolute;
378
+ top: 50%;
379
+ left: 50%;
380
+ text-align: center;
381
+ text-shadow: 0 1px 1px #000;
382
+ z-index: 2; }
383
+ #login-page {
384
+ background: -moz-radial-gradient(rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png);
385
+ background: -ms-radial-gradient(center, 500px 500px, rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png);
386
+ background: -o-radial-gradient(rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png);
387
+ background: -webkit-radial-gradient(center, 500px 500px, rgba(26, 55, 98, 0.8), rgba(12, 26, 45, 0.8)), url(../images/dark-gray.png); }
388
+
389
+ #login-page #container {
390
+ height: 100%;
391
+ width: 100%;
392
+ text-align: center; }
393
+
394
+ #login-page #login-form {
395
+ margin: 0 auto;
396
+ position: relative;
397
+ width: 640px; }
398
+
399
+ #login-page #login-form h1 {
400
+ background: url(../images/logo-large.png) no-repeat;
401
+ color: transparent;
402
+ height: 82px;
403
+ line-height: 1;
404
+ margin: 0 auto 40px auto;
405
+ text-shadow: none;
406
+ width: 245px; }
407
+
408
+ #login-page #jid,
409
+ #login-page #password {
410
+ margin: 0 auto;
347
411
  margin-bottom: 10px;
348
- margin-right: 10px;
349
- -webkit-border-radius: 3px;
350
- -moz-border-radius: 3px;
412
+ width: 240px;
413
+ display: block; }
414
+
415
+ #login-page #icon {
416
+ position: absolute;
417
+ left: 90px;
418
+ top: 0px;
419
+ width: 100px;
420
+ height: 80px; }
421
+
422
+ #login-page #login-form-controls {
423
+ background: rgba(0, 0, 0, 0.2);
424
+ border: 1px solid rgba(0, 0, 0, 0.1);
425
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
426
+ border-radius: 5px;
427
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1) inset;
428
+ margin: 0 auto;
429
+ padding: 20px; }
430
+
431
+ #login-page #start {
432
+ width: 100px;
433
+ margin-left: 0;
434
+ margin-bottom: 0; }
435
+
436
+ #login-page #start:active {
437
+ box-shadow: inset 0 1px 7px #0c1a2d; }
438
+
439
+ #login-page input[type="submit"] {
440
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.8), inset 0 1px 1px rgba(255, 255, 255, 0.5); }
441
+
442
+ #login-page #error {
443
+ background: rgba(255, 255, 255, 0.05);
351
444
  border-radius: 3px;
352
- border: 1px solid #ccc;
445
+ color: #4693FF;
446
+ font-size: 10pt;
447
+ margin: 20px auto;
448
+ text-shadow: 0 1px 1px #000;
449
+ width: 250px; }
450
+ #editor-buttons {
451
+ background: #f8f8f8;
452
+ border-top: 1px solid #dfdfdf;
453
+ height: 50px;
454
+ position: absolute;
455
+ bottom: 0;
456
+ width: 100%;
353
457
  }
354
- #services-page #members li span.text {
355
- margin-left: 5px;
458
+ #editor-buttons {
459
+ text-align: right;
356
460
  }
357
- #services-page #members li span.icon {
358
- width: 15px;
359
- height: 15px;
360
- display: inline-block;
461
+ #editor-buttons #save {
361
462
  position: relative;
362
- top: 2px;
363
- left: 3px;
463
+ right: 10px;
464
+ top: 10px;
364
465
  }
365
- #services-page #members li:hover:not(.selected) {
366
- background-color: #ededed;
367
- background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e0e0e0));
368
- background: -moz-linear-gradient(#ededed, #e0e0e0);
369
- cursor: pointer;
466
+ form.sections h2 {
467
+ background: none;
468
+ border: none;
469
+ padding-left: 0;
370
470
  }
371
- #services-page #members li.selected {
372
- background: #4693FF;
373
- background: -moz-linear-gradient(#4693FF, #015de6);
374
- background: -o-linear-gradient(#4693FF, #015de6);
375
- background: -webkit-gradient(linear, left top, left bottom, from(#4693FF), to(#015de6));
376
- border-bottom: 1px solid #fff;
377
- color: #fff;
378
- text-shadow: 0 -1px 1px #1b3a65;
471
+ form.sections label {
472
+ display: block;
473
+ font-weight: bold;
474
+ font-size: 9pt;
475
+ color: rgba(0,0,0,0.8);
476
+ margin: 10px 0 -2px 0;
379
477
  }
380
- #services-page #users {
381
- max-height: 140px;
382
- list-style: none;
478
+ form.sections input[type="text"],
479
+ form.sections input[type="email"],
480
+ form.sections input[type="password"],
481
+ form.sections textarea {
482
+ width: 90%;
383
483
  }
384
- #services-page #users label {
385
- color: inherit;
386
- display: inline;
387
- font-size: inherit;
388
- font-weight: normal;
389
- margin-left: 2px;
484
+ form.sections section {
485
+ border-bottom: 1px solid #ddd;
486
+ margin: 0 20px;
390
487
  }
391
- #services-page #blank-slate {
392
- margin-top: -65px;
393
- margin-left: -215px;
394
- text-align: center;
395
- width: 430px;
396
- position: absolute;
397
- top: 50%;
398
- left: 50%;
488
+ form.sections section fieldset {
489
+ padding-left: 30%;
490
+ margin-top: -33px;
491
+ margin-bottom: 10px;
399
492
  }
400
- #services-page #blank-slate p {
401
- color: rgba(0, 0, 0, 0.3);
402
- font-size: 12pt;
493
+ form.sections section:last-child {
494
+ border-bottom: none;
403
495
  margin-bottom: 20px;
404
496
  }
497
+ form.sections .error {
498
+ color: #dd2828;
499
+ font-size: 8pt;
500
+ width: 89%;
501
+ }
502
+ .hint {
503
+ color: #aaa;
504
+ font-size: 8pt;
505
+ line-height: 1;
506
+ margin-top: 3px;
507
+ }
405
508
  #files-page #container {
406
509
  height: 100%;
407
510
  }
@@ -580,45 +683,216 @@ form.sections .error {
580
683
  text-shadow: 0 1px 1px #fff;
581
684
  width: 260px;
582
685
  }
583
- #files-page #labels li .text {
584
- text-transform: capitalize;
686
+ #files-page #labels li .text {
687
+ text-transform: capitalize;
688
+ }
689
+ #files-page #labels li,
690
+ #files-page #uploads li {
691
+ cursor: pointer;
692
+ border-bottom: 1px solid #ddd;
693
+ font-weight: bold;
694
+ min-height: 42px;
695
+ padding: 0 10px;
696
+ position: relative;
697
+ -moz-transition: background 0.3s;
698
+ -o-transition: background 0.3s;
699
+ -webkit-transition: background 0.3s;
700
+ transition: background 0.3s;
701
+ }
702
+ #files-page #uploads li {
703
+ font-weight: normal;
704
+ padding: 10px 0 0 0;
705
+ background: #f8f8f8;
706
+ }
707
+ #files-page #labels li:hover:not(.selected),
708
+ #files-page #uploads li:hover {
709
+ background: rgba(255, 255, 255, 1.0);
710
+ }
711
+ #files-page #labels li.selected .count {
712
+ color: rgba(255, 255, 255, 0.85);
713
+ }
714
+ #files-page #labels .count {
715
+ display: block;
716
+ font-size: 11px;
717
+ font-weight: normal;
718
+ line-height: 11px;
719
+ }
720
+ #files-page #charlie-controls {
721
+ text-align: right;
722
+ }
723
+ #files-page #search-files-form {
724
+ background: #f8f8f8;
725
+ }
726
+ #services-page #container {
727
+ height: 100%;
728
+ }
729
+ #services-page #beta {
730
+ background: #fff;
731
+ }
732
+ #services-page #services {
733
+ height: 100%;
734
+ list-style: none;
735
+ text-shadow: 0 1px 1px #fff;
736
+ width: 260px;
737
+ }
738
+ #services-page #services li {
739
+ cursor: pointer;
740
+ border-bottom: 1px solid #ddd;
741
+ font-weight: bold;
742
+ min-height: 42px;
743
+ padding: 0 10px;
744
+ position: relative;
745
+ -moz-transition: background 0.3s;
746
+ -o-transition: background 0.3s;
747
+ -webkit-transition: background 0.3s;
748
+ transition: background 0.3s;
749
+ }
750
+ #services-page #services li #status{
751
+ margin-left:100px;
752
+ }
753
+ #services-page #services li:hover:not(.selected) {
754
+ background: rgba(255, 255, 255, 1.0);
755
+ }
756
+ #services-page #services li.selected .count {
757
+ color: rgba(255, 255, 255, 0.85);
758
+ }
759
+ #services-page #operators {
760
+ margin-bottom: 10px;
761
+ }
762
+ #services-page #operators li {
763
+ cursor: pointer;
764
+ position: relative;
765
+ -moz-transition: background 0.3s;
766
+ -o-transition: background 0.3s;
767
+ -webkit-transition: background 0.3s;
768
+ transition: background 0.3s;
769
+ display: inline-block;
770
+ border: 1px solid #DDD;
771
+ border-radius: 30px;
772
+ width: 60px;
773
+ height: 15px;
774
+ line-height: 15px;
775
+ text-align: center;
776
+ font-size: 8pt;
777
+ margin-left: 10px;
778
+ }
779
+ #services-page #operators li:hover:not(.selected) {
780
+ color: rgba(23, 51, 88, 1.0);
781
+ background: rgba(255, 255, 255, 1.0);
782
+ }
783
+ #services-page #attributes li {
784
+ cursor: pointer;
785
+ border-bottom: 1px solid #ddd;
786
+ padding: 0 10px;
787
+ position: relative;
788
+ color: rgba(23, 51, 88, 0.85);
789
+ -moz-transition: background 0.3s;
790
+ -o-transition: background 0.3s;
791
+ -webkit-transition: background 0.3s;
792
+ transition: background 0.3s;
793
+ }
794
+ #services-page #attributes li:hover:not(.selected) {
795
+ color: rgba(23, 51, 88, 1.0);
796
+ background: rgba(255, 255, 255, 1.0);
797
+ }
798
+ #services-page #services .count {
799
+ display: block;
800
+ font-size: 11px;
801
+ font-weight: normal;
802
+ line-height: 11px;
803
+ }
804
+ #services-page #charlie-controls {
805
+ text-align: right;
806
+ }
807
+ #services-page #search-services-form {
808
+ background: #f8f8f8;
809
+ }
810
+ #services-page #syntax {
811
+ height: 45px;
812
+ }
813
+ #services-page #syntax-status {
814
+ font-size: 8pt;
815
+ height: 12px;
816
+ line-height: 1;
817
+ margin: -5px 0 10px 0;
818
+ width: 93%;
819
+ }
820
+ #services-page #service-preview {
821
+ margin-top: -15px;
822
+ }
823
+ #services-page #members {
824
+ height: 200px;
825
+ margin-bottom: 20px;
826
+ }
827
+ #services-page #members li {
828
+ display: inline-block;
829
+ background-color: #fff;
830
+ font-size: 8pt;
831
+ width: 150px;
832
+ max-width: 150px;
833
+ height: 25px;
834
+ max-height: 25px;
835
+ text-overflow: ellipsis;
836
+ overflow: hidden;
837
+ white-space:nowrap;
838
+ float: left;
839
+ margin-bottom: 10px;
840
+ margin-right: 10px;
841
+ -webkit-border-radius: 3px;
842
+ -moz-border-radius: 3px;
843
+ border-radius: 3px;
844
+ border: 1px solid #ccc;
845
+ }
846
+ #services-page #members li span.text {
847
+ margin-left: 5px;
585
848
  }
586
- #files-page #labels li,
587
- #files-page #uploads li {
588
- cursor: pointer;
589
- border-bottom: 1px solid #ddd;
590
- font-weight: bold;
591
- min-height: 42px;
592
- padding: 0 10px;
849
+ #services-page #members li span.icon {
850
+ width: 15px;
851
+ height: 15px;
852
+ display: inline-block;
593
853
  position: relative;
594
- -moz-transition: background 0.3s;
595
- -o-transition: background 0.3s;
596
- -webkit-transition: background 0.3s;
597
- transition: background 0.3s;
854
+ top: 2px;
855
+ left: 3px;
598
856
  }
599
- #files-page #uploads li {
600
- font-weight: normal;
601
- padding: 10px 0 0 0;
602
- background: #f8f8f8;
857
+ #services-page #members li:hover:not(.selected) {
858
+ background-color: #ededed;
859
+ background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e0e0e0));
860
+ background: -moz-linear-gradient(#ededed, #e0e0e0);
861
+ cursor: pointer;
603
862
  }
604
- #files-page #labels li:hover:not(.selected),
605
- #files-page #uploads li:hover {
606
- background: rgba(255, 255, 255, 1.0);
863
+ #services-page #members li.selected {
864
+ background: #4693FF;
865
+ background: -moz-linear-gradient(#4693FF, #015de6);
866
+ background: -o-linear-gradient(#4693FF, #015de6);
867
+ background: -webkit-gradient(linear, left top, left bottom, from(#4693FF), to(#015de6));
868
+ border-bottom: 1px solid #fff;
869
+ color: #fff;
870
+ text-shadow: 0 -1px 1px #1b3a65;
607
871
  }
608
- #files-page #labels li.selected .count {
609
- color: rgba(255, 255, 255, 0.85);
872
+ #services-page #users {
873
+ max-height: 140px;
874
+ list-style: none;
610
875
  }
611
- #files-page #labels .count {
612
- display: block;
613
- font-size: 11px;
876
+ #services-page #users label {
877
+ color: inherit;
878
+ display: inline;
879
+ font-size: inherit;
614
880
  font-weight: normal;
615
- line-height: 11px;
881
+ margin-left: 2px;
616
882
  }
617
- #files-page #charlie-controls {
618
- text-align: right;
883
+ #services-page #blank-slate {
884
+ margin-top: -65px;
885
+ margin-left: -215px;
886
+ text-align: center;
887
+ width: 430px;
888
+ position: absolute;
889
+ top: 50%;
890
+ left: 50%;
619
891
  }
620
- #files-page #search-files-form {
621
- background: #f8f8f8;
892
+ #services-page #blank-slate p {
893
+ color: rgba(0, 0, 0, 0.3);
894
+ font-size: 12pt;
895
+ margin-bottom: 20px;
622
896
  }
623
897
  #setup-page #container {
624
898
  height: 100%;
@@ -736,3 +1010,188 @@ form.sections .error {
736
1010
  #setup-page #info p {
737
1011
  line-height: 1;
738
1012
  }
1013
+ #systems-page #container {
1014
+ height: 100%;
1015
+ }
1016
+ #systems-page #alpha {
1017
+ background: #fff;
1018
+ box-shadow: none;
1019
+ left: 0;
1020
+ }
1021
+ #systems-page #blank-slate {
1022
+ margin-top: -65px;
1023
+ margin-left: -215px;
1024
+ text-align: center;
1025
+ width: 430px;
1026
+ position: absolute;
1027
+ top: 50%;
1028
+ left: 50%;
1029
+ }
1030
+ #systems-page #blank-slate p {
1031
+ color: rgba(0, 0, 0, 0.3);
1032
+ font-size: 12pt;
1033
+ margin-bottom: 20px;
1034
+ }
1035
+ #systems-page #messages {
1036
+ list-style: none;
1037
+ width: 100%;
1038
+ }
1039
+ #systems-page #messages li {
1040
+ padding: 0 10px;
1041
+ position: relative;
1042
+ }
1043
+ #systems-page #messages li:first-child {
1044
+ padding-top: 10px;
1045
+ }
1046
+ #systems-page #messages li:hover > span .time {
1047
+ opacity: 0.3;
1048
+ }
1049
+ #systems-page #messages li pre,
1050
+ #systems-page #messages li footer {
1051
+ font-family: Menlo, monospace;
1052
+ font-size: 11px;
1053
+ line-height: 1.3;
1054
+ word-wrap: break-word;
1055
+ }
1056
+ #systems-page #messages li footer {
1057
+ font-weight: bold;
1058
+ }
1059
+ #systems-page #message-form {
1060
+ height: 21px;
1061
+ line-height: 1;
1062
+ position: relative;
1063
+ width: 100%;
1064
+ }
1065
+ #systems-page #message-label {
1066
+ background: transparent;
1067
+ cursor: pointer;
1068
+ font-family: Menlo, monospace;
1069
+ font-size: 11px;
1070
+ padding: 0 2px 0 10px;
1071
+ }
1072
+ #systems-page #message-label::after {
1073
+ margin: 0;
1074
+ content: '$';
1075
+ }
1076
+ #systems-page #message-label:hover {
1077
+ text-decoration: underline;
1078
+ }
1079
+ #systems-page #message {
1080
+ box-shadow: none;
1081
+ display: inline-block;
1082
+ font-family: Menlo, monospace;
1083
+ font-size: 11px;
1084
+ margin: 0;
1085
+ padding: 0;
1086
+ }
1087
+ #systems-page #message:focus {
1088
+ box-shadow: none;
1089
+ }
1090
+ #systems-page #roster {
1091
+ background: rgba(60, 60, 60, 0.98);
1092
+ border: 2px solid rgb(12, 12, 12);
1093
+ border-radius: 3px;
1094
+ box-shadow: 0 3px 10px rgba(0, 0, 0, 0.75);
1095
+ min-width: 250px;
1096
+ position: absolute;
1097
+ left: 10px;
1098
+ }
1099
+ #systems-page #roster-items {
1100
+ color: #fff;
1101
+ font-size: 13px;
1102
+ font-weight: 500;
1103
+ overflow-y: auto;
1104
+ text-shadow: 0 1px 1px rgb(21, 21, 21);
1105
+ }
1106
+ #systems-page #roster-items li {
1107
+ border-top: 1px solid rgb(80, 80, 80);
1108
+ border-bottom: 1px solid rgb(48, 48, 48);
1109
+ line-height: 38px;
1110
+ list-style: none;
1111
+ padding-right: 50px;
1112
+ position: relative;
1113
+ }
1114
+ #systems-page #roster-items li.offline {
1115
+ color: #888;
1116
+ }
1117
+ #systems-page #roster-items li.offline .icon {
1118
+ opacity: 0.3;
1119
+ }
1120
+ #systems-page #roster-items li:hover:not(.group) {
1121
+ background: #319be7;
1122
+ background: -moz-linear-gradient(#319be7, #1b78d9);
1123
+ background: -ms-linear-gradient(#319be7, #1b78d9);
1124
+ background: -o-linear-gradient(#319be7, #1b78d9);
1125
+ background: -webkit-linear-gradient(#319be7, #1b78d9);
1126
+ border-top: 1px solid #148ddf;
1127
+ color: #fff;
1128
+ cursor: pointer;
1129
+ text-shadow: -1px 1px 1px hsl(210, 51%, 45%), 0px -1px 1px hsl(210, 51%, 49%);
1130
+ }
1131
+ #systems-page #roster-items li.group {
1132
+ background: #404040;
1133
+ background: -moz-linear-gradient(#404040, #353535);
1134
+ background: -ms-linear-gradient(#404040, #353535);
1135
+ background: -o-linear-gradient(#404040, #353535);
1136
+ background: -webkit-linear-gradient(#404040, #353535);
1137
+ color: #ccc;
1138
+ font-size: 10px;
1139
+ font-weight: bold;
1140
+ line-height: 2;
1141
+ padding-left: 10px;
1142
+ text-transform: uppercase;
1143
+ }
1144
+ #systems-page #roster-items li .icon {
1145
+ position: absolute;
1146
+ height: 32px;
1147
+ width: 32px;
1148
+ top: 2px;
1149
+ }
1150
+ #systems-page #roster-items li .icon svg {
1151
+ height: 32px;
1152
+ width: 32px;
1153
+ }
1154
+ #systems-page #roster-items li .text {
1155
+ padding-left: 32px;
1156
+ }
1157
+ #systems-page #roster-items li .unread {
1158
+ background: rgba(255, 255, 255, 0.15);
1159
+ border-radius: 30px;
1160
+ color: #fff;
1161
+ display: inline-block;
1162
+ font-size: 11px;
1163
+ font-weight: bold;
1164
+ line-height: 15px;
1165
+ padding: 0 6px;
1166
+ position: absolute;
1167
+ right: 10px;
1168
+ top: 12px;
1169
+ }
1170
+ #systems-page #roster-items li:hover .unread {
1171
+ color: #fff;
1172
+ }
1173
+ #systems-page #roster-form {
1174
+ background: rgb(80, 80, 80);
1175
+ background: -moz-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1176
+ background: -ms-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1177
+ background: -o-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1178
+ background: -webkit-linear-gradient(rgb(80,80,80), rgb(48, 48, 48));
1179
+ padding: 3px 5px;
1180
+ }
1181
+ #systems-page #roster-form form {
1182
+ padding: 0;
1183
+ border: none;
1184
+ }
1185
+ #systems-page #roster-filter {
1186
+ width: 100%;
1187
+ }
1188
+ /*
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+ */
1197
+