##// END OF EJS Templates
fixed ldap issue and small template fix
marcink -
r748:88338675 beta
parent child Browse files
Show More
@@ -1,536 +1,536 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 # encoding: utf-8
2 # encoding: utf-8
3 # authentication and permission libraries
3 # authentication and permission libraries
4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
4 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
5 #
5 #
6 # This program is free software; you can redistribute it and/or
6 # This program is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU General Public License
7 # modify it under the terms of the GNU General Public License
8 # as published by the Free Software Foundation; version 2
8 # as published by the Free Software Foundation; version 2
9 # of the License or (at your opinion) any later version of the license.
9 # of the License or (at your opinion) any later version of the license.
10 #
10 #
11 # This program is distributed in the hope that it will be useful,
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
14 # GNU General Public License for more details.
15 #
15 #
16 # You should have received a copy of the GNU General Public License
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 # MA 02110-1301, USA.
19 # MA 02110-1301, USA.
20 """
20 """
21 Created on April 4, 2010
21 Created on April 4, 2010
22
22
23 @author: marcink
23 @author: marcink
24 """
24 """
25 from pylons import config, session, url, request
25 from pylons import config, session, url, request
26 from pylons.controllers.util import abort, redirect
26 from pylons.controllers.util import abort, redirect
27 from rhodecode.lib.exceptions import *
27 from rhodecode.lib.exceptions import *
28 from rhodecode.lib.utils import get_repo_slug
28 from rhodecode.lib.utils import get_repo_slug
29 from rhodecode.lib.auth_ldap import AuthLdap
29 from rhodecode.lib.auth_ldap import AuthLdap
30 from rhodecode.model import meta
30 from rhodecode.model import meta
31 from rhodecode.model.user import UserModel
31 from rhodecode.model.user import UserModel
32 from rhodecode.model.caching_query import FromCache
32 from rhodecode.model.caching_query import FromCache
33 from rhodecode.model.db import User, RepoToPerm, Repository, Permission, \
33 from rhodecode.model.db import User, RepoToPerm, Repository, Permission, \
34 UserToPerm
34 UserToPerm
35 import bcrypt
35 import bcrypt
36 from decorator import decorator
36 from decorator import decorator
37 import logging
37 import logging
38 import random
38 import random
39 import traceback
39 import traceback
40
40
41 log = logging.getLogger(__name__)
41 log = logging.getLogger(__name__)
42
42
43 class PasswordGenerator(object):
43 class PasswordGenerator(object):
44 """This is a simple class for generating password from
44 """This is a simple class for generating password from
45 different sets of characters
45 different sets of characters
46 usage:
46 usage:
47 passwd_gen = PasswordGenerator()
47 passwd_gen = PasswordGenerator()
48 #print 8-letter password containing only big and small letters of alphabet
48 #print 8-letter password containing only big and small letters of alphabet
49 print passwd_gen.gen_password(8, passwd_gen.ALPHABETS_BIG_SMALL)
49 print passwd_gen.gen_password(8, passwd_gen.ALPHABETS_BIG_SMALL)
50 """
50 """
51 ALPHABETS_NUM = r'''1234567890'''#[0]
51 ALPHABETS_NUM = r'''1234567890'''#[0]
52 ALPHABETS_SMALL = r'''qwertyuiopasdfghjklzxcvbnm'''#[1]
52 ALPHABETS_SMALL = r'''qwertyuiopasdfghjklzxcvbnm'''#[1]
53 ALPHABETS_BIG = r'''QWERTYUIOPASDFGHJKLZXCVBNM'''#[2]
53 ALPHABETS_BIG = r'''QWERTYUIOPASDFGHJKLZXCVBNM'''#[2]
54 ALPHABETS_SPECIAL = r'''`-=[]\;',./~!@#$%^&*()_+{}|:"<>?''' #[3]
54 ALPHABETS_SPECIAL = r'''`-=[]\;',./~!@#$%^&*()_+{}|:"<>?''' #[3]
55 ALPHABETS_FULL = ALPHABETS_BIG + ALPHABETS_SMALL + ALPHABETS_NUM + ALPHABETS_SPECIAL#[4]
55 ALPHABETS_FULL = ALPHABETS_BIG + ALPHABETS_SMALL + ALPHABETS_NUM + ALPHABETS_SPECIAL#[4]
56 ALPHABETS_ALPHANUM = ALPHABETS_BIG + ALPHABETS_SMALL + ALPHABETS_NUM#[5]
56 ALPHABETS_ALPHANUM = ALPHABETS_BIG + ALPHABETS_SMALL + ALPHABETS_NUM#[5]
57 ALPHABETS_BIG_SMALL = ALPHABETS_BIG + ALPHABETS_SMALL
57 ALPHABETS_BIG_SMALL = ALPHABETS_BIG + ALPHABETS_SMALL
58 ALPHABETS_ALPHANUM_BIG = ALPHABETS_BIG + ALPHABETS_NUM#[6]
58 ALPHABETS_ALPHANUM_BIG = ALPHABETS_BIG + ALPHABETS_NUM#[6]
59 ALPHABETS_ALPHANUM_SMALL = ALPHABETS_SMALL + ALPHABETS_NUM#[7]
59 ALPHABETS_ALPHANUM_SMALL = ALPHABETS_SMALL + ALPHABETS_NUM#[7]
60
60
61 def __init__(self, passwd=''):
61 def __init__(self, passwd=''):
62 self.passwd = passwd
62 self.passwd = passwd
63
63
64 def gen_password(self, len, type):
64 def gen_password(self, len, type):
65 self.passwd = ''.join([random.choice(type) for _ in xrange(len)])
65 self.passwd = ''.join([random.choice(type) for _ in xrange(len)])
66 return self.passwd
66 return self.passwd
67
67
68
68
69 def get_crypt_password(password):
69 def get_crypt_password(password):
70 """Cryptographic function used for password hashing based on sha1
70 """Cryptographic function used for password hashing based on sha1
71 :param password: password to hash
71 :param password: password to hash
72 """
72 """
73 return bcrypt.hashpw(password, bcrypt.gensalt(10))
73 return bcrypt.hashpw(password, bcrypt.gensalt(10))
74
74
75 def check_password(password, hashed):
75 def check_password(password, hashed):
76 return bcrypt.hashpw(password, hashed) == hashed
76 return bcrypt.hashpw(password, hashed) == hashed
77
77
78 def authfunc(environ, username, password):
78 def authfunc(environ, username, password):
79 """
79 """
80 Authentication function used in Mercurial/Git/ and access control,
80 Authentication function used in Mercurial/Git/ and access control,
81 firstly checks for db authentication then if ldap is enabled for ldap
81 firstly checks for db authentication then if ldap is enabled for ldap
82 authentication, also creates ldap user if not in database
82 authentication, also creates ldap user if not in database
83
83
84 :param environ: needed only for using in Basic auth, can be None
84 :param environ: needed only for using in Basic auth, can be None
85 :param username: username
85 :param username: username
86 :param password: password
86 :param password: password
87 """
87 """
88 user_model = UserModel()
88 user_model = UserModel()
89 user = user_model.get_by_username(username, cache=False)
89 user = user_model.get_by_username(username, cache=False)
90
90
91 if user is not None and user.is_ldap is False:
91 if user is not None and user.is_ldap is False:
92 if user.active:
92 if user.active:
93
93
94 if user.username == 'default' and user.active:
94 if user.username == 'default' and user.active:
95 log.info('user %s authenticated correctly', username)
95 log.info('user %s authenticated correctly', username)
96 return True
96 return True
97
97
98 elif user.username == username and check_password(password, user.password):
98 elif user.username == username and check_password(password, user.password):
99 log.info('user %s authenticated correctly', username)
99 log.info('user %s authenticated correctly', username)
100 return True
100 return True
101 else:
101 else:
102 log.error('user %s is disabled', username)
102 log.error('user %s is disabled', username)
103
103
104
104
105 else:
105 else:
106
106
107 #since ldap is searching in case insensitive check if this user is still
107 #since ldap is searching in case insensitive check if this user is still
108 #not in our system
108 #not in our system
109 username = username.lower()
109 username = username.lower()
110 user_obj = user_model.get_by_username(username, cache=False,
110 user_obj = user_model.get_by_username(username, cache=False,
111 case_insensitive=True)
111 case_insensitive=True)
112 if user_obj is not None:
112 if user_obj is not None and user_obj.is_ldap is False:
113 return False
113 return False
114
114
115 from rhodecode.model.settings import SettingsModel
115 from rhodecode.model.settings import SettingsModel
116 ldap_settings = SettingsModel().get_ldap_settings()
116 ldap_settings = SettingsModel().get_ldap_settings()
117
117
118 #======================================================================
118 #======================================================================
119 # FALLBACK TO LDAP AUTH IN ENABLE
119 # FALLBACK TO LDAP AUTH IN ENABLE
120 #======================================================================
120 #======================================================================
121 if ldap_settings.get('ldap_active', False):
121 if ldap_settings.get('ldap_active', False):
122
122
123 kwargs = {
123 kwargs = {
124 'server':ldap_settings.get('ldap_host', ''),
124 'server':ldap_settings.get('ldap_host', ''),
125 'base_dn':ldap_settings.get('ldap_base_dn', ''),
125 'base_dn':ldap_settings.get('ldap_base_dn', ''),
126 'port':ldap_settings.get('ldap_port'),
126 'port':ldap_settings.get('ldap_port'),
127 'bind_dn':ldap_settings.get('ldap_dn_user'),
127 'bind_dn':ldap_settings.get('ldap_dn_user'),
128 'bind_pass':ldap_settings.get('ldap_dn_pass'),
128 'bind_pass':ldap_settings.get('ldap_dn_pass'),
129 'use_ldaps':ldap_settings.get('ldap_ldaps'),
129 'use_ldaps':ldap_settings.get('ldap_ldaps'),
130 'ldap_version':3,
130 'ldap_version':3,
131 }
131 }
132 log.debug('Checking for ldap authentication')
132 log.debug('Checking for ldap authentication')
133 try:
133 try:
134 aldap = AuthLdap(**kwargs)
134 aldap = AuthLdap(**kwargs)
135 res = aldap.authenticate_ldap(username, password)
135 res = aldap.authenticate_ldap(username, password)
136
136
137 authenticated = res[1]['uid'][0] == username
137 authenticated = res[1]['uid'][0] == username
138
138
139 if authenticated and user_model.create_ldap(username, password):
139 if authenticated and user_model.create_ldap(username, password):
140 log.info('created new ldap user')
140 log.info('created new ldap user')
141
141
142 return authenticated
142 return authenticated
143 except (LdapUsernameError, LdapPasswordError):
143 except (LdapUsernameError, LdapPasswordError):
144 return False
144 return False
145 except:
145 except:
146 log.error(traceback.format_exc())
146 log.error(traceback.format_exc())
147 return False
147 return False
148 return False
148 return False
149
149
150 class AuthUser(object):
150 class AuthUser(object):
151 """
151 """
152 A simple object that handles a mercurial username for authentication
152 A simple object that handles a mercurial username for authentication
153 """
153 """
154 def __init__(self):
154 def __init__(self):
155 self.username = 'None'
155 self.username = 'None'
156 self.name = ''
156 self.name = ''
157 self.lastname = ''
157 self.lastname = ''
158 self.email = ''
158 self.email = ''
159 self.user_id = None
159 self.user_id = None
160 self.is_authenticated = False
160 self.is_authenticated = False
161 self.is_admin = False
161 self.is_admin = False
162 self.permissions = {}
162 self.permissions = {}
163
163
164 def __repr__(self):
164 def __repr__(self):
165 return "<AuthUser('id:%s:%s')>" % (self.user_id, self.username)
165 return "<AuthUser('id:%s:%s')>" % (self.user_id, self.username)
166
166
167 def set_available_permissions(config):
167 def set_available_permissions(config):
168 """
168 """
169 This function will propagate pylons globals with all available defined
169 This function will propagate pylons globals with all available defined
170 permission given in db. We don't wannt to check each time from db for new
170 permission given in db. We don't wannt to check each time from db for new
171 permissions since adding a new permission also requires application restart
171 permissions since adding a new permission also requires application restart
172 ie. to decorate new views with the newly created permission
172 ie. to decorate new views with the newly created permission
173 :param config:
173 :param config:
174 """
174 """
175 log.info('getting information about all available permissions')
175 log.info('getting information about all available permissions')
176 try:
176 try:
177 sa = meta.Session()
177 sa = meta.Session()
178 all_perms = sa.query(Permission).all()
178 all_perms = sa.query(Permission).all()
179 except:
179 except:
180 pass
180 pass
181 finally:
181 finally:
182 meta.Session.remove()
182 meta.Session.remove()
183
183
184 config['available_permissions'] = [x.permission_name for x in all_perms]
184 config['available_permissions'] = [x.permission_name for x in all_perms]
185
185
186 def set_base_path(config):
186 def set_base_path(config):
187 config['base_path'] = config['pylons.app_globals'].base_path
187 config['base_path'] = config['pylons.app_globals'].base_path
188
188
189
189
190 def fill_perms(user):
190 def fill_perms(user):
191 """
191 """
192 Fills user permission attribute with permissions taken from database
192 Fills user permission attribute with permissions taken from database
193 :param user:
193 :param user:
194 """
194 """
195
195
196 sa = meta.Session()
196 sa = meta.Session()
197 user.permissions['repositories'] = {}
197 user.permissions['repositories'] = {}
198 user.permissions['global'] = set()
198 user.permissions['global'] = set()
199
199
200 #===========================================================================
200 #===========================================================================
201 # fetch default permissions
201 # fetch default permissions
202 #===========================================================================
202 #===========================================================================
203 default_user = UserModel().get_by_username('default', cache=True)
203 default_user = UserModel().get_by_username('default', cache=True)
204
204
205 default_perms = sa.query(RepoToPerm, Repository, Permission)\
205 default_perms = sa.query(RepoToPerm, Repository, Permission)\
206 .join((Repository, RepoToPerm.repository_id == Repository.repo_id))\
206 .join((Repository, RepoToPerm.repository_id == Repository.repo_id))\
207 .join((Permission, RepoToPerm.permission_id == Permission.permission_id))\
207 .join((Permission, RepoToPerm.permission_id == Permission.permission_id))\
208 .filter(RepoToPerm.user == default_user).all()
208 .filter(RepoToPerm.user == default_user).all()
209
209
210 if user.is_admin:
210 if user.is_admin:
211 #=======================================================================
211 #=======================================================================
212 # #admin have all default rights set to admin
212 # #admin have all default rights set to admin
213 #=======================================================================
213 #=======================================================================
214 user.permissions['global'].add('hg.admin')
214 user.permissions['global'].add('hg.admin')
215
215
216 for perm in default_perms:
216 for perm in default_perms:
217 p = 'repository.admin'
217 p = 'repository.admin'
218 user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
218 user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
219
219
220 else:
220 else:
221 #=======================================================================
221 #=======================================================================
222 # set default permissions
222 # set default permissions
223 #=======================================================================
223 #=======================================================================
224
224
225 #default global
225 #default global
226 default_global_perms = sa.query(UserToPerm)\
226 default_global_perms = sa.query(UserToPerm)\
227 .filter(UserToPerm.user == sa.query(User)\
227 .filter(UserToPerm.user == sa.query(User)\
228 .filter(User.username == 'default').one())
228 .filter(User.username == 'default').one())
229
229
230 for perm in default_global_perms:
230 for perm in default_global_perms:
231 user.permissions['global'].add(perm.permission.permission_name)
231 user.permissions['global'].add(perm.permission.permission_name)
232
232
233 #default repositories
233 #default repositories
234 for perm in default_perms:
234 for perm in default_perms:
235 if perm.Repository.private and not perm.Repository.user_id == user.user_id:
235 if perm.Repository.private and not perm.Repository.user_id == user.user_id:
236 #disable defaults for private repos,
236 #disable defaults for private repos,
237 p = 'repository.none'
237 p = 'repository.none'
238 elif perm.Repository.user_id == user.user_id:
238 elif perm.Repository.user_id == user.user_id:
239 #set admin if owner
239 #set admin if owner
240 p = 'repository.admin'
240 p = 'repository.admin'
241 else:
241 else:
242 p = perm.Permission.permission_name
242 p = perm.Permission.permission_name
243
243
244 user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
244 user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
245
245
246 #=======================================================================
246 #=======================================================================
247 # #overwrite default with user permissions if any
247 # #overwrite default with user permissions if any
248 #=======================================================================
248 #=======================================================================
249 user_perms = sa.query(RepoToPerm, Permission, Repository)\
249 user_perms = sa.query(RepoToPerm, Permission, Repository)\
250 .join((Repository, RepoToPerm.repository_id == Repository.repo_id))\
250 .join((Repository, RepoToPerm.repository_id == Repository.repo_id))\
251 .join((Permission, RepoToPerm.permission_id == Permission.permission_id))\
251 .join((Permission, RepoToPerm.permission_id == Permission.permission_id))\
252 .filter(RepoToPerm.user_id == user.user_id).all()
252 .filter(RepoToPerm.user_id == user.user_id).all()
253
253
254 for perm in user_perms:
254 for perm in user_perms:
255 if perm.Repository.user_id == user.user_id:#set admin if owner
255 if perm.Repository.user_id == user.user_id:#set admin if owner
256 p = 'repository.admin'
256 p = 'repository.admin'
257 else:
257 else:
258 p = perm.Permission.permission_name
258 p = perm.Permission.permission_name
259 user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
259 user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
260 meta.Session.remove()
260 meta.Session.remove()
261 return user
261 return user
262
262
263 def get_user(session):
263 def get_user(session):
264 """
264 """
265 Gets user from session, and wraps permissions into user
265 Gets user from session, and wraps permissions into user
266 :param session:
266 :param session:
267 """
267 """
268 user = session.get('rhodecode_user', AuthUser())
268 user = session.get('rhodecode_user', AuthUser())
269 #if the user is not logged in we check for anonymous access
269 #if the user is not logged in we check for anonymous access
270 #if user is logged and it's a default user check if we still have anonymous
270 #if user is logged and it's a default user check if we still have anonymous
271 #access enabled
271 #access enabled
272 if user.user_id is None or user.username == 'default':
272 if user.user_id is None or user.username == 'default':
273 anonymous_user = UserModel().get_by_username('default', cache=True)
273 anonymous_user = UserModel().get_by_username('default', cache=True)
274 if anonymous_user.active is True:
274 if anonymous_user.active is True:
275 #then we set this user is logged in
275 #then we set this user is logged in
276 user.is_authenticated = True
276 user.is_authenticated = True
277 user.user_id = anonymous_user.user_id
277 user.user_id = anonymous_user.user_id
278 else:
278 else:
279 user.is_authenticated = False
279 user.is_authenticated = False
280
280
281 if user.is_authenticated:
281 if user.is_authenticated:
282 user = UserModel().fill_data(user)
282 user = UserModel().fill_data(user)
283
283
284 user = fill_perms(user)
284 user = fill_perms(user)
285 session['rhodecode_user'] = user
285 session['rhodecode_user'] = user
286 session.save()
286 session.save()
287 return user
287 return user
288
288
289 #===============================================================================
289 #===============================================================================
290 # CHECK DECORATORS
290 # CHECK DECORATORS
291 #===============================================================================
291 #===============================================================================
292 class LoginRequired(object):
292 class LoginRequired(object):
293 """Must be logged in to execute this function else redirect to login page"""
293 """Must be logged in to execute this function else redirect to login page"""
294
294
295 def __call__(self, func):
295 def __call__(self, func):
296 return decorator(self.__wrapper, func)
296 return decorator(self.__wrapper, func)
297
297
298 def __wrapper(self, func, *fargs, **fkwargs):
298 def __wrapper(self, func, *fargs, **fkwargs):
299 user = session.get('rhodecode_user', AuthUser())
299 user = session.get('rhodecode_user', AuthUser())
300 log.debug('Checking login required for user:%s', user.username)
300 log.debug('Checking login required for user:%s', user.username)
301 if user.is_authenticated:
301 if user.is_authenticated:
302 log.debug('user %s is authenticated', user.username)
302 log.debug('user %s is authenticated', user.username)
303 return func(*fargs, **fkwargs)
303 return func(*fargs, **fkwargs)
304 else:
304 else:
305 log.warn('user %s not authenticated', user.username)
305 log.warn('user %s not authenticated', user.username)
306
306
307 p = ''
307 p = ''
308 if request.environ.get('SCRIPT_NAME') != '/':
308 if request.environ.get('SCRIPT_NAME') != '/':
309 p += request.environ.get('SCRIPT_NAME')
309 p += request.environ.get('SCRIPT_NAME')
310
310
311 p += request.environ.get('PATH_INFO')
311 p += request.environ.get('PATH_INFO')
312 if request.environ.get('QUERY_STRING'):
312 if request.environ.get('QUERY_STRING'):
313 p += '?' + request.environ.get('QUERY_STRING')
313 p += '?' + request.environ.get('QUERY_STRING')
314
314
315 log.debug('redirecting to login page with %s', p)
315 log.debug('redirecting to login page with %s', p)
316 return redirect(url('login_home', came_from=p))
316 return redirect(url('login_home', came_from=p))
317
317
318 class PermsDecorator(object):
318 class PermsDecorator(object):
319 """Base class for decorators"""
319 """Base class for decorators"""
320
320
321 def __init__(self, *required_perms):
321 def __init__(self, *required_perms):
322 available_perms = config['available_permissions']
322 available_perms = config['available_permissions']
323 for perm in required_perms:
323 for perm in required_perms:
324 if perm not in available_perms:
324 if perm not in available_perms:
325 raise Exception("'%s' permission is not defined" % perm)
325 raise Exception("'%s' permission is not defined" % perm)
326 self.required_perms = set(required_perms)
326 self.required_perms = set(required_perms)
327 self.user_perms = None
327 self.user_perms = None
328
328
329 def __call__(self, func):
329 def __call__(self, func):
330 return decorator(self.__wrapper, func)
330 return decorator(self.__wrapper, func)
331
331
332
332
333 def __wrapper(self, func, *fargs, **fkwargs):
333 def __wrapper(self, func, *fargs, **fkwargs):
334 # _wrapper.__name__ = func.__name__
334 # _wrapper.__name__ = func.__name__
335 # _wrapper.__dict__.update(func.__dict__)
335 # _wrapper.__dict__.update(func.__dict__)
336 # _wrapper.__doc__ = func.__doc__
336 # _wrapper.__doc__ = func.__doc__
337 self.user = session.get('rhodecode_user', AuthUser())
337 self.user = session.get('rhodecode_user', AuthUser())
338 self.user_perms = self.user.permissions
338 self.user_perms = self.user.permissions
339 log.debug('checking %s permissions %s for %s %s',
339 log.debug('checking %s permissions %s for %s %s',
340 self.__class__.__name__, self.required_perms, func.__name__,
340 self.__class__.__name__, self.required_perms, func.__name__,
341 self.user)
341 self.user)
342
342
343 if self.check_permissions():
343 if self.check_permissions():
344 log.debug('Permission granted for %s %s', func.__name__, self.user)
344 log.debug('Permission granted for %s %s', func.__name__, self.user)
345
345
346 return func(*fargs, **fkwargs)
346 return func(*fargs, **fkwargs)
347
347
348 else:
348 else:
349 log.warning('Permission denied for %s %s', func.__name__, self.user)
349 log.warning('Permission denied for %s %s', func.__name__, self.user)
350 #redirect with forbidden ret code
350 #redirect with forbidden ret code
351 return abort(403)
351 return abort(403)
352
352
353
353
354
354
355 def check_permissions(self):
355 def check_permissions(self):
356 """Dummy function for overriding"""
356 """Dummy function for overriding"""
357 raise Exception('You have to write this function in child class')
357 raise Exception('You have to write this function in child class')
358
358
359 class HasPermissionAllDecorator(PermsDecorator):
359 class HasPermissionAllDecorator(PermsDecorator):
360 """Checks for access permission for all given predicates. All of them
360 """Checks for access permission for all given predicates. All of them
361 have to be meet in order to fulfill the request
361 have to be meet in order to fulfill the request
362 """
362 """
363
363
364 def check_permissions(self):
364 def check_permissions(self):
365 if self.required_perms.issubset(self.user_perms.get('global')):
365 if self.required_perms.issubset(self.user_perms.get('global')):
366 return True
366 return True
367 return False
367 return False
368
368
369
369
370 class HasPermissionAnyDecorator(PermsDecorator):
370 class HasPermissionAnyDecorator(PermsDecorator):
371 """Checks for access permission for any of given predicates. In order to
371 """Checks for access permission for any of given predicates. In order to
372 fulfill the request any of predicates must be meet
372 fulfill the request any of predicates must be meet
373 """
373 """
374
374
375 def check_permissions(self):
375 def check_permissions(self):
376 if self.required_perms.intersection(self.user_perms.get('global')):
376 if self.required_perms.intersection(self.user_perms.get('global')):
377 return True
377 return True
378 return False
378 return False
379
379
380 class HasRepoPermissionAllDecorator(PermsDecorator):
380 class HasRepoPermissionAllDecorator(PermsDecorator):
381 """Checks for access permission for all given predicates for specific
381 """Checks for access permission for all given predicates for specific
382 repository. All of them have to be meet in order to fulfill the request
382 repository. All of them have to be meet in order to fulfill the request
383 """
383 """
384
384
385 def check_permissions(self):
385 def check_permissions(self):
386 repo_name = get_repo_slug(request)
386 repo_name = get_repo_slug(request)
387 try:
387 try:
388 user_perms = set([self.user_perms['repositories'][repo_name]])
388 user_perms = set([self.user_perms['repositories'][repo_name]])
389 except KeyError:
389 except KeyError:
390 return False
390 return False
391 if self.required_perms.issubset(user_perms):
391 if self.required_perms.issubset(user_perms):
392 return True
392 return True
393 return False
393 return False
394
394
395
395
396 class HasRepoPermissionAnyDecorator(PermsDecorator):
396 class HasRepoPermissionAnyDecorator(PermsDecorator):
397 """Checks for access permission for any of given predicates for specific
397 """Checks for access permission for any of given predicates for specific
398 repository. In order to fulfill the request any of predicates must be meet
398 repository. In order to fulfill the request any of predicates must be meet
399 """
399 """
400
400
401 def check_permissions(self):
401 def check_permissions(self):
402 repo_name = get_repo_slug(request)
402 repo_name = get_repo_slug(request)
403
403
404 try:
404 try:
405 user_perms = set([self.user_perms['repositories'][repo_name]])
405 user_perms = set([self.user_perms['repositories'][repo_name]])
406 except KeyError:
406 except KeyError:
407 return False
407 return False
408 if self.required_perms.intersection(user_perms):
408 if self.required_perms.intersection(user_perms):
409 return True
409 return True
410 return False
410 return False
411 #===============================================================================
411 #===============================================================================
412 # CHECK FUNCTIONS
412 # CHECK FUNCTIONS
413 #===============================================================================
413 #===============================================================================
414
414
415 class PermsFunction(object):
415 class PermsFunction(object):
416 """Base function for other check functions"""
416 """Base function for other check functions"""
417
417
418 def __init__(self, *perms):
418 def __init__(self, *perms):
419 available_perms = config['available_permissions']
419 available_perms = config['available_permissions']
420
420
421 for perm in perms:
421 for perm in perms:
422 if perm not in available_perms:
422 if perm not in available_perms:
423 raise Exception("'%s' permission in not defined" % perm)
423 raise Exception("'%s' permission in not defined" % perm)
424 self.required_perms = set(perms)
424 self.required_perms = set(perms)
425 self.user_perms = None
425 self.user_perms = None
426 self.granted_for = ''
426 self.granted_for = ''
427 self.repo_name = None
427 self.repo_name = None
428
428
429 def __call__(self, check_Location=''):
429 def __call__(self, check_Location=''):
430 user = session.get('rhodecode_user', False)
430 user = session.get('rhodecode_user', False)
431 if not user:
431 if not user:
432 return False
432 return False
433 self.user_perms = user.permissions
433 self.user_perms = user.permissions
434 self.granted_for = user.username
434 self.granted_for = user.username
435 log.debug('checking %s %s %s', self.__class__.__name__,
435 log.debug('checking %s %s %s', self.__class__.__name__,
436 self.required_perms, user)
436 self.required_perms, user)
437
437
438 if self.check_permissions():
438 if self.check_permissions():
439 log.debug('Permission granted for %s @ %s %s', self.granted_for,
439 log.debug('Permission granted for %s @ %s %s', self.granted_for,
440 check_Location, user)
440 check_Location, user)
441 return True
441 return True
442
442
443 else:
443 else:
444 log.warning('Permission denied for %s @ %s %s', self.granted_for,
444 log.warning('Permission denied for %s @ %s %s', self.granted_for,
445 check_Location, user)
445 check_Location, user)
446 return False
446 return False
447
447
448 def check_permissions(self):
448 def check_permissions(self):
449 """Dummy function for overriding"""
449 """Dummy function for overriding"""
450 raise Exception('You have to write this function in child class')
450 raise Exception('You have to write this function in child class')
451
451
452 class HasPermissionAll(PermsFunction):
452 class HasPermissionAll(PermsFunction):
453 def check_permissions(self):
453 def check_permissions(self):
454 if self.required_perms.issubset(self.user_perms.get('global')):
454 if self.required_perms.issubset(self.user_perms.get('global')):
455 return True
455 return True
456 return False
456 return False
457
457
458 class HasPermissionAny(PermsFunction):
458 class HasPermissionAny(PermsFunction):
459 def check_permissions(self):
459 def check_permissions(self):
460 if self.required_perms.intersection(self.user_perms.get('global')):
460 if self.required_perms.intersection(self.user_perms.get('global')):
461 return True
461 return True
462 return False
462 return False
463
463
464 class HasRepoPermissionAll(PermsFunction):
464 class HasRepoPermissionAll(PermsFunction):
465
465
466 def __call__(self, repo_name=None, check_Location=''):
466 def __call__(self, repo_name=None, check_Location=''):
467 self.repo_name = repo_name
467 self.repo_name = repo_name
468 return super(HasRepoPermissionAll, self).__call__(check_Location)
468 return super(HasRepoPermissionAll, self).__call__(check_Location)
469
469
470 def check_permissions(self):
470 def check_permissions(self):
471 if not self.repo_name:
471 if not self.repo_name:
472 self.repo_name = get_repo_slug(request)
472 self.repo_name = get_repo_slug(request)
473
473
474 try:
474 try:
475 self.user_perms = set([self.user_perms['repositories']\
475 self.user_perms = set([self.user_perms['repositories']\
476 [self.repo_name]])
476 [self.repo_name]])
477 except KeyError:
477 except KeyError:
478 return False
478 return False
479 self.granted_for = self.repo_name
479 self.granted_for = self.repo_name
480 if self.required_perms.issubset(self.user_perms):
480 if self.required_perms.issubset(self.user_perms):
481 return True
481 return True
482 return False
482 return False
483
483
484 class HasRepoPermissionAny(PermsFunction):
484 class HasRepoPermissionAny(PermsFunction):
485
485
486 def __call__(self, repo_name=None, check_Location=''):
486 def __call__(self, repo_name=None, check_Location=''):
487 self.repo_name = repo_name
487 self.repo_name = repo_name
488 return super(HasRepoPermissionAny, self).__call__(check_Location)
488 return super(HasRepoPermissionAny, self).__call__(check_Location)
489
489
490 def check_permissions(self):
490 def check_permissions(self):
491 if not self.repo_name:
491 if not self.repo_name:
492 self.repo_name = get_repo_slug(request)
492 self.repo_name = get_repo_slug(request)
493
493
494 try:
494 try:
495 self.user_perms = set([self.user_perms['repositories']\
495 self.user_perms = set([self.user_perms['repositories']\
496 [self.repo_name]])
496 [self.repo_name]])
497 except KeyError:
497 except KeyError:
498 return False
498 return False
499 self.granted_for = self.repo_name
499 self.granted_for = self.repo_name
500 if self.required_perms.intersection(self.user_perms):
500 if self.required_perms.intersection(self.user_perms):
501 return True
501 return True
502 return False
502 return False
503
503
504 #===============================================================================
504 #===============================================================================
505 # SPECIAL VERSION TO HANDLE MIDDLEWARE AUTH
505 # SPECIAL VERSION TO HANDLE MIDDLEWARE AUTH
506 #===============================================================================
506 #===============================================================================
507
507
508 class HasPermissionAnyMiddleware(object):
508 class HasPermissionAnyMiddleware(object):
509 def __init__(self, *perms):
509 def __init__(self, *perms):
510 self.required_perms = set(perms)
510 self.required_perms = set(perms)
511
511
512 def __call__(self, user, repo_name):
512 def __call__(self, user, repo_name):
513 usr = AuthUser()
513 usr = AuthUser()
514 usr.user_id = user.user_id
514 usr.user_id = user.user_id
515 usr.username = user.username
515 usr.username = user.username
516 usr.is_admin = user.admin
516 usr.is_admin = user.admin
517
517
518 try:
518 try:
519 self.user_perms = set([fill_perms(usr)\
519 self.user_perms = set([fill_perms(usr)\
520 .permissions['repositories'][repo_name]])
520 .permissions['repositories'][repo_name]])
521 except:
521 except:
522 self.user_perms = set()
522 self.user_perms = set()
523 self.granted_for = ''
523 self.granted_for = ''
524 self.username = user.username
524 self.username = user.username
525 self.repo_name = repo_name
525 self.repo_name = repo_name
526 return self.check_permissions()
526 return self.check_permissions()
527
527
528 def check_permissions(self):
528 def check_permissions(self):
529 log.debug('checking mercurial protocol '
529 log.debug('checking mercurial protocol '
530 'permissions for user:%s repository:%s',
530 'permissions for user:%s repository:%s',
531 self.username, self.repo_name)
531 self.username, self.repo_name)
532 if self.required_perms.intersection(self.user_perms):
532 if self.required_perms.intersection(self.user_perms):
533 log.debug('permission granted')
533 log.debug('permission granted')
534 return True
534 return True
535 log.debug('permission denied')
535 log.debug('permission denied')
536 return False
536 return False
@@ -1,2381 +1,2381 b''
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
1 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td {
2 border:0;
2 border:0;
3 outline:0;
3 outline:0;
4 font-size:100%;
4 font-size:100%;
5 vertical-align:baseline;
5 vertical-align:baseline;
6 background:transparent;
6 background:transparent;
7 margin:0;
7 margin:0;
8 padding:0;
8 padding:0;
9 }
9 }
10
10
11 body {
11 body {
12 line-height:1;
12 line-height:1;
13 height:100%;
13 height:100%;
14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
14 background:url("../images/background.png") repeat scroll 0 0 #B0B0B0;
15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
15 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
16 font-size:12px;
16 font-size:12px;
17 color:#000;
17 color:#000;
18 margin:0;
18 margin:0;
19 padding:0;
19 padding:0;
20 }
20 }
21
21
22 ol,ul {
22 ol,ul {
23 list-style:none;
23 list-style:none;
24 }
24 }
25
25
26 blockquote,q {
26 blockquote,q {
27 quotes:none;
27 quotes:none;
28 }
28 }
29
29
30 blockquote:before,blockquote:after,q:before,q:after {
30 blockquote:before,blockquote:after,q:before,q:after {
31 content:none;
31 content:none;
32 }
32 }
33
33
34 :focus {
34 :focus {
35 outline:0;
35 outline:0;
36 }
36 }
37
37
38 del {
38 del {
39 text-decoration:line-through;
39 text-decoration:line-through;
40 }
40 }
41
41
42 table {
42 table {
43 border-collapse:collapse;
43 border-collapse:collapse;
44 border-spacing:0;
44 border-spacing:0;
45 }
45 }
46
46
47 html {
47 html {
48 height:100%;
48 height:100%;
49 }
49 }
50
50
51 a {
51 a {
52 color:#003367;
52 color:#003367;
53 text-decoration:none;
53 text-decoration:none;
54 cursor:pointer;
54 cursor:pointer;
55 font-weight:700;
55 font-weight:700;
56 }
56 }
57
57
58 a:hover {
58 a:hover {
59 color:#316293;
59 color:#316293;
60 text-decoration:underline;
60 text-decoration:underline;
61 }
61 }
62
62
63 h1,h2,h3,h4,h5,h6 {
63 h1,h2,h3,h4,h5,h6 {
64 color:#292929;
64 color:#292929;
65 font-weight:700;
65 font-weight:700;
66 }
66 }
67
67
68 h1 {
68 h1 {
69 font-size:22px;
69 font-size:22px;
70 }
70 }
71
71
72 h2 {
72 h2 {
73 font-size:20px;
73 font-size:20px;
74 }
74 }
75
75
76 h3 {
76 h3 {
77 font-size:18px;
77 font-size:18px;
78 }
78 }
79
79
80 h4 {
80 h4 {
81 font-size:16px;
81 font-size:16px;
82 }
82 }
83
83
84 h5 {
84 h5 {
85 font-size:14px;
85 font-size:14px;
86 }
86 }
87
87
88 h6 {
88 h6 {
89 font-size:11px;
89 font-size:11px;
90 }
90 }
91
91
92 ul.circle {
92 ul.circle {
93 list-style-type:circle;
93 list-style-type:circle;
94 }
94 }
95
95
96 ul.disc {
96 ul.disc {
97 list-style-type:disc;
97 list-style-type:disc;
98 }
98 }
99
99
100 ul.square {
100 ul.square {
101 list-style-type:square;
101 list-style-type:square;
102 }
102 }
103
103
104 ol.lower-roman {
104 ol.lower-roman {
105 list-style-type:lower-roman;
105 list-style-type:lower-roman;
106 }
106 }
107
107
108 ol.upper-roman {
108 ol.upper-roman {
109 list-style-type:upper-roman;
109 list-style-type:upper-roman;
110 }
110 }
111
111
112 ol.lower-alpha {
112 ol.lower-alpha {
113 list-style-type:lower-alpha;
113 list-style-type:lower-alpha;
114 }
114 }
115
115
116 ol.upper-alpha {
116 ol.upper-alpha {
117 list-style-type:upper-alpha;
117 list-style-type:upper-alpha;
118 }
118 }
119
119
120 ol.decimal {
120 ol.decimal {
121 list-style-type:decimal;
121 list-style-type:decimal;
122 }
122 }
123
123
124 div.color {
124 div.color {
125 clear:both;
125 clear:both;
126 overflow:hidden;
126 overflow:hidden;
127 position:absolute;
127 position:absolute;
128 background:#FFF;
128 background:#FFF;
129 margin:7px 0 0 60px;
129 margin:7px 0 0 60px;
130 padding:1px 1px 1px 0;
130 padding:1px 1px 1px 0;
131 }
131 }
132
132
133 div.color a {
133 div.color a {
134 width:15px;
134 width:15px;
135 height:15px;
135 height:15px;
136 display:block;
136 display:block;
137 float:left;
137 float:left;
138 margin:0 0 0 1px;
138 margin:0 0 0 1px;
139 padding:0;
139 padding:0;
140 }
140 }
141
141
142 div.options {
142 div.options {
143 clear:both;
143 clear:both;
144 overflow:hidden;
144 overflow:hidden;
145 position:absolute;
145 position:absolute;
146 background:#FFF;
146 background:#FFF;
147 margin:7px 0 0 162px;
147 margin:7px 0 0 162px;
148 padding:0;
148 padding:0;
149 }
149 }
150
150
151 div.options a {
151 div.options a {
152 height:1%;
152 height:1%;
153 display:block;
153 display:block;
154 text-decoration:none;
154 text-decoration:none;
155 margin:0;
155 margin:0;
156 padding:3px 8px;
156 padding:3px 8px;
157 }
157 }
158
158
159 .top-left-rounded-corner {
159 .top-left-rounded-corner {
160 -webkit-border-top-left-radius: 8px;
160 -webkit-border-top-left-radius: 8px;
161 -khtml-border-radius-topleft: 8px;
161 -khtml-border-radius-topleft: 8px;
162 -moz-border-radius-topleft: 8px;
162 -moz-border-radius-topleft: 8px;
163 border-top-left-radius: 8px;
163 border-top-left-radius: 8px;
164 }
164 }
165
165
166 .top-right-rounded-corner {
166 .top-right-rounded-corner {
167 -webkit-border-top-right-radius: 8px;
167 -webkit-border-top-right-radius: 8px;
168 -khtml-border-radius-topright: 8px;
168 -khtml-border-radius-topright: 8px;
169 -moz-border-radius-topright: 8px;
169 -moz-border-radius-topright: 8px;
170 border-top-right-radius: 8px;
170 border-top-right-radius: 8px;
171 }
171 }
172
172
173 .bottom-left-rounded-corner {
173 .bottom-left-rounded-corner {
174 -webkit-border-bottom-left-radius: 8px;
174 -webkit-border-bottom-left-radius: 8px;
175 -khtml-border-radius-bottomleft: 8px;
175 -khtml-border-radius-bottomleft: 8px;
176 -moz-border-radius-bottomleft: 8px;
176 -moz-border-radius-bottomleft: 8px;
177 border-bottom-left-radius: 8px;
177 border-bottom-left-radius: 8px;
178 }
178 }
179
179
180 .bottom-right-rounded-corner {
180 .bottom-right-rounded-corner {
181 -webkit-border-bottom-right-radius: 8px;
181 -webkit-border-bottom-right-radius: 8px;
182 -khtml-border-radius-bottomright: 8px;
182 -khtml-border-radius-bottomright: 8px;
183 -moz-border-radius-bottomright: 8px;
183 -moz-border-radius-bottomright: 8px;
184 border-bottom-right-radius: 8px;
184 border-bottom-right-radius: 8px;
185 }
185 }
186
186
187
187
188 #header {
188 #header {
189 margin:0;
189 margin:0;
190 padding:0 30px;
190 padding:0 30px;
191 }
191 }
192
192
193 #header ul#logged-user li {
193 #header ul#logged-user li {
194 list-style:none;
194 list-style:none;
195 float:left;
195 float:left;
196 border-left:1px solid #bbb;
196 border-left:1px solid #bbb;
197 border-right:1px solid #a5a5a5;
197 border-right:1px solid #a5a5a5;
198 margin:-2px 0 0;
198 margin:-2px 0 0;
199 padding:10px 12px;
199 padding:10px 12px;
200 }
200 }
201
201
202 #header ul#logged-user li.first {
202 #header ul#logged-user li.first {
203 border-left:none;
203 border-left:none;
204 margin:-6px;
204 margin:-6px;
205 }
205 }
206
206
207 #header ul#logged-user li.first div.account {
207 #header ul#logged-user li.first div.account {
208 padding-top:4px;
208 padding-top:4px;
209 float:left;
209 float:left;
210 }
210 }
211
211
212 #header ul#logged-user li.last {
212 #header ul#logged-user li.last {
213 border-right:none;
213 border-right:none;
214 }
214 }
215
215
216 #header ul#logged-user li a {
216 #header ul#logged-user li a {
217 color:#4e4e4e;
217 color:#4e4e4e;
218 font-weight:700;
218 font-weight:700;
219 text-decoration:none;
219 text-decoration:none;
220 }
220 }
221
221
222 #header ul#logged-user li a:hover {
222 #header ul#logged-user li a:hover {
223 color:#376ea6;
223 color:#376ea6;
224 text-decoration:underline;
224 text-decoration:underline;
225 }
225 }
226
226
227 #header ul#logged-user li.highlight a {
227 #header ul#logged-user li.highlight a {
228 color:#fff;
228 color:#fff;
229 }
229 }
230
230
231 #header ul#logged-user li.highlight a:hover {
231 #header ul#logged-user li.highlight a:hover {
232 color:#376ea6;
232 color:#376ea6;
233 }
233 }
234
234
235 #header #header-inner {
235 #header #header-inner {
236 height:40px;
236 height:40px;
237 clear:both;
237 clear:both;
238 position:relative;
238 position:relative;
239 background:#003367 url("../images/header_inner.png") repeat-x;
239 background:#003367 url("../images/header_inner.png") repeat-x;
240 border-bottom:2px solid #fff;
240 border-bottom:2px solid #fff;
241 margin:0;
241 margin:0;
242 padding:0;
242 padding:0;
243 }
243 }
244
244
245 #header #header-inner #home a {
245 #header #header-inner #home a {
246 height:40px;
246 height:40px;
247 width:46px;
247 width:46px;
248 display:block;
248 display:block;
249 background:url("../images/button_home.png");
249 background:url("../images/button_home.png");
250 background-position:0 0;
250 background-position:0 0;
251 margin:0;
251 margin:0;
252 padding:0;
252 padding:0;
253 }
253 }
254
254
255 #header #header-inner #home a:hover {
255 #header #header-inner #home a:hover {
256 background-position:0 -40px;
256 background-position:0 -40px;
257 }
257 }
258
258
259 #header #header-inner #logo h1 {
259 #header #header-inner #logo h1 {
260 color:#FFF;
260 color:#FFF;
261 font-size:18px;
261 font-size:18px;
262 margin:10px 0 0 13px;
262 margin:10px 0 0 13px;
263 padding:0;
263 padding:0;
264 }
264 }
265
265
266 #header #header-inner #logo a {
266 #header #header-inner #logo a {
267 color:#fff;
267 color:#fff;
268 text-decoration:none;
268 text-decoration:none;
269 }
269 }
270
270
271 #header #header-inner #logo a:hover {
271 #header #header-inner #logo a:hover {
272 color:#bfe3ff;
272 color:#bfe3ff;
273 }
273 }
274
274
275 #header #header-inner #quick,#header #header-inner #quick ul {
275 #header #header-inner #quick,#header #header-inner #quick ul {
276 position:relative;
276 position:relative;
277 float:right;
277 float:right;
278 list-style-type:none;
278 list-style-type:none;
279 list-style-position:outside;
279 list-style-position:outside;
280 margin:10px 5px 0 0;
280 margin:10px 5px 0 0;
281 padding:0;
281 padding:0;
282 }
282 }
283
283
284 #header #header-inner #quick li {
284 #header #header-inner #quick li {
285 position:relative;
285 position:relative;
286 float:left;
286 float:left;
287 margin:0 5px 0 0;
287 margin:0 5px 0 0;
288 padding:0;
288 padding:0;
289 }
289 }
290
290
291 #header #header-inner #quick li a {
291 #header #header-inner #quick li a {
292 top:0;
292 top:0;
293 left:0;
293 left:0;
294 height:1%;
294 height:1%;
295 display:block;
295 display:block;
296 clear:both;
296 clear:both;
297 overflow:hidden;
297 overflow:hidden;
298 color:#FFF;
298 color:#FFF;
299 font-weight:700;
299 font-weight:700;
300 text-decoration:none;
300 text-decoration:none;
301 background:#369 url("../../images/quick_l.png") no-repeat top left;
301 background:#369 url("../../images/quick_l.png") no-repeat top left;
302 padding:0;
302 padding:0;
303 }
303 }
304
304
305 #header #header-inner #quick li span.short {
305 #header #header-inner #quick li span.short {
306 padding:9px 6px 8px 6px;
306 padding:9px 6px 8px 6px;
307 }
307 }
308
308
309 #header #header-inner #quick li span {
309 #header #header-inner #quick li span {
310 top:0;
310 top:0;
311 right:0;
311 right:0;
312 height:1%;
312 height:1%;
313 display:block;
313 display:block;
314 float:left;
314 float:left;
315 background:url("../../images/quick_r.png") no-repeat top right;
315 background:url("../../images/quick_r.png") no-repeat top right;
316 border-left:1px solid #3f6f9f;
316 border-left:1px solid #3f6f9f;
317 margin:0;
317 margin:0;
318 padding:10px 12px 8px 10px;
318 padding:10px 12px 8px 10px;
319 }
319 }
320
320
321 #header #header-inner #quick li span.normal {
321 #header #header-inner #quick li span.normal {
322 border:none;
322 border:none;
323 padding:10px 12px 8px;
323 padding:10px 12px 8px;
324 }
324 }
325
325
326 #header #header-inner #quick li span.icon {
326 #header #header-inner #quick li span.icon {
327 top:0;
327 top:0;
328 left:0;
328 left:0;
329 border-left:none;
329 border-left:none;
330 background:url("../../images/quick_l.png") no-repeat top left;
330 background:url("../../images/quick_l.png") no-repeat top left;
331 border-right:1px solid #2e5c89;
331 border-right:1px solid #2e5c89;
332 padding:8px 8px 4px;
332 padding:8px 8px 4px;
333 }
333 }
334
334
335 #header #header-inner #quick li span.icon_short {
335 #header #header-inner #quick li span.icon_short {
336 top:0;
336 top:0;
337 left:0;
337 left:0;
338 border-left:none;
338 border-left:none;
339 background:url("../../images/quick_l.png") no-repeat top left;
339 background:url("../../images/quick_l.png") no-repeat top left;
340 border-right:1px solid #2e5c89;
340 border-right:1px solid #2e5c89;
341 padding:9px 4px 4px;
341 padding:9px 4px 4px;
342 }
342 }
343
343
344 #header #header-inner #quick li a:hover {
344 #header #header-inner #quick li a:hover {
345 background:#4e4e4e url("../../images/quick_l_selected.png") no-repeat top left;
345 background:#4e4e4e url("../../images/quick_l_selected.png") no-repeat top left;
346 }
346 }
347
347
348 #header #header-inner #quick li a:hover span {
348 #header #header-inner #quick li a:hover span {
349 border-left:1px solid #545454;
349 border-left:1px solid #545454;
350 background:url("../../images/quick_r_selected.png") no-repeat top right;
350 background:url("../../images/quick_r_selected.png") no-repeat top right;
351 }
351 }
352
352
353 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
353 #header #header-inner #quick li a:hover span.icon,#header #header-inner #quick li a:hover span.icon_short {
354 border-left:none;
354 border-left:none;
355 border-right:1px solid #464646;
355 border-right:1px solid #464646;
356 background:url("../../images/quick_l_selected.png") no-repeat top left;
356 background:url("../../images/quick_l_selected.png") no-repeat top left;
357 }
357 }
358
358
359
359
360 #header #header-inner #quick ul {
360 #header #header-inner #quick ul {
361 top:29px;
361 top:29px;
362 right:0;
362 right:0;
363 min-width:200px;
363 min-width:200px;
364 display:none;
364 display:none;
365 position:absolute;
365 position:absolute;
366 background:#FFF;
366 background:#FFF;
367 border:1px solid #666;
367 border:1px solid #666;
368 border-top:1px solid #003367;
368 border-top:1px solid #003367;
369 z-index:100;
369 z-index:100;
370 margin:0;
370 margin:0;
371 padding:0;
371 padding:0;
372 }
372 }
373
373
374 #header #header-inner #quick ul.repo_switcher {
374 #header #header-inner #quick ul.repo_switcher {
375 max-height:275px;
375 max-height:275px;
376 overflow-x:hidden;
376 overflow-x:hidden;
377 overflow-y:auto;
377 overflow-y:auto;
378 }
378 }
379
379
380 #header #header-inner #quick .repo_switcher_type{
380 #header #header-inner #quick .repo_switcher_type{
381 position:absolute;
381 position:absolute;
382 left:0;
382 left:0;
383 top:9px;
383 top:9px;
384
384
385 }
385 }
386 #header #header-inner #quick li ul li {
386 #header #header-inner #quick li ul li {
387 border-bottom:1px solid #ddd;
387 border-bottom:1px solid #ddd;
388 }
388 }
389
389
390 #header #header-inner #quick li ul li a {
390 #header #header-inner #quick li ul li a {
391 width:182px;
391 width:182px;
392 height:auto;
392 height:auto;
393 display:block;
393 display:block;
394 float:left;
394 float:left;
395 background:#FFF;
395 background:#FFF;
396 color:#003367;
396 color:#003367;
397 font-weight:400;
397 font-weight:400;
398 margin:0;
398 margin:0;
399 padding:7px 9px;
399 padding:7px 9px;
400 }
400 }
401
401
402 #header #header-inner #quick li ul li a:hover {
402 #header #header-inner #quick li ul li a:hover {
403 color:#000;
403 color:#000;
404 background:#FFF;
404 background:#FFF;
405 }
405 }
406
406
407 #header #header-inner #quick ul ul {
407 #header #header-inner #quick ul ul {
408 top:auto;
408 top:auto;
409 }
409 }
410
410
411 #header #header-inner #quick li ul ul {
411 #header #header-inner #quick li ul ul {
412 right:200px;
412 right:200px;
413 max-height:275px;
413 max-height:275px;
414 overflow:auto;
414 overflow:auto;
415 overflow-x:hidden;
415 overflow-x:hidden;
416 white-space:normal;
416 white-space:normal;
417 }
417 }
418
418
419 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
419 #header #header-inner #quick li ul li a.journal,#header #header-inner #quick li ul li a.journal:hover {
420 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
420 background:url("../images/icons/book.png") no-repeat scroll 4px 9px #FFF;
421 width:167px;
421 width:167px;
422 margin:0;
422 margin:0;
423 padding:12px 9px 7px 24px;
423 padding:12px 9px 7px 24px;
424 }
424 }
425
425
426 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
426 #header #header-inner #quick li ul li a.private_repo,#header #header-inner #quick li ul li a.private_repo:hover {
427 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
427 background:url("../images/icons/lock.png") no-repeat scroll 4px 9px #FFF;
428 min-width:167px;
428 min-width:167px;
429 margin:0;
429 margin:0;
430 padding:12px 9px 7px 24px;
430 padding:12px 9px 7px 24px;
431 }
431 }
432
432
433 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
433 #header #header-inner #quick li ul li a.public_repo,#header #header-inner #quick li ul li a.public_repo:hover {
434 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
434 background:url("../images/icons/lock_open.png") no-repeat scroll 4px 9px #FFF;
435 min-width:167px;
435 min-width:167px;
436 margin:0;
436 margin:0;
437 padding:12px 9px 7px 24px;
437 padding:12px 9px 7px 24px;
438 }
438 }
439
439
440 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
440 #header #header-inner #quick li ul li a.hg,#header #header-inner #quick li ul li a.hg:hover {
441 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
441 background:url("../images/icons/hgicon.png") no-repeat scroll 4px 9px #FFF;
442 min-width:167px;
442 min-width:167px;
443 margin:0 0 0 14px;
443 margin:0 0 0 14px;
444 padding:12px 9px 7px 24px;
444 padding:12px 9px 7px 24px;
445 }
445 }
446
446
447 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
447 #header #header-inner #quick li ul li a.git,#header #header-inner #quick li ul li a.git:hover {
448 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
448 background:url("../images/icons/giticon.png") no-repeat scroll 4px 9px #FFF;
449 min-width:167px;
449 min-width:167px;
450 margin:0 0 0 14px;
450 margin:0 0 0 14px;
451 padding:12px 9px 7px 24px;
451 padding:12px 9px 7px 24px;
452 }
452 }
453
453
454 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
454 #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover {
455 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
455 background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF;
456 width:167px;
456 width:167px;
457 margin:0;
457 margin:0;
458 padding:12px 9px 7px 24px;
458 padding:12px 9px 7px 24px;
459 }
459 }
460
460
461 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
461 #header #header-inner #quick li ul li a.users,#header #header-inner #quick li ul li a.users:hover {
462 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
462 background:#FFF url("../images/icons/user_edit.png") no-repeat 4px 9px;
463 width:167px;
463 width:167px;
464 margin:0;
464 margin:0;
465 padding:12px 9px 7px 24px;
465 padding:12px 9px 7px 24px;
466 }
466 }
467
467
468 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
468 #header #header-inner #quick li ul li a.settings,#header #header-inner #quick li ul li a.settings:hover {
469 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
469 background:#FFF url("../images/icons/cog.png") no-repeat 4px 9px;
470 width:167px;
470 width:167px;
471 margin:0;
471 margin:0;
472 padding:12px 9px 7px 24px;
472 padding:12px 9px 7px 24px;
473 }
473 }
474
474
475 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
475 #header #header-inner #quick li ul li a.permissions,#header #header-inner #quick li ul li a.permissions:hover {
476 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
476 background:#FFF url("../images/icons/key.png") no-repeat 4px 9px;
477 width:167px;
477 width:167px;
478 margin:0;
478 margin:0;
479 padding:12px 9px 7px 24px;
479 padding:12px 9px 7px 24px;
480 }
480 }
481
481
482 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
482 #header #header-inner #quick li ul li a.fork,#header #header-inner #quick li ul li a.fork:hover {
483 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
483 background:#FFF url("../images/icons/arrow_divide.png") no-repeat 4px 9px;
484 width:167px;
484 width:167px;
485 margin:0;
485 margin:0;
486 padding:12px 9px 7px 24px;
486 padding:12px 9px 7px 24px;
487 }
487 }
488
488
489 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
489 #header #header-inner #quick li ul li a.search,#header #header-inner #quick li ul li a.search:hover {
490 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
490 background:#FFF url("../images/icons/search_16.png") no-repeat 4px 9px;
491 width:167px;
491 width:167px;
492 margin:0;
492 margin:0;
493 padding:12px 9px 7px 24px;
493 padding:12px 9px 7px 24px;
494 }
494 }
495
495
496 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
496 #header #header-inner #quick li ul li a.delete,#header #header-inner #quick li ul li a.delete:hover {
497 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
497 background:#FFF url("../images/icons/delete.png") no-repeat 4px 9px;
498 width:167px;
498 width:167px;
499 margin:0;
499 margin:0;
500 padding:12px 9px 7px 24px;
500 padding:12px 9px 7px 24px;
501 }
501 }
502
502
503 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
503 #header #header-inner #quick li ul li a.branches,#header #header-inner #quick li ul li a.branches:hover {
504 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
504 background:#FFF url("../images/icons/arrow_branch.png") no-repeat 4px 9px;
505 width:167px;
505 width:167px;
506 margin:0;
506 margin:0;
507 padding:12px 9px 7px 24px;
507 padding:12px 9px 7px 24px;
508 }
508 }
509
509
510 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
510 #header #header-inner #quick li ul li a.tags,#header #header-inner #quick li ul li a.tags:hover {
511 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
511 background:#FFF url("../images/icons/tag_blue.png") no-repeat 4px 9px;
512 width:167px;
512 width:167px;
513 margin:0;
513 margin:0;
514 padding:12px 9px 7px 24px;
514 padding:12px 9px 7px 24px;
515 }
515 }
516
516
517 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
517 #header #header-inner #quick li ul li a.admin,#header #header-inner #quick li ul li a.admin:hover {
518 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
518 background:#FFF url("../images/icons/cog_edit.png") no-repeat 4px 9px;
519 width:167px;
519 width:167px;
520 margin:0;
520 margin:0;
521 padding:12px 9px 7px 24px;
521 padding:12px 9px 7px 24px;
522 }
522 }
523
523
524 #content #left {
524 #content #left {
525 left:0;
525 left:0;
526 width:280px;
526 width:280px;
527 position:absolute;
527 position:absolute;
528 }
528 }
529
529
530 #content #right {
530 #content #right {
531 margin:0 60px 10px 290px;
531 margin:0 60px 10px 290px;
532 }
532 }
533
533
534 #content div.box {
534 #content div.box {
535 clear:both;
535 clear:both;
536 overflow:hidden;
536 overflow:hidden;
537 background:#fff;
537 background:#fff;
538 margin:0 0 10px;
538 margin:0 0 10px;
539 padding:0 0 10px;
539 padding:0 0 10px;
540 }
540 }
541
541
542 #content div.box-left {
542 #content div.box-left {
543 width:49%;
543 width:49%;
544 clear:none;
544 clear:none;
545 float:left;
545 float:left;
546 margin:0 0 10px;
546 margin:0 0 10px;
547 }
547 }
548
548
549 #content div.box-right {
549 #content div.box-right {
550 width:49%;
550 width:49%;
551 clear:none;
551 clear:none;
552 float:right;
552 float:right;
553 margin:0 0 10px;
553 margin:0 0 10px;
554 }
554 }
555
555
556 #content div.box div.title {
556 #content div.box div.title {
557 clear:both;
557 clear:both;
558 overflow:hidden;
558 overflow:hidden;
559 background:#369 url("../images/header_inner.png") repeat-x;
559 background:#369 url("../images/header_inner.png") repeat-x;
560 margin:0 0 20px;
560 margin:0 0 20px;
561 padding:0;
561 padding:0;
562 }
562 }
563
563
564 #content div.box div.title h5 {
564 #content div.box div.title h5 {
565 float:left;
565 float:left;
566 border:none;
566 border:none;
567 color:#fff;
567 color:#fff;
568 text-transform:uppercase;
568 text-transform:uppercase;
569 margin:0;
569 margin:0;
570 padding:11px 0 11px 10px;
570 padding:11px 0 11px 10px;
571 }
571 }
572
572
573 #content div.box div.title ul.links li {
573 #content div.box div.title ul.links li {
574 list-style:none;
574 list-style:none;
575 float:left;
575 float:left;
576 margin:0;
576 margin:0;
577 padding:0;
577 padding:0;
578 }
578 }
579
579
580 #content div.box div.title ul.links li a {
580 #content div.box div.title ul.links li a {
581 height:1%;
581 height:1%;
582 display:block;
582 display:block;
583 float:left;
583 float:left;
584 border-left:1px solid #316293;
584 border-left:1px solid #316293;
585 color:#fff;
585 color:#fff;
586 font-size:11px;
586 font-size:11px;
587 font-weight:700;
587 font-weight:700;
588 text-decoration:none;
588 text-decoration:none;
589 margin:0;
589 margin:0;
590 padding:13px 16px 12px;
590 padding:13px 16px 12px;
591 }
591 }
592
592
593 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
593 #content div.box h1,#content div.box h2,#content div.box h3,#content div.box h4,#content div.box h5,#content div.box h6 {
594 clear:both;
594 clear:both;
595 overflow:hidden;
595 overflow:hidden;
596 border-bottom:1px solid #DDD;
596 border-bottom:1px solid #DDD;
597 margin:10px 20px;
597 margin:10px 20px;
598 padding:0 0 15px;
598 padding:0 0 15px;
599 }
599 }
600
600
601 #content div.box p {
601 #content div.box p {
602 color:#5f5f5f;
602 color:#5f5f5f;
603 font-size:12px;
603 font-size:12px;
604 line-height:150%;
604 line-height:150%;
605 margin:0 24px 10px;
605 margin:0 24px 10px;
606 padding:0;
606 padding:0;
607 }
607 }
608
608
609 #content div.box blockquote {
609 #content div.box blockquote {
610 border-left:4px solid #DDD;
610 border-left:4px solid #DDD;
611 color:#5f5f5f;
611 color:#5f5f5f;
612 font-size:11px;
612 font-size:11px;
613 line-height:150%;
613 line-height:150%;
614 margin:0 34px;
614 margin:0 34px;
615 padding:0 0 0 14px;
615 padding:0 0 0 14px;
616 }
616 }
617
617
618 #content div.box blockquote p {
618 #content div.box blockquote p {
619 margin:10px 0;
619 margin:10px 0;
620 padding:0;
620 padding:0;
621 }
621 }
622
622
623 #content div.box dl {
623 #content div.box dl {
624 margin:10px 24px;
624 margin:10px 24px;
625 }
625 }
626
626
627 #content div.box dt {
627 #content div.box dt {
628 font-size:12px;
628 font-size:12px;
629 margin:0;
629 margin:0;
630 }
630 }
631
631
632 #content div.box dd {
632 #content div.box dd {
633 font-size:12px;
633 font-size:12px;
634 margin:0;
634 margin:0;
635 padding:8px 0 8px 15px;
635 padding:8px 0 8px 15px;
636 }
636 }
637
637
638 #content div.box li {
638 #content div.box li {
639 font-size:12px;
639 font-size:12px;
640 padding:4px 0;
640 padding:4px 0;
641 }
641 }
642
642
643 #content div.box ul.disc,#content div.box ul.circle {
643 #content div.box ul.disc,#content div.box ul.circle {
644 margin:10px 24px 10px 38px;
644 margin:10px 24px 10px 38px;
645 }
645 }
646
646
647 #content div.box ul.square {
647 #content div.box ul.square {
648 margin:10px 24px 10px 40px;
648 margin:10px 24px 10px 40px;
649 }
649 }
650
650
651 #content div.box img.left {
651 #content div.box img.left {
652 border:none;
652 border:none;
653 float:left;
653 float:left;
654 margin:10px 10px 10px 0;
654 margin:10px 10px 10px 0;
655 }
655 }
656
656
657 #content div.box img.right {
657 #content div.box img.right {
658 border:none;
658 border:none;
659 float:right;
659 float:right;
660 margin:10px 0 10px 10px;
660 margin:10px 0 10px 10px;
661 }
661 }
662
662
663 #content div.box div.messages {
663 #content div.box div.messages {
664 clear:both;
664 clear:both;
665 overflow:hidden;
665 overflow:hidden;
666 margin:0 20px;
666 margin:0 20px;
667 padding:0;
667 padding:0;
668 }
668 }
669
669
670 #content div.box div.message {
670 #content div.box div.message {
671 clear:both;
671 clear:both;
672 overflow:hidden;
672 overflow:hidden;
673 margin:0;
673 margin:0;
674 padding:10px 0;
674 padding:10px 0;
675 }
675 }
676
676
677 #content div.box div.message a {
677 #content div.box div.message a {
678 font-weight:400 !important;
678 font-weight:400 !important;
679 }
679 }
680
680
681 #content div.box div.message div.image {
681 #content div.box div.message div.image {
682 float:left;
682 float:left;
683 margin:9px 0 0 5px;
683 margin:9px 0 0 5px;
684 padding:6px;
684 padding:6px;
685 }
685 }
686
686
687 #content div.box div.message div.image img {
687 #content div.box div.message div.image img {
688 vertical-align:middle;
688 vertical-align:middle;
689 margin:0;
689 margin:0;
690 }
690 }
691
691
692 #content div.box div.message div.text {
692 #content div.box div.message div.text {
693 float:left;
693 float:left;
694 margin:0;
694 margin:0;
695 padding:9px 6px;
695 padding:9px 6px;
696 }
696 }
697
697
698 #content div.box div.message div.dismiss a {
698 #content div.box div.message div.dismiss a {
699 height:16px;
699 height:16px;
700 width:16px;
700 width:16px;
701 display:block;
701 display:block;
702 background:url("../images/icons/cross.png") no-repeat;
702 background:url("../images/icons/cross.png") no-repeat;
703 margin:15px 14px 0 0;
703 margin:15px 14px 0 0;
704 padding:0;
704 padding:0;
705 }
705 }
706
706
707 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 {
707 #content div.box div.message div.text h1,#content div.box div.message div.text h2,#content div.box div.message div.text h3,#content div.box div.message div.text h4,#content div.box div.message div.text h5,#content div.box div.message div.text h6 {
708 border:none;
708 border:none;
709 margin:0;
709 margin:0;
710 padding:0;
710 padding:0;
711 }
711 }
712
712
713 #content div.box div.message div.text span {
713 #content div.box div.message div.text span {
714 height:1%;
714 height:1%;
715 display:block;
715 display:block;
716 margin:0;
716 margin:0;
717 padding:5px 0 0;
717 padding:5px 0 0;
718 }
718 }
719
719
720 #content div.box div.message-error {
720 #content div.box div.message-error {
721 height:1%;
721 height:1%;
722 clear:both;
722 clear:both;
723 overflow:hidden;
723 overflow:hidden;
724 background:#FBE3E4;
724 background:#FBE3E4;
725 border:1px solid #FBC2C4;
725 border:1px solid #FBC2C4;
726 color:#860006;
726 color:#860006;
727 }
727 }
728
728
729 #content div.box div.message-error h6 {
729 #content div.box div.message-error h6 {
730 color:#860006;
730 color:#860006;
731 }
731 }
732
732
733 #content div.box div.message-warning {
733 #content div.box div.message-warning {
734 height:1%;
734 height:1%;
735 clear:both;
735 clear:both;
736 overflow:hidden;
736 overflow:hidden;
737 background:#FFF6BF;
737 background:#FFF6BF;
738 border:1px solid #FFD324;
738 border:1px solid #FFD324;
739 color:#5f5200;
739 color:#5f5200;
740 }
740 }
741
741
742 #content div.box div.message-warning h6 {
742 #content div.box div.message-warning h6 {
743 color:#5f5200;
743 color:#5f5200;
744 }
744 }
745
745
746 #content div.box div.message-notice {
746 #content div.box div.message-notice {
747 height:1%;
747 height:1%;
748 clear:both;
748 clear:both;
749 overflow:hidden;
749 overflow:hidden;
750 background:#8FBDE0;
750 background:#8FBDE0;
751 border:1px solid #6BACDE;
751 border:1px solid #6BACDE;
752 color:#003863;
752 color:#003863;
753 }
753 }
754
754
755 #content div.box div.message-notice h6 {
755 #content div.box div.message-notice h6 {
756 color:#003863;
756 color:#003863;
757 }
757 }
758
758
759 #content div.box div.message-success {
759 #content div.box div.message-success {
760 height:1%;
760 height:1%;
761 clear:both;
761 clear:both;
762 overflow:hidden;
762 overflow:hidden;
763 background:#E6EFC2;
763 background:#E6EFC2;
764 border:1px solid #C6D880;
764 border:1px solid #C6D880;
765 color:#4e6100;
765 color:#4e6100;
766 }
766 }
767
767
768 #content div.box div.message-success h6 {
768 #content div.box div.message-success h6 {
769 color:#4e6100;
769 color:#4e6100;
770 }
770 }
771
771
772 #content div.box div.form div.fields div.field {
772 #content div.box div.form div.fields div.field {
773 height:1%;
773 height:1%;
774 border-bottom:1px solid #DDD;
774 border-bottom:1px solid #DDD;
775 clear:both;
775 clear:both;
776 margin:0;
776 margin:0;
777 padding:10px 0;
777 padding:10px 0;
778 }
778 }
779
779
780 #content div.box div.form div.fields div.field-first {
780 #content div.box div.form div.fields div.field-first {
781 padding:0 0 10px;
781 padding:0 0 10px;
782 }
782 }
783
783
784 #content div.box div.form div.fields div.field-noborder {
784 #content div.box div.form div.fields div.field-noborder {
785 border-bottom:0 !important;
785 border-bottom:0 !important;
786 }
786 }
787
787
788 #content div.box div.form div.fields div.field span.error-message {
788 #content div.box div.form div.fields div.field span.error-message {
789 height:1%;
789 height:1%;
790 display:inline-block;
790 display:inline-block;
791 color:red;
791 color:red;
792 margin:8px 0 0 4px;
792 margin:8px 0 0 4px;
793 padding:0;
793 padding:0;
794 }
794 }
795
795
796 #content div.box div.form div.fields div.field span.success {
796 #content div.box div.form div.fields div.field span.success {
797 height:1%;
797 height:1%;
798 display:block;
798 display:block;
799 color:#316309;
799 color:#316309;
800 margin:8px 0 0;
800 margin:8px 0 0;
801 padding:0;
801 padding:0;
802 }
802 }
803
803
804 #content div.box div.form div.fields div.field div.label {
804 #content div.box div.form div.fields div.field div.label {
805 left:80px;
805 left:80px;
806 width:auto;
806 width:auto;
807 position:absolute;
807 position:absolute;
808 margin:0;
808 margin:0;
809 padding:8px 0 0 5px;
809 padding:8px 0 0 5px;
810 }
810 }
811
811
812 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
812 #content div.box-left div.form div.fields div.field div.label,#content div.box-right div.form div.fields div.field div.label {
813 clear:both;
813 clear:both;
814 overflow:hidden;
814 overflow:hidden;
815 left:0;
815 left:0;
816 width:auto;
816 width:auto;
817 position:relative;
817 position:relative;
818 margin:0;
818 margin:0;
819 padding:0 0 8px;
819 padding:0 0 8px;
820 }
820 }
821
821
822 #content div.box div.form div.fields div.field div.label-select {
822 #content div.box div.form div.fields div.field div.label-select {
823 padding:5px 0 0 5px;
823 padding:5px 0 0 5px;
824 }
824 }
825
825
826 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
826 #content div.box-left div.form div.fields div.field div.label-select,#content div.box-right div.form div.fields div.field div.label-select {
827 padding:0 0 8px;
827 padding:0 0 8px;
828 }
828 }
829
829
830 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
830 #content div.box-left div.form div.fields div.field div.label-textarea,#content div.box-right div.form div.fields div.field div.label-textarea {
831 padding:0 0 8px !important;
831 padding:0 0 8px !important;
832 }
832 }
833
833
834 #content div.box div.form div.fields div.field div.label label {
834 #content div.box div.form div.fields div.field div.label label {
835 color:#393939;
835 color:#393939;
836 font-weight:700;
836 font-weight:700;
837 }
837 }
838
838
839 #content div.box div.form div.fields div.field div.input {
839 #content div.box div.form div.fields div.field div.input {
840 margin:0 0 0 200px;
840 margin:0 0 0 200px;
841 }
841 }
842 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
842 #content div.box-left div.form div.fields div.field div.input,#content div.box-right div.form div.fields div.field div.input {
843 margin:0 0 0 0px;
843 margin:0 0 0 0px;
844 }
844 }
845
845
846 #content div.box div.form div.fields div.field div.input input {
846 #content div.box div.form div.fields div.field div.input input {
847 background:#FFF;
847 background:#FFF;
848 border-top:1px solid #b3b3b3;
848 border-top:1px solid #b3b3b3;
849 border-left:1px solid #b3b3b3;
849 border-left:1px solid #b3b3b3;
850 border-right:1px solid #eaeaea;
850 border-right:1px solid #eaeaea;
851 border-bottom:1px solid #eaeaea;
851 border-bottom:1px solid #eaeaea;
852 color:#000;
852 color:#000;
853 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
853 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
854 font-size:11px;
854 font-size:11px;
855 margin:0;
855 margin:0;
856 padding:7px 7px 6px;
856 padding:7px 7px 6px;
857 }
857 }
858
858
859
859
860
860
861 #content div.box div.form div.fields div.field div.input input.small {
861 #content div.box div.form div.fields div.field div.input input.small {
862 width:30%;
862 width:30%;
863 }
863 }
864
864
865 #content div.box div.form div.fields div.field div.input input.medium {
865 #content div.box div.form div.fields div.field div.input input.medium {
866 width:55%;
866 width:55%;
867 }
867 }
868
868
869 #content div.box div.form div.fields div.field div.input input.large {
869 #content div.box div.form div.fields div.field div.input input.large {
870 width:85%;
870 width:85%;
871 }
871 }
872
872
873 #content div.box div.form div.fields div.field div.input input.date {
873 #content div.box div.form div.fields div.field div.input input.date {
874 width:177px;
874 width:177px;
875 }
875 }
876
876
877 #content div.box div.form div.fields div.field div.input input.button {
877 #content div.box div.form div.fields div.field div.input input.button {
878 background:#D4D0C8;
878 background:#D4D0C8;
879 border-top:1px solid #FFF;
879 border-top:1px solid #FFF;
880 border-left:1px solid #FFF;
880 border-left:1px solid #FFF;
881 border-right:1px solid #404040;
881 border-right:1px solid #404040;
882 border-bottom:1px solid #404040;
882 border-bottom:1px solid #404040;
883 color:#000;
883 color:#000;
884 margin:0;
884 margin:0;
885 padding:4px 8px;
885 padding:4px 8px;
886 }
886 }
887
887
888 #content div.box div.form div.fields div.field div.input a.ui-input-file {
888 #content div.box div.form div.fields div.field div.input a.ui-input-file {
889 width:28px;
889 width:28px;
890 height:28px;
890 height:28px;
891 display:inline;
891 display:inline;
892 position:absolute;
892 position:absolute;
893 overflow:hidden;
893 overflow:hidden;
894 cursor:pointer;
894 cursor:pointer;
895 background:#e5e3e3 url("../images/button_browse.png") no-repeat;
895 background:#e5e3e3 url("../images/button_browse.png") no-repeat;
896 border:none;
896 border:none;
897 text-decoration:none;
897 text-decoration:none;
898 margin:0 0 0 6px;
898 margin:0 0 0 6px;
899 padding:0;
899 padding:0;
900 }
900 }
901
901
902 #content div.box div.form div.fields div.field div.textarea {
902 #content div.box div.form div.fields div.field div.textarea {
903 border-top:1px solid #b3b3b3;
903 border-top:1px solid #b3b3b3;
904 border-left:1px solid #b3b3b3;
904 border-left:1px solid #b3b3b3;
905 border-right:1px solid #eaeaea;
905 border-right:1px solid #eaeaea;
906 border-bottom:1px solid #eaeaea;
906 border-bottom:1px solid #eaeaea;
907 margin:0 0 0 200px;
907 margin:0 0 0 200px;
908 padding:10px;
908 padding:10px;
909 }
909 }
910
910
911 #content div.box div.form div.fields div.field div.textarea-editor {
911 #content div.box div.form div.fields div.field div.textarea-editor {
912 border:1px solid #ddd;
912 border:1px solid #ddd;
913 padding:0;
913 padding:0;
914 }
914 }
915
915
916 #content div.box div.form div.fields div.field div.textarea textarea {
916 #content div.box div.form div.fields div.field div.textarea textarea {
917 width:100%;
917 width:100%;
918 height:220px;
918 height:220px;
919 overflow:hidden;
919 overflow:hidden;
920 background:#FFF;
920 background:#FFF;
921 color:#000;
921 color:#000;
922 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
922 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
923 font-size:11px;
923 font-size:11px;
924 outline:none;
924 outline:none;
925 border-width:0;
925 border-width:0;
926 margin:0;
926 margin:0;
927 padding:0;
927 padding:0;
928 }
928 }
929
929
930 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea {
930 #content div.box-left div.form div.fields div.field div.textarea textarea,#content div.box-right div.form div.fields div.field div.textarea textarea {
931 width:100%;
931 width:100%;
932 height:100px;
932 height:100px;
933 }
933 }
934
934
935 #content div.box div.form div.fields div.field div.textarea table {
935 #content div.box div.form div.fields div.field div.textarea table {
936 width:100%;
936 width:100%;
937 border:none;
937 border:none;
938 margin:0;
938 margin:0;
939 padding:0;
939 padding:0;
940 }
940 }
941
941
942 #content div.box div.form div.fields div.field div.textarea table td {
942 #content div.box div.form div.fields div.field div.textarea table td {
943 background:#DDD;
943 background:#DDD;
944 border:none;
944 border:none;
945 padding:0;
945 padding:0;
946 }
946 }
947
947
948 #content div.box div.form div.fields div.field div.textarea table td table {
948 #content div.box div.form div.fields div.field div.textarea table td table {
949 width:auto;
949 width:auto;
950 border:none;
950 border:none;
951 margin:0;
951 margin:0;
952 padding:0;
952 padding:0;
953 }
953 }
954
954
955 #content div.box div.form div.fields div.field div.textarea table td table td {
955 #content div.box div.form div.fields div.field div.textarea table td table td {
956 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
956 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
957 font-size:11px;
957 font-size:11px;
958 padding:5px 5px 5px 0;
958 padding:5px 5px 5px 0;
959 }
959 }
960
960
961 #content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive {
961 #content div.box div.form div.fields div.field div.textarea table td table td a.mceButtonActive {
962 background:#b1b1b1;
962 background:#b1b1b1;
963 }
963 }
964
964
965 #content div.box div.form div.fields div.field div.select a.ui-selectmenu {
965 #content div.box div.form div.fields div.field div.select a.ui-selectmenu {
966 color:#565656;
966 color:#565656;
967 text-decoration:none;
967 text-decoration:none;
968 }
968 }
969
969
970 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus {
970 #content div.box div.form div.fields div.field input[type=text]:focus,#content div.box div.form div.fields div.field input[type=password]:focus,#content div.box div.form div.fields div.field input[type=file]:focus,#content div.box div.form div.fields div.field textarea:focus,#content div.box div.form div.fields div.field select:focus {
971 background:#f6f6f6;
971 background:#f6f6f6;
972 border-color:#666;
972 border-color:#666;
973 }
973 }
974
974
975 div.form div.fields div.field div.button {
975 div.form div.fields div.field div.button {
976 margin:0;
976 margin:0;
977 padding:0 0 0 8px;
977 padding:0 0 0 8px;
978 }
978 }
979
979
980 div.form div.fields div.field div.highlight .ui-state-default {
980 div.form div.fields div.field div.highlight .ui-state-default {
981 background:#4e85bb url("../images/button_highlight.png") repeat-x;
981 background:#4e85bb url("../images/button_highlight.png") repeat-x;
982 border-top:1px solid #5c91a4;
982 border-top:1px solid #5c91a4;
983 border-left:1px solid #2a6f89;
983 border-left:1px solid #2a6f89;
984 border-right:1px solid #2b7089;
984 border-right:1px solid #2b7089;
985 border-bottom:1px solid #1a6480;
985 border-bottom:1px solid #1a6480;
986 color:#FFF;
986 color:#FFF;
987 margin:0;
987 margin:0;
988 padding:6px 12px;
988 padding:6px 12px;
989 }
989 }
990
990
991 div.form div.fields div.field div.highlight .ui-state-hover {
991 div.form div.fields div.field div.highlight .ui-state-hover {
992 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
992 background:#46a0c1 url("../images/button_highlight_selected.png") repeat-x;
993 border-top:1px solid #78acbf;
993 border-top:1px solid #78acbf;
994 border-left:1px solid #34819e;
994 border-left:1px solid #34819e;
995 border-right:1px solid #35829f;
995 border-right:1px solid #35829f;
996 border-bottom:1px solid #257897;
996 border-bottom:1px solid #257897;
997 color:#FFF;
997 color:#FFF;
998 margin:0;
998 margin:0;
999 padding:6px 12px;
999 padding:6px 12px;
1000 }
1000 }
1001
1001
1002 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-default {
1002 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-default {
1003 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1003 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
1004 border-top:1px solid #5c91a4;
1004 border-top:1px solid #5c91a4;
1005 border-left:1px solid #2a6f89;
1005 border-left:1px solid #2a6f89;
1006 border-right:1px solid #2b7089;
1006 border-right:1px solid #2b7089;
1007 border-bottom:1px solid #1a6480;
1007 border-bottom:1px solid #1a6480;
1008 color:#fff;
1008 color:#fff;
1009 margin:0;
1009 margin:0;
1010 padding:6px 12px;
1010 padding:6px 12px;
1011 }
1011 }
1012
1012
1013 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1013 #content div.box div.form div.fields div.buttons div.highlight input.ui-state-hover {
1014 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1014 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
1015 border-top:1px solid #78acbf;
1015 border-top:1px solid #78acbf;
1016 border-left:1px solid #34819e;
1016 border-left:1px solid #34819e;
1017 border-right:1px solid #35829f;
1017 border-right:1px solid #35829f;
1018 border-bottom:1px solid #257897;
1018 border-bottom:1px solid #257897;
1019 color:#fff;
1019 color:#fff;
1020 margin:0;
1020 margin:0;
1021 padding:6px 12px;
1021 padding:6px 12px;
1022 }
1022 }
1023
1023
1024 #content div.box table {
1024 #content div.box table {
1025 width:100%;
1025 width:100%;
1026 border-collapse:collapse;
1026 border-collapse:collapse;
1027 margin:0;
1027 margin:0;
1028 padding:0;
1028 padding:0;
1029 }
1029 }
1030
1030
1031 #content div.box table th {
1031 #content div.box table th {
1032 background:#eee;
1032 background:#eee;
1033 border-bottom:1px solid #ddd;
1033 border-bottom:1px solid #ddd;
1034 padding:5px 0px 5px 5px;
1034 padding:5px 0px 5px 5px;
1035 }
1035 }
1036
1036
1037 #content div.box table th.left {
1037 #content div.box table th.left {
1038 text-align:left;
1038 text-align:left;
1039 }
1039 }
1040
1040
1041 #content div.box table th.right {
1041 #content div.box table th.right {
1042 text-align:right;
1042 text-align:right;
1043 }
1043 }
1044
1044
1045 #content div.box table th.center {
1045 #content div.box table th.center {
1046 text-align:center;
1046 text-align:center;
1047 }
1047 }
1048
1048
1049 #content div.box table th.selected {
1049 #content div.box table th.selected {
1050 vertical-align:middle;
1050 vertical-align:middle;
1051 padding:0;
1051 padding:0;
1052 }
1052 }
1053
1053
1054 #content div.box table td {
1054 #content div.box table td {
1055 background:#fff;
1055 background:#fff;
1056 border-bottom:1px solid #cdcdcd;
1056 border-bottom:1px solid #cdcdcd;
1057 vertical-align:middle;
1057 vertical-align:middle;
1058 padding:5px;
1058 padding:5px;
1059 }
1059 }
1060
1060
1061 #content div.box table tr.selected td {
1061 #content div.box table tr.selected td {
1062 background:#FFC;
1062 background:#FFC;
1063 }
1063 }
1064
1064
1065 #content div.box table td.selected {
1065 #content div.box table td.selected {
1066 width:3%;
1066 width:3%;
1067 text-align:center;
1067 text-align:center;
1068 vertical-align:middle;
1068 vertical-align:middle;
1069 padding:0;
1069 padding:0;
1070 }
1070 }
1071
1071
1072 #content div.box table td.action {
1072 #content div.box table td.action {
1073 width:45%;
1073 width:45%;
1074 text-align:left;
1074 text-align:left;
1075 }
1075 }
1076
1076
1077 #content div.box table td.date {
1077 #content div.box table td.date {
1078 width:33%;
1078 width:33%;
1079 text-align:center;
1079 text-align:center;
1080 }
1080 }
1081
1081
1082 #content div.box div.action {
1082 #content div.box div.action {
1083 float:right;
1083 float:right;
1084 background:#FFF;
1084 background:#FFF;
1085 text-align:right;
1085 text-align:right;
1086 margin:10px 0 0;
1086 margin:10px 0 0;
1087 padding:0;
1087 padding:0;
1088 }
1088 }
1089
1089
1090 #content div.box div.action select {
1090 #content div.box div.action select {
1091 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1091 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1092 font-size:11px;
1092 font-size:11px;
1093 margin:0;
1093 margin:0;
1094 }
1094 }
1095
1095
1096 #content div.box div.action .ui-selectmenu {
1096 #content div.box div.action .ui-selectmenu {
1097 margin:0;
1097 margin:0;
1098 padding:0;
1098 padding:0;
1099 }
1099 }
1100
1100
1101 #content div.box div.pagination {
1101 #content div.box div.pagination {
1102 height:1%;
1102 height:1%;
1103 clear:both;
1103 clear:both;
1104 overflow:hidden;
1104 overflow:hidden;
1105 margin:10px 0 0;
1105 margin:10px 0 0;
1106 padding:0;
1106 padding:0;
1107 }
1107 }
1108
1108
1109 #content div.box div.pagination ul.pager {
1109 #content div.box div.pagination ul.pager {
1110 float:right;
1110 float:right;
1111 text-align:right;
1111 text-align:right;
1112 margin:0;
1112 margin:0;
1113 padding:0;
1113 padding:0;
1114 }
1114 }
1115
1115
1116 #content div.box div.pagination ul.pager li {
1116 #content div.box div.pagination ul.pager li {
1117 height:1%;
1117 height:1%;
1118 float:left;
1118 float:left;
1119 list-style:none;
1119 list-style:none;
1120 background:#ebebeb url("../images/pager.png") repeat-x;
1120 background:#ebebeb url("../images/pager.png") repeat-x;
1121 border-top:1px solid #dedede;
1121 border-top:1px solid #dedede;
1122 border-left:1px solid #cfcfcf;
1122 border-left:1px solid #cfcfcf;
1123 border-right:1px solid #c4c4c4;
1123 border-right:1px solid #c4c4c4;
1124 border-bottom:1px solid #c4c4c4;
1124 border-bottom:1px solid #c4c4c4;
1125 color:#4A4A4A;
1125 color:#4A4A4A;
1126 font-weight:700;
1126 font-weight:700;
1127 margin:0 0 0 4px;
1127 margin:0 0 0 4px;
1128 padding:0;
1128 padding:0;
1129 }
1129 }
1130
1130
1131 #content div.box div.pagination ul.pager li.separator {
1131 #content div.box div.pagination ul.pager li.separator {
1132 padding:6px;
1132 padding:6px;
1133 }
1133 }
1134
1134
1135 #content div.box div.pagination ul.pager li.current {
1135 #content div.box div.pagination ul.pager li.current {
1136 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1136 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1137 border-top:1px solid #ccc;
1137 border-top:1px solid #ccc;
1138 border-left:1px solid #bebebe;
1138 border-left:1px solid #bebebe;
1139 border-right:1px solid #b1b1b1;
1139 border-right:1px solid #b1b1b1;
1140 border-bottom:1px solid #afafaf;
1140 border-bottom:1px solid #afafaf;
1141 color:#515151;
1141 color:#515151;
1142 padding:6px;
1142 padding:6px;
1143 }
1143 }
1144
1144
1145 #content div.box div.pagination ul.pager li a {
1145 #content div.box div.pagination ul.pager li a {
1146 height:1%;
1146 height:1%;
1147 display:block;
1147 display:block;
1148 float:left;
1148 float:left;
1149 color:#515151;
1149 color:#515151;
1150 text-decoration:none;
1150 text-decoration:none;
1151 margin:0;
1151 margin:0;
1152 padding:6px;
1152 padding:6px;
1153 }
1153 }
1154
1154
1155 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1155 #content div.box div.pagination ul.pager li a:hover,#content div.box div.pagination ul.pager li a:active {
1156 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1156 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1157 border-top:1px solid #ccc;
1157 border-top:1px solid #ccc;
1158 border-left:1px solid #bebebe;
1158 border-left:1px solid #bebebe;
1159 border-right:1px solid #b1b1b1;
1159 border-right:1px solid #b1b1b1;
1160 border-bottom:1px solid #afafaf;
1160 border-bottom:1px solid #afafaf;
1161 margin:-1px;
1161 margin:-1px;
1162 }
1162 }
1163
1163
1164 #content div.box div.pagination-wh {
1164 #content div.box div.pagination-wh {
1165 height:1%;
1165 height:1%;
1166 clear:both;
1166 clear:both;
1167 overflow:hidden;
1167 overflow:hidden;
1168 text-align:right;
1168 text-align:right;
1169 margin:10px 0 0;
1169 margin:10px 0 0;
1170 padding:0;
1170 padding:0;
1171 }
1171 }
1172
1172
1173 #content div.box div.pagination-right {
1173 #content div.box div.pagination-right {
1174 float:right;
1174 float:right;
1175 }
1175 }
1176
1176
1177 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1177 #content div.box div.pagination-wh a,#content div.box div.pagination-wh span.pager_dotdot {
1178 height:1%;
1178 height:1%;
1179 float:left;
1179 float:left;
1180 background:#ebebeb url("../images/pager.png") repeat-x;
1180 background:#ebebeb url("../images/pager.png") repeat-x;
1181 border-top:1px solid #dedede;
1181 border-top:1px solid #dedede;
1182 border-left:1px solid #cfcfcf;
1182 border-left:1px solid #cfcfcf;
1183 border-right:1px solid #c4c4c4;
1183 border-right:1px solid #c4c4c4;
1184 border-bottom:1px solid #c4c4c4;
1184 border-bottom:1px solid #c4c4c4;
1185 color:#4A4A4A;
1185 color:#4A4A4A;
1186 font-weight:700;
1186 font-weight:700;
1187 margin:0 0 0 4px;
1187 margin:0 0 0 4px;
1188 padding:6px;
1188 padding:6px;
1189 }
1189 }
1190
1190
1191 #content div.box div.pagination-wh span.pager_curpage {
1191 #content div.box div.pagination-wh span.pager_curpage {
1192 height:1%;
1192 height:1%;
1193 float:left;
1193 float:left;
1194 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1194 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1195 border-top:1px solid #ccc;
1195 border-top:1px solid #ccc;
1196 border-left:1px solid #bebebe;
1196 border-left:1px solid #bebebe;
1197 border-right:1px solid #b1b1b1;
1197 border-right:1px solid #b1b1b1;
1198 border-bottom:1px solid #afafaf;
1198 border-bottom:1px solid #afafaf;
1199 color:#515151;
1199 color:#515151;
1200 font-weight:700;
1200 font-weight:700;
1201 margin:0 0 0 4px;
1201 margin:0 0 0 4px;
1202 padding:6px;
1202 padding:6px;
1203 }
1203 }
1204
1204
1205 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1205 #content div.box div.pagination-wh a:hover,#content div.box div.pagination-wh a:active {
1206 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1206 background:#b4b4b4 url("../images/pager_selected.png") repeat-x;
1207 border-top:1px solid #ccc;
1207 border-top:1px solid #ccc;
1208 border-left:1px solid #bebebe;
1208 border-left:1px solid #bebebe;
1209 border-right:1px solid #b1b1b1;
1209 border-right:1px solid #b1b1b1;
1210 border-bottom:1px solid #afafaf;
1210 border-bottom:1px solid #afafaf;
1211 text-decoration:none;
1211 text-decoration:none;
1212 }
1212 }
1213
1213
1214 #content div.box div.traffic div.legend {
1214 #content div.box div.traffic div.legend {
1215 clear:both;
1215 clear:both;
1216 overflow:hidden;
1216 overflow:hidden;
1217 border-bottom:1px solid #ddd;
1217 border-bottom:1px solid #ddd;
1218 margin:0 0 10px;
1218 margin:0 0 10px;
1219 padding:0 0 10px;
1219 padding:0 0 10px;
1220 }
1220 }
1221
1221
1222 #content div.box div.traffic div.legend h6 {
1222 #content div.box div.traffic div.legend h6 {
1223 float:left;
1223 float:left;
1224 border:none;
1224 border:none;
1225 margin:0;
1225 margin:0;
1226 padding:0;
1226 padding:0;
1227 }
1227 }
1228
1228
1229 #content div.box div.traffic div.legend li {
1229 #content div.box div.traffic div.legend li {
1230 list-style:none;
1230 list-style:none;
1231 float:left;
1231 float:left;
1232 font-size:11px;
1232 font-size:11px;
1233 margin:0;
1233 margin:0;
1234 padding:0 8px 0 4px;
1234 padding:0 8px 0 4px;
1235 }
1235 }
1236
1236
1237 #content div.box div.traffic div.legend li.visits {
1237 #content div.box div.traffic div.legend li.visits {
1238 border-left:12px solid #edc240;
1238 border-left:12px solid #edc240;
1239 }
1239 }
1240
1240
1241 #content div.box div.traffic div.legend li.pageviews {
1241 #content div.box div.traffic div.legend li.pageviews {
1242 border-left:12px solid #afd8f8;
1242 border-left:12px solid #afd8f8;
1243 }
1243 }
1244
1244
1245 #content div.box div.traffic table {
1245 #content div.box div.traffic table {
1246 width:auto;
1246 width:auto;
1247 }
1247 }
1248
1248
1249 #content div.box div.traffic table td {
1249 #content div.box div.traffic table td {
1250 background:transparent;
1250 background:transparent;
1251 border:none;
1251 border:none;
1252 padding:2px 3px 3px;
1252 padding:2px 3px 3px;
1253 }
1253 }
1254
1254
1255 #content div.box div.traffic table td.legendLabel {
1255 #content div.box div.traffic table td.legendLabel {
1256 padding:0 3px 2px;
1256 padding:0 3px 2px;
1257 }
1257 }
1258
1258
1259 #footer {
1259 #footer {
1260 clear:both;
1260 clear:both;
1261 overflow:hidden;
1261 overflow:hidden;
1262 text-align:right;
1262 text-align:right;
1263 margin:0;
1263 margin:0;
1264 padding:0 30px 4px;
1264 padding:0 30px 4px;
1265 margin:-10px 0 0;
1265 margin:-10px 0 0;
1266 }
1266 }
1267
1267
1268 #footer div#footer-inner {
1268 #footer div#footer-inner {
1269 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1269 background:url("../images/header_inner.png") repeat-x scroll 0 0 #003367;
1270 border-top:2px solid #FFFFFF;
1270 border-top:2px solid #FFFFFF;
1271 }
1271 }
1272
1272
1273 #footer div#footer-inner p {
1273 #footer div#footer-inner p {
1274 padding:15px 25px 15px 0;
1274 padding:15px 25px 15px 0;
1275 color:#FFF;
1275 color:#FFF;
1276 font-weight:700;
1276 font-weight:700;
1277 }
1277 }
1278 #footer div#footer-inner .footer-link {
1278 #footer div#footer-inner .footer-link {
1279 float:left;
1279 float:left;
1280 padding-left:10px;
1280 padding-left:10px;
1281 }
1281 }
1282 #footer div#footer-inner .footer-link a {
1282 #footer div#footer-inner .footer-link a {
1283 color:#FFF;
1283 color:#FFF;
1284 }
1284 }
1285
1285
1286 #login div.title {
1286 #login div.title {
1287 width:420px;
1287 width:420px;
1288 clear:both;
1288 clear:both;
1289 overflow:hidden;
1289 overflow:hidden;
1290 position:relative;
1290 position:relative;
1291 background:#003367 url("../../images/header_inner.png") repeat-x;
1291 background:#003367 url("../../images/header_inner.png") repeat-x;
1292 margin:0 auto;
1292 margin:0 auto;
1293 padding:0;
1293 padding:0;
1294 }
1294 }
1295
1295
1296 #login div.inner {
1296 #login div.inner {
1297 width:380px;
1297 width:380px;
1298 background:#FFF url("../images/login.png") no-repeat top left;
1298 background:#FFF url("../images/login.png") no-repeat top left;
1299 border-top:none;
1299 border-top:none;
1300 border-bottom:none;
1300 border-bottom:none;
1301 margin:0 auto;
1301 margin:0 auto;
1302 padding:20px;
1302 padding:20px;
1303 }
1303 }
1304
1304
1305 #login div.form div.fields div.field div.label {
1305 #login div.form div.fields div.field div.label {
1306 width:173px;
1306 width:173px;
1307 float:left;
1307 float:left;
1308 text-align:right;
1308 text-align:right;
1309 margin:2px 10px 0 0;
1309 margin:2px 10px 0 0;
1310 padding:5px 0 0 5px;
1310 padding:5px 0 0 5px;
1311 }
1311 }
1312
1312
1313 #login div.form div.fields div.field div.input input {
1313 #login div.form div.fields div.field div.input input {
1314 width:176px;
1314 width:176px;
1315 background:#FFF;
1315 background:#FFF;
1316 border-top:1px solid #b3b3b3;
1316 border-top:1px solid #b3b3b3;
1317 border-left:1px solid #b3b3b3;
1317 border-left:1px solid #b3b3b3;
1318 border-right:1px solid #eaeaea;
1318 border-right:1px solid #eaeaea;
1319 border-bottom:1px solid #eaeaea;
1319 border-bottom:1px solid #eaeaea;
1320 color:#000;
1320 color:#000;
1321 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1321 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1322 font-size:11px;
1322 font-size:11px;
1323 margin:0;
1323 margin:0;
1324 padding:7px 7px 6px;
1324 padding:7px 7px 6px;
1325 }
1325 }
1326
1326
1327 #login div.form div.fields div.buttons {
1327 #login div.form div.fields div.buttons {
1328 clear:both;
1328 clear:both;
1329 overflow:hidden;
1329 overflow:hidden;
1330 border-top:1px solid #DDD;
1330 border-top:1px solid #DDD;
1331 text-align:right;
1331 text-align:right;
1332 margin:0;
1332 margin:0;
1333 padding:10px 0 0;
1333 padding:10px 0 0;
1334 }
1334 }
1335
1335
1336 #login div.form div.links {
1336 #login div.form div.links {
1337 clear:both;
1337 clear:both;
1338 overflow:hidden;
1338 overflow:hidden;
1339 margin:10px 0 0;
1339 margin:10px 0 0;
1340 padding:0 0 2px;
1340 padding:0 0 2px;
1341 }
1341 }
1342
1342
1343 #register div.title {
1343 #register div.title {
1344 clear:both;
1344 clear:both;
1345 overflow:hidden;
1345 overflow:hidden;
1346 position:relative;
1346 position:relative;
1347 background:#003367 url("../images/header_inner.png") repeat-x;
1347 background:#003367 url("../images/header_inner.png") repeat-x;
1348 margin:0 auto;
1348 margin:0 auto;
1349 padding:0;
1349 padding:0;
1350 }
1350 }
1351
1351
1352 #register div.inner {
1352 #register div.inner {
1353 background:#FFF;
1353 background:#FFF;
1354 border-top:none;
1354 border-top:none;
1355 border-bottom:none;
1355 border-bottom:none;
1356 margin:0 auto;
1356 margin:0 auto;
1357 padding:20px;
1357 padding:20px;
1358 }
1358 }
1359
1359
1360 #register div.form div.fields div.field div.label {
1360 #register div.form div.fields div.field div.label {
1361 width:135px;
1361 width:135px;
1362 float:left;
1362 float:left;
1363 text-align:right;
1363 text-align:right;
1364 margin:2px 10px 0 0;
1364 margin:2px 10px 0 0;
1365 padding:5px 0 0 5px;
1365 padding:5px 0 0 5px;
1366 }
1366 }
1367
1367
1368 #register div.form div.fields div.field div.input input {
1368 #register div.form div.fields div.field div.input input {
1369 width:300px;
1369 width:300px;
1370 background:#FFF;
1370 background:#FFF;
1371 border-top:1px solid #b3b3b3;
1371 border-top:1px solid #b3b3b3;
1372 border-left:1px solid #b3b3b3;
1372 border-left:1px solid #b3b3b3;
1373 border-right:1px solid #eaeaea;
1373 border-right:1px solid #eaeaea;
1374 border-bottom:1px solid #eaeaea;
1374 border-bottom:1px solid #eaeaea;
1375 color:#000;
1375 color:#000;
1376 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1376 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
1377 font-size:11px;
1377 font-size:11px;
1378 margin:0;
1378 margin:0;
1379 padding:7px 7px 6px;
1379 padding:7px 7px 6px;
1380 }
1380 }
1381
1381
1382 #register div.form div.fields div.buttons {
1382 #register div.form div.fields div.buttons {
1383 clear:both;
1383 clear:both;
1384 overflow:hidden;
1384 overflow:hidden;
1385 border-top:1px solid #DDD;
1385 border-top:1px solid #DDD;
1386 text-align:left;
1386 text-align:left;
1387 margin:0;
1387 margin:0;
1388 padding:10px 0 0 114px;
1388 padding:10px 0 0 114px;
1389 }
1389 }
1390
1390
1391 #register div.form div.fields div.buttons div.highlight input.ui-state-default {
1391 #register div.form div.fields div.buttons div.highlight input.ui-state-default {
1392 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1392 background:url("../images/button_highlight.png") repeat-x scroll 0 0 #4E85BB;
1393 color:#FFF;
1393 color:#FFF;
1394 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1394 border-color:#5C91A4 #2B7089 #1A6480 #2A6F89;
1395 border-style:solid;
1395 border-style:solid;
1396 border-width:1px;
1396 border-width:1px;
1397 }
1397 }
1398
1398
1399 #register div.form div.activation_msg {
1399 #register div.form div.activation_msg {
1400 padding-top:4px;
1400 padding-top:4px;
1401 padding-bottom:4px;
1401 padding-bottom:4px;
1402 }
1402 }
1403
1403
1404 .trending_language_tbl,.trending_language_tbl td {
1404 .trending_language_tbl,.trending_language_tbl td {
1405 border:0 !important;
1405 border:0 !important;
1406 margin:0 !important;
1406 margin:0 !important;
1407 padding:0 !important;
1407 padding:0 !important;
1408 }
1408 }
1409
1409
1410 .trending_language {
1410 .trending_language {
1411 background-color:#003367;
1411 background-color:#003367;
1412 color:#FFF;
1412 color:#FFF;
1413 display:block;
1413 display:block;
1414 min-width:20px;
1414 min-width:20px;
1415 text-decoration:none;
1415 text-decoration:none;
1416 height:12px;
1416 height:12px;
1417 margin-bottom:4px;
1417 margin-bottom:4px;
1418 margin-left:5px;
1418 margin-left:5px;
1419 white-space:pre;
1419 white-space:pre;
1420 padding:3px;
1420 padding:3px;
1421 }
1421 }
1422
1422
1423 h3.files_location {
1423 h3.files_location {
1424 font-size:1.8em;
1424 font-size:1.8em;
1425 font-weight:700;
1425 font-weight:700;
1426 border-bottom:none !important;
1426 border-bottom:none !important;
1427 margin:10px 0 !important;
1427 margin:10px 0 !important;
1428 }
1428 }
1429
1429
1430 #files_data dl dt {
1430 #files_data dl dt {
1431 float:left;
1431 float:left;
1432 width:115px;
1432 width:115px;
1433 margin:0 !important;
1433 margin:0 !important;
1434 padding:5px;
1434 padding:5px;
1435 }
1435 }
1436
1436
1437 #files_data dl dd {
1437 #files_data dl dd {
1438 margin:0 !important;
1438 margin:0 !important;
1439 padding:5px !important;
1439 padding:5px !important;
1440 }
1440 }
1441
1441
1442 #changeset_content {
1442 #changeset_content {
1443 border:1px solid #CCC;
1443 border:1px solid #CCC;
1444 padding:5px;
1444 padding:5px;
1445 }
1445 }
1446
1446
1447 #changeset_content .container {
1447 #changeset_content .container {
1448 min-height:120px;
1448 min-height:120px;
1449 font-size:1.2em;
1449 font-size:1.2em;
1450 overflow:hidden;
1450 overflow:hidden;
1451 }
1451 }
1452
1452
1453 #changeset_content .container .right {
1453 #changeset_content .container .right {
1454 float:right;
1454 float:right;
1455 width:25%;
1455 width:25%;
1456 text-align:right;
1456 text-align:right;
1457 }
1457 }
1458
1458
1459 #changeset_content .container .left .message {
1459 #changeset_content .container .left .message {
1460 font-style:italic;
1460 font-style:italic;
1461 color:#556CB5;
1461 color:#556CB5;
1462 white-space:pre-wrap;
1462 white-space:pre-wrap;
1463 }
1463 }
1464
1464
1465 .cs_files .cs_added {
1465 .cs_files .cs_added {
1466 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1466 background:url("../images/icons/page_white_add.png") no-repeat scroll 3px;
1467 height:16px;
1467 height:16px;
1468 padding-left:20px;
1468 padding-left:20px;
1469 margin-top:7px;
1469 margin-top:7px;
1470 text-align:left;
1470 text-align:left;
1471 }
1471 }
1472
1472
1473 .cs_files .cs_changed {
1473 .cs_files .cs_changed {
1474 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1474 background:url("../images/icons/page_white_edit.png") no-repeat scroll 3px;
1475 height:16px;
1475 height:16px;
1476 padding-left:20px;
1476 padding-left:20px;
1477 margin-top:7px;
1477 margin-top:7px;
1478 text-align:left;
1478 text-align:left;
1479 }
1479 }
1480
1480
1481 .cs_files .cs_removed {
1481 .cs_files .cs_removed {
1482 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1482 background:url("../images/icons/page_white_delete.png") no-repeat scroll 3px;
1483 height:16px;
1483 height:16px;
1484 padding-left:20px;
1484 padding-left:20px;
1485 margin-top:7px;
1485 margin-top:7px;
1486 text-align:left;
1486 text-align:left;
1487 }
1487 }
1488
1488
1489 #graph {
1489 #graph {
1490 overflow:hidden;
1490 overflow:hidden;
1491 }
1491 }
1492
1492
1493 #graph_nodes {
1493 #graph_nodes {
1494 width:160px;
1494 width:160px;
1495 float:left;
1495 float:left;
1496 margin-left:-50px;
1496 margin-left:-50px;
1497 margin-top:5px;
1497 margin-top:5px;
1498 }
1498 }
1499
1499
1500 #graph_content {
1500 #graph_content {
1501 width:800px;
1501 width:800px;
1502 float:left;
1502 float:left;
1503 }
1503 }
1504
1504
1505 #graph_content .container_header {
1505 #graph_content .container_header {
1506 border:1px solid #CCC;
1506 border:1px solid #CCC;
1507 padding:10px;
1507 padding:10px;
1508 }
1508 }
1509
1509
1510 #graph_content .container {
1510 #graph_content .container {
1511 border-bottom:1px solid #CCC;
1511 border-bottom:1px solid #CCC;
1512 border-left:1px solid #CCC;
1512 border-left:1px solid #CCC;
1513 border-right:1px solid #CCC;
1513 border-right:1px solid #CCC;
1514 min-height:80px;
1514 min-height:80px;
1515 overflow:hidden;
1515 overflow:hidden;
1516 font-size:1.2em;
1516 font-size:1.2em;
1517 }
1517 }
1518
1518
1519 #graph_content .container .right {
1519 #graph_content .container .right {
1520 float:right;
1520 float:right;
1521 width:28%;
1521 width:28%;
1522 text-align:right;
1522 text-align:right;
1523 padding-bottom:5px;
1523 padding-bottom:5px;
1524 }
1524 }
1525
1525
1526 #graph_content .container .left .date {
1526 #graph_content .container .left .date {
1527 font-weight:700;
1527 font-weight:700;
1528 padding-bottom:5px;
1528 padding-bottom:5px;
1529 }
1529 }
1530
1530
1531 #graph_content .container .left .message {
1531 #graph_content .container .left .message {
1532 font-size:100%;
1532 font-size:100%;
1533 padding-top:3px;
1533 padding-top:3px;
1534 white-space:pre-wrap;
1534 white-space:pre-wrap;
1535 }
1535 }
1536
1536
1537 .right div {
1537 .right div {
1538 clear:both;
1538 clear:both;
1539 }
1539 }
1540
1540
1541 .right .changes .added,.changed,.removed {
1541 .right .changes .added,.changed,.removed {
1542 border:1px solid #DDD;
1542 border:1px solid #DDD;
1543 display:block;
1543 display:block;
1544 float:right;
1544 float:right;
1545 text-align:center;
1545 text-align:center;
1546 min-width:15px;
1546 min-width:15px;
1547 }
1547 }
1548
1548
1549 .right .changes .added {
1549 .right .changes .added {
1550 background:#BFB;
1550 background:#BFB;
1551 }
1551 }
1552
1552
1553 .right .changes .changed {
1553 .right .changes .changed {
1554 background:#FD8;
1554 background:#FD8;
1555 }
1555 }
1556
1556
1557 .right .changes .removed {
1557 .right .changes .removed {
1558 background:#F88;
1558 background:#F88;
1559 }
1559 }
1560
1560
1561 .right .merge {
1561 .right .merge {
1562 vertical-align:top;
1562 vertical-align:top;
1563 font-size:0.75em;
1563 font-size:0.75em;
1564 font-weight:700;
1564 font-weight:700;
1565 }
1565 }
1566
1566
1567 .right .parent {
1567 .right .parent {
1568 font-size:90%;
1568 font-size:90%;
1569 font-family:monospace;
1569 font-family:monospace;
1570 }
1570 }
1571
1571
1572 .right .logtags .branchtag {
1572 .right .logtags .branchtag {
1573 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1573 background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px;
1574 display:block;
1574 display:block;
1575 font-size:0.8em;
1575 font-size:0.8em;
1576 padding:11px 16px 0 0;
1576 padding:11px 16px 0 0;
1577 }
1577 }
1578
1578
1579 .right .logtags .tagtag {
1579 .right .logtags .tagtag {
1580 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1580 background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px;
1581 display:block;
1581 display:block;
1582 font-size:0.8em;
1582 font-size:0.8em;
1583 padding:11px 16px 0 0;
1583 padding:11px 16px 0 0;
1584 }
1584 }
1585
1585
1586 div.browserblock {
1586 div.browserblock {
1587 overflow:hidden;
1587 overflow:hidden;
1588 border:1px solid #ccc;
1588 border:1px solid #ccc;
1589 background:#f8f8f8;
1589 background:#f8f8f8;
1590 font-size:100%;
1590 font-size:100%;
1591 line-height:125%;
1591 line-height:125%;
1592 padding:0;
1592 padding:0;
1593 }
1593 }
1594
1594
1595 div.browserblock .browser-header {
1595 div.browserblock .browser-header {
1596 border-bottom:1px solid #CCC;
1596 border-bottom:1px solid #CCC;
1597 background:#FFF;
1597 background:#FFF;
1598 color:blue;
1598 color:blue;
1599 padding:10px 0;
1599 padding:10px 0;
1600 }
1600 }
1601
1601
1602 div.browserblock .browser-header span {
1602 div.browserblock .browser-header span {
1603 margin-left:25px;
1603 margin-left:25px;
1604 font-weight:700;
1604 font-weight:700;
1605 }
1605 }
1606
1606
1607 div.browserblock .browser-body {
1607 div.browserblock .browser-body {
1608 background:#EEE;
1608 background:#EEE;
1609 }
1609 }
1610
1610
1611 table.code-browser {
1611 table.code-browser {
1612 border-collapse:collapse;
1612 border-collapse:collapse;
1613 width:100%;
1613 width:100%;
1614 }
1614 }
1615
1615
1616 table.code-browser tr {
1616 table.code-browser tr {
1617 margin:3px;
1617 margin:3px;
1618 }
1618 }
1619
1619
1620 table.code-browser thead th {
1620 table.code-browser thead th {
1621 background-color:#EEE;
1621 background-color:#EEE;
1622 height:20px;
1622 height:20px;
1623 font-size:1.1em;
1623 font-size:1.1em;
1624 font-weight:700;
1624 font-weight:700;
1625 text-align:left;
1625 text-align:left;
1626 padding-left:10px;
1626 padding-left:10px;
1627 }
1627 }
1628
1628
1629 table.code-browser tbody td {
1629 table.code-browser tbody td {
1630 padding-left:10px;
1630 padding-left:10px;
1631 height:20px;
1631 height:20px;
1632 }
1632 }
1633
1633
1634 table.code-browser .browser-file {
1634 table.code-browser .browser-file {
1635 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1635 background:url("../images/icons/document_16.png") no-repeat scroll 3px;
1636 height:16px;
1636 height:16px;
1637 padding-left:20px;
1637 padding-left:20px;
1638 text-align:left;
1638 text-align:left;
1639 }
1639 }
1640
1640
1641 table.code-browser .browser-dir {
1641 table.code-browser .browser-dir {
1642 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1642 background:url("../images/icons/folder_16.png") no-repeat scroll 3px;
1643 height:16px;
1643 height:16px;
1644 padding-left:20px;
1644 padding-left:20px;
1645 text-align:left;
1645 text-align:left;
1646 }
1646 }
1647
1647
1648 .box .search {
1648 .box .search {
1649 clear:both;
1649 clear:both;
1650 overflow:hidden;
1650 overflow:hidden;
1651 margin:0;
1651 margin:0;
1652 padding:0 20px 10px;
1652 padding:0 20px 10px;
1653 }
1653 }
1654
1654
1655 .box .search div.search_path {
1655 .box .search div.search_path {
1656 background:none repeat scroll 0 0 #EEE;
1656 background:none repeat scroll 0 0 #EEE;
1657 border:1px solid #CCC;
1657 border:1px solid #CCC;
1658 color:blue;
1658 color:blue;
1659 margin-bottom:10px;
1659 margin-bottom:10px;
1660 padding:10px 0;
1660 padding:10px 0;
1661 }
1661 }
1662
1662
1663 .box .search div.search_path div.link {
1663 .box .search div.search_path div.link {
1664 font-weight:700;
1664 font-weight:700;
1665 margin-left:25px;
1665 margin-left:25px;
1666 }
1666 }
1667
1667
1668 .box .search div.search_path div.link a {
1668 .box .search div.search_path div.link a {
1669 color:#003367;
1669 color:#003367;
1670 cursor:pointer;
1670 cursor:pointer;
1671 text-decoration:none;
1671 text-decoration:none;
1672 }
1672 }
1673
1673
1674 #path_unlock {
1674 #path_unlock {
1675 color:red;
1675 color:red;
1676 font-size:1.2em;
1676 font-size:1.2em;
1677 padding-left:4px;
1677 padding-left:4px;
1678 }
1678 }
1679
1679
1680 .info_box * {
1680 .info_box * {
1681 background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1681 background:url("../../images/pager.png") repeat-x scroll 0 0 #EBEBEB;
1682 color:#4A4A4A;
1682 color:#4A4A4A;
1683 font-weight:700;
1683 font-weight:700;
1684 height:1%;
1684 height:1%;
1685 display:inline;
1685 display:inline;
1686 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1686 border-color:#DEDEDE #C4C4C4 #C4C4C4 #CFCFCF;
1687 border-style:solid;
1687 border-style:solid;
1688 border-width:1px;
1688 border-width:1px;
1689 padding:4px 6px;
1689 padding:4px 6px;
1690 }
1690 }
1691
1691
1692 .info_box span {
1692 .info_box span {
1693 margin-left:3px;
1693 margin-left:3px;
1694 margin-right:3px;
1694 margin-right:3px;
1695 }
1695 }
1696
1696
1697 .info_box input#at_rev {
1697 .info_box input#at_rev {
1698 text-align:center;
1698 text-align:center;
1699 padding:5px 3px 3px 2px;
1699 padding:5px 3px 3px 2px;
1700 }
1700 }
1701
1701
1702 .info_box input#view {
1702 .info_box input#view {
1703 text-align:center;
1703 text-align:center;
1704 padding:4px 3px 2px 2px;
1704 padding:4px 3px 2px 2px;
1705 }
1705 }
1706
1706
1707 .yui-overlay,.yui-panel-container {
1707 .yui-overlay,.yui-panel-container {
1708 visibility:hidden;
1708 visibility:hidden;
1709 position:absolute;
1709 position:absolute;
1710 z-index:2;
1710 z-index:2;
1711 }
1711 }
1712
1712
1713 .yui-tt {
1713 .yui-tt {
1714 visibility:hidden;
1714 visibility:hidden;
1715 position:absolute;
1715 position:absolute;
1716 color:#666;
1716 color:#666;
1717 background-color:#FFF;
1717 background-color:#FFF;
1718 font-family:arial, helvetica, verdana, sans-serif;
1718 font-family:arial, helvetica, verdana, sans-serif;
1719 border:2px solid #003367;
1719 border:2px solid #003367;
1720 font:100% sans-serif;
1720 font:100% sans-serif;
1721 width:auto;
1721 width:auto;
1722 opacity:1px;
1722 opacity:1px;
1723 padding:8px;
1723 padding:8px;
1724 white-space: pre;
1724 white-space: pre;
1725 }
1725 }
1726
1726
1727 .ac {
1727 .ac {
1728 vertical-align:top;
1728 vertical-align:top;
1729 }
1729 }
1730
1730
1731 .ac .yui-ac {
1731 .ac .yui-ac {
1732 position:relative;
1732 position:relative;
1733 font-family:arial;
1733 font-family:arial;
1734 font-size:100%;
1734 font-size:100%;
1735 }
1735 }
1736
1736
1737 .ac .perm_ac {
1737 .ac .perm_ac {
1738 width:15em;
1738 width:15em;
1739 }
1739 }
1740
1740
1741 .ac .yui-ac-input {
1741 .ac .yui-ac-input {
1742 width:100%;
1742 width:100%;
1743 }
1743 }
1744
1744
1745 .ac .yui-ac-container {
1745 .ac .yui-ac-container {
1746 position:absolute;
1746 position:absolute;
1747 top:1.6em;
1747 top:1.6em;
1748 width:100%;
1748 width:100%;
1749 }
1749 }
1750
1750
1751 .ac .yui-ac-content {
1751 .ac .yui-ac-content {
1752 position:absolute;
1752 position:absolute;
1753 width:100%;
1753 width:100%;
1754 border:1px solid gray;
1754 border:1px solid gray;
1755 background:#fff;
1755 background:#fff;
1756 overflow:hidden;
1756 overflow:hidden;
1757 z-index:9050;
1757 z-index:9050;
1758 }
1758 }
1759
1759
1760 .ac .yui-ac-shadow {
1760 .ac .yui-ac-shadow {
1761 position:absolute;
1761 position:absolute;
1762 width:100%;
1762 width:100%;
1763 background:#000;
1763 background:#000;
1764 -moz-opacity:0.1px;
1764 -moz-opacity:0.1px;
1765 opacity:.10;
1765 opacity:.10;
1766 filter:alpha(opacity = 10);
1766 filter:alpha(opacity = 10);
1767 z-index:9049;
1767 z-index:9049;
1768 margin:.3em;
1768 margin:.3em;
1769 }
1769 }
1770
1770
1771 .ac .yui-ac-content ul {
1771 .ac .yui-ac-content ul {
1772 width:100%;
1772 width:100%;
1773 margin:0;
1773 margin:0;
1774 padding:0;
1774 padding:0;
1775 }
1775 }
1776
1776
1777 .ac .yui-ac-content li {
1777 .ac .yui-ac-content li {
1778 cursor:default;
1778 cursor:default;
1779 white-space:nowrap;
1779 white-space:nowrap;
1780 margin:0;
1780 margin:0;
1781 padding:2px 5px;
1781 padding:2px 5px;
1782 }
1782 }
1783
1783
1784 .ac .yui-ac-content li.yui-ac-prehighlight {
1784 .ac .yui-ac-content li.yui-ac-prehighlight {
1785 background:#B3D4FF;
1785 background:#B3D4FF;
1786 }
1786 }
1787
1787
1788 .ac .yui-ac-content li.yui-ac-highlight {
1788 .ac .yui-ac-content li.yui-ac-highlight {
1789 background:#556CB5;
1789 background:#556CB5;
1790 color:#FFF;
1790 color:#FFF;
1791 }
1791 }
1792
1792
1793 .follow{
1793 .follow{
1794 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1794 background:url("../images/icons/heart_add.png") no-repeat scroll 3px;
1795 height: 16px;
1795 height: 16px;
1796 width: 20px;
1796 width: 20px;
1797 cursor: pointer;
1797 cursor: pointer;
1798 display: block;
1798 display: block;
1799 float: right;
1799 float: right;
1800 margin-top: 2px;
1800 margin-top: 2px;
1801 }
1801 }
1802
1802
1803 .following{
1803 .following{
1804 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1804 background:url("../images/icons/heart_delete.png") no-repeat scroll 3px;
1805 height: 16px;
1805 height: 16px;
1806 width: 20px;
1806 width: 20px;
1807 cursor: pointer;
1807 cursor: pointer;
1808 display: block;
1808 display: block;
1809 float: right;
1809 float: right;
1810 margin-top: 2px;
1810 margin-top: 2px;
1811 }
1811 }
1812
1812
1813 .currently_following{
1813 .currently_following{
1814
1814
1815 padding-left: 10px;
1815 padding-left: 10px;
1816 padding-bottom:5px;
1816 padding-bottom:5px;
1817
1817
1818 }
1818 }
1819
1819
1820
1820
1821
1821
1822 .add_icon {
1822 .add_icon {
1823 background:url("../images/icons/add.png") no-repeat scroll 3px;
1823 background:url("../images/icons/add.png") no-repeat scroll 3px;
1824 height:16px;
1824 height:16px;
1825 padding-left:20px;
1825 padding-left:20px;
1826 padding-top:1px;
1826 padding-top:1px;
1827 text-align:left;
1827 text-align:left;
1828 }
1828 }
1829
1829
1830 .edit_icon {
1830 .edit_icon {
1831 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1831 background:url("../images/icons/folder_edit.png") no-repeat scroll 3px;
1832 height:16px;
1832 height:16px;
1833 padding-left:20px;
1833 padding-left:20px;
1834 padding-top:1px;
1834 padding-top:1px;
1835 text-align:left;
1835 text-align:left;
1836 }
1836 }
1837
1837
1838 .delete_icon {
1838 .delete_icon {
1839 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1839 background:url("../images/icons/delete.png") no-repeat scroll 3px;
1840 height:16px;
1840 height:16px;
1841 padding-left:20px;
1841 padding-left:20px;
1842 padding-top:1px;
1842 padding-top:1px;
1843 text-align:left;
1843 text-align:left;
1844 }
1844 }
1845
1845
1846 .refresh_icon {
1846 .refresh_icon {
1847 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1847 background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
1848 height:16px;
1848 height:16px;
1849 padding-left:20px;
1849 padding-left:20px;
1850 padding-top:1px;
1850 padding-top:1px;
1851 text-align:left;
1851 text-align:left;
1852 }
1852 }
1853
1853
1854 .rss_icon {
1854 .rss_icon {
1855 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1855 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
1856 height:16px;
1856 height:16px;
1857 padding-left:20px;
1857 padding-left:20px;
1858 padding-top:1px;
1858 padding-top:1px;
1859 text-align:left;
1859 text-align:left;
1860 }
1860 }
1861
1861
1862 .atom_icon {
1862 .atom_icon {
1863 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1863 background:url("../images/icons/atom.png") no-repeat scroll 3px;
1864 height:16px;
1864 height:16px;
1865 padding-left:20px;
1865 padding-left:20px;
1866 padding-top:1px;
1866 padding-top:1px;
1867 text-align:left;
1867 text-align:left;
1868 }
1868 }
1869
1869
1870 .archive_icon {
1870 .archive_icon {
1871 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1871 background:url("../images/icons/compress.png") no-repeat scroll 3px;
1872 height:16px;
1872 height:16px;
1873 padding-left:20px;
1873 padding-left:20px;
1874 text-align:left;
1874 text-align:left;
1875 padding-top:1px;
1875 padding-top:1px;
1876 }
1876 }
1877
1877
1878 .action_button {
1878 .action_button {
1879 border:0;
1879 border:0;
1880 display:block;
1880 display:block;
1881 }
1881 }
1882
1882
1883 .action_button:hover {
1883 .action_button:hover {
1884 border:0;
1884 border:0;
1885 text-decoration:underline;
1885 text-decoration:underline;
1886 cursor:pointer;
1886 cursor:pointer;
1887 }
1887 }
1888
1888
1889 #switch_repos {
1889 #switch_repos {
1890 position:absolute;
1890 position:absolute;
1891 height:25px;
1891 height:25px;
1892 z-index:1;
1892 z-index:1;
1893 }
1893 }
1894
1894
1895 #switch_repos select {
1895 #switch_repos select {
1896 min-width:150px;
1896 min-width:150px;
1897 max-height:250px;
1897 max-height:250px;
1898 z-index:1;
1898 z-index:1;
1899 }
1899 }
1900
1900
1901 .breadcrumbs {
1901 .breadcrumbs {
1902 border:medium none;
1902 border:medium none;
1903 color:#FFF;
1903 color:#FFF;
1904 float:left;
1904 float:left;
1905 text-transform:uppercase;
1905 text-transform:uppercase;
1906 font-weight:700;
1906 font-weight:700;
1907 font-size:14px;
1907 font-size:14px;
1908 margin:0;
1908 margin:0;
1909 padding:11px 0 11px 10px;
1909 padding:11px 0 11px 10px;
1910 }
1910 }
1911
1911
1912 .breadcrumbs a {
1912 .breadcrumbs a {
1913 color:#FFF;
1913 color:#FFF;
1914 }
1914 }
1915
1915
1916 .flash_msg ul {
1916 .flash_msg ul {
1917 margin:0;
1917 margin:0;
1918 padding:0 0 10px;
1918 padding:0 0 10px;
1919 }
1919 }
1920
1920
1921 .error_msg {
1921 .error_msg {
1922 background-color:#FFCFCF;
1922 background-color:#FFCFCF;
1923 background-image:url("../../images/icons/error_msg.png");
1923 background-image:url("../../images/icons/error_msg.png");
1924 border:1px solid #FF9595;
1924 border:1px solid #FF9595;
1925 color:#C30;
1925 color:#C30;
1926 }
1926 }
1927
1927
1928 .warning_msg {
1928 .warning_msg {
1929 background-color:#FFFBCC;
1929 background-color:#FFFBCC;
1930 background-image:url("../../images/icons/warning_msg.png");
1930 background-image:url("../../images/icons/warning_msg.png");
1931 border:1px solid #FFF35E;
1931 border:1px solid #FFF35E;
1932 color:#C69E00;
1932 color:#C69E00;
1933 }
1933 }
1934
1934
1935 .success_msg {
1935 .success_msg {
1936 background-color:#D5FFCF;
1936 background-color:#D5FFCF;
1937 background-image:url("../../images/icons/success_msg.png");
1937 background-image:url("../../images/icons/success_msg.png");
1938 border:1px solid #97FF88;
1938 border:1px solid #97FF88;
1939 color:#090;
1939 color:#090;
1940 }
1940 }
1941
1941
1942 .notice_msg {
1942 .notice_msg {
1943 background-color:#DCE3FF;
1943 background-color:#DCE3FF;
1944 background-image:url("../../images/icons/notice_msg.png");
1944 background-image:url("../../images/icons/notice_msg.png");
1945 border:1px solid #93A8FF;
1945 border:1px solid #93A8FF;
1946 color:#556CB5;
1946 color:#556CB5;
1947 }
1947 }
1948
1948
1949 .success_msg,.error_msg,.notice_msg,.warning_msg {
1949 .success_msg,.error_msg,.notice_msg,.warning_msg {
1950 background-position:10px center;
1950 background-position:10px center;
1951 background-repeat:no-repeat;
1951 background-repeat:no-repeat;
1952 font-size:12px;
1952 font-size:12px;
1953 font-weight:700;
1953 font-weight:700;
1954 min-height:14px;
1954 min-height:14px;
1955 line-height:14px;
1955 line-height:14px;
1956 margin-bottom:0;
1956 margin-bottom:0;
1957 margin-top:0;
1957 margin-top:0;
1958 display:block;
1958 display:block;
1959 overflow:auto;
1959 overflow:auto;
1960 padding:6px 10px 6px 40px;
1960 padding:6px 10px 6px 40px;
1961 }
1961 }
1962
1962
1963 #msg_close {
1963 #msg_close {
1964 background:transparent url("../../icons/cross_grey_small.png") no-repeat scroll 0 0;
1964 background:transparent url("../../icons/cross_grey_small.png") no-repeat scroll 0 0;
1965 cursor:pointer;
1965 cursor:pointer;
1966 height:16px;
1966 height:16px;
1967 position:absolute;
1967 position:absolute;
1968 right:5px;
1968 right:5px;
1969 top:5px;
1969 top:5px;
1970 width:16px;
1970 width:16px;
1971 }
1971 }
1972
1972
1973 div#legend_container table,div#legend_choices table {
1973 div#legend_container table,div#legend_choices table {
1974 width:auto !important;
1974 width:auto !important;
1975 }
1975 }
1976
1976
1977 table#permissions_manage {
1977 table#permissions_manage {
1978 width:0 !important;
1978 width:0 !important;
1979 }
1979 }
1980
1980
1981 table#permissions_manage span.private_repo_msg {
1981 table#permissions_manage span.private_repo_msg {
1982 font-size:0.8em;
1982 font-size:0.8em;
1983 opacity:0.6px;
1983 opacity:0.6px;
1984 }
1984 }
1985
1985
1986 table#permissions_manage td.private_repo_msg {
1986 table#permissions_manage td.private_repo_msg {
1987 font-size:0.8em;
1987 font-size:0.8em;
1988 }
1988 }
1989
1989
1990 table#permissions_manage tr#add_perm_input td {
1990 table#permissions_manage tr#add_perm_input td {
1991 vertical-align:middle;
1991 vertical-align:middle;
1992 }
1992 }
1993
1993
1994 div.gravatar {
1994 div.gravatar {
1995 background-color:#FFF;
1995 background-color:#FFF;
1996 border:1px solid #D0D0D0;
1996 border:1px solid #D0D0D0;
1997 float:left;
1997 float:left;
1998 margin-right:0.7em;
1998 margin-right:0.7em;
1999 padding:2px 2px 0;
1999 padding:2px 2px 0;
2000 }
2000 }
2001
2001
2002 #header,#content,#footer {
2002 #header,#content,#footer {
2003 min-width:1024px;
2003 min-width:1024px;
2004 }
2004 }
2005
2005
2006 #content {
2006 #content {
2007 min-height:100%;
2007 min-height:100%;
2008 clear:both;
2008 clear:both;
2009 overflow:hidden;
2009 overflow:hidden;
2010 padding:14px 30px;
2010 padding:14px 30px;
2011 }
2011 }
2012
2012
2013 #content div.box div.title div.search {
2013 #content div.box div.title div.search {
2014 background:url("../../images/title_link.png") no-repeat top left;
2014 background:url("../../images/title_link.png") no-repeat top left;
2015 border-left:1px solid #316293;
2015 border-left:1px solid #316293;
2016 }
2016 }
2017
2017
2018 #content div.box div.title div.search div.input input {
2018 #content div.box div.title div.search div.input input {
2019 border:1px solid #316293;
2019 border:1px solid #316293;
2020 }
2020 }
2021
2021
2022 #content div.box div.title div.search div.button input.ui-state-default {
2022 #content div.box div.title div.search div.button input.ui-state-default {
2023 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2023 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2024 border:1px solid #316293;
2024 border:1px solid #316293;
2025 border-left:none;
2025 border-left:none;
2026 color:#FFF;
2026 color:#FFF;
2027 }
2027 }
2028
2028
2029 #content div.box div.title div.search div.button input.ui-state-hover {
2029 #content div.box div.title div.search div.button input.ui-state-hover {
2030 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2030 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2031 border:1px solid #316293;
2031 border:1px solid #316293;
2032 border-left:none;
2032 border-left:none;
2033 color:#FFF;
2033 color:#FFF;
2034 }
2034 }
2035
2035
2036 #content div.box div.form div.fields div.field div.highlight .ui-state-default {
2036 #content div.box div.form div.fields div.field div.highlight .ui-state-default {
2037 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2037 background:#4e85bb url("../../images/button_highlight.png") repeat-x;
2038 border-top:1px solid #5c91a4;
2038 border-top:1px solid #5c91a4;
2039 border-left:1px solid #2a6f89;
2039 border-left:1px solid #2a6f89;
2040 border-right:1px solid #2b7089;
2040 border-right:1px solid #2b7089;
2041 border-bottom:1px solid #1a6480;
2041 border-bottom:1px solid #1a6480;
2042 color:#fff;
2042 color:#fff;
2043 }
2043 }
2044
2044
2045 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2045 #content div.box div.form div.fields div.field div.highlight .ui-state-hover {
2046 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2046 background:#46a0c1 url("../../images/button_highlight_selected.png") repeat-x;
2047 border-top:1px solid #78acbf;
2047 border-top:1px solid #78acbf;
2048 border-left:1px solid #34819e;
2048 border-left:1px solid #34819e;
2049 border-right:1px solid #35829f;
2049 border-right:1px solid #35829f;
2050 border-bottom:1px solid #257897;
2050 border-bottom:1px solid #257897;
2051 color:#fff;
2051 color:#fff;
2052 }
2052 }
2053
2053
2054 ins,div.options a:hover {
2054 ins,div.options a:hover {
2055 text-decoration:none;
2055 text-decoration:none;
2056 }
2056 }
2057
2057
2058 img,#header #header-inner #quick li a:hover span.normal,#header #header-inner #quick li ul li.last,#content div.box div.form div.fields div.field div.textarea table td table td a,#clone_url {
2058 img,#header #header-inner #quick li a:hover span.normal,#header #header-inner #quick li ul li.last,#content div.box div.form div.fields div.field div.textarea table td table td a,#clone_url {
2059 border:none;
2059 border:none;
2060 }
2060 }
2061
2061
2062 img.icon,.right .merge img {
2062 img.icon,.right .merge img {
2063 vertical-align:bottom;
2063 vertical-align:bottom;
2064 }
2064 }
2065
2065
2066 #header ul#logged-user,#content div.box div.title ul.links,#content div.box div.message div.dismiss,#content div.box div.traffic div.legend ul {
2066 #header ul#logged-user,#content div.box div.title ul.links,#content div.box div.message div.dismiss,#content div.box div.traffic div.legend ul {
2067 float:right;
2067 float:right;
2068 margin:0;
2068 margin:0;
2069 padding:0;
2069 padding:0;
2070 }
2070 }
2071
2071
2072 #header #header-inner #home,#header #header-inner #logo,#content div.box ul.left,#content div.box ol.left,#content div.box div.pagination-left,div#commit_history,div#legend_data,div#legend_container,div#legend_choices {
2072 #header #header-inner #home,#header #header-inner #logo,#content div.box ul.left,#content div.box ol.left,#content div.box div.pagination-left,div#commit_history,div#legend_data,div#legend_container,div#legend_choices {
2073 float:left;
2073 float:left;
2074 }
2074 }
2075
2075
2076 #header #header-inner #quick li:hover ul ul,#header #header-inner #quick li:hover ul ul ul,#header #header-inner #quick li:hover ul ul ul ul,#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow {
2076 #header #header-inner #quick li:hover ul ul,#header #header-inner #quick li:hover ul ul ul,#header #header-inner #quick li:hover ul ul ul ul,#content #left #menu ul.closed,#content #left #menu li ul.collapsed,.yui-tt-shadow {
2077 display:none;
2077 display:none;
2078 }
2078 }
2079
2079
2080 #header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded {
2080 #header #header-inner #quick li:hover ul,#header #header-inner #quick li li:hover ul,#header #header-inner #quick li li li:hover ul,#header #header-inner #quick li li li li:hover ul,#content #left #menu ul.opened,#content #left #menu li ul.expanded {
2081 display:block;
2081 display:block;
2082 }
2082 }
2083
2083
2084 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2084 #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a {
2085 color:#bfe3ff;
2085 color:#bfe3ff;
2086 }
2086 }
2087
2087
2088 #content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal {
2088 #content div.box ol.lower-roman,#content div.box ol.upper-roman,#content div.box ol.lower-alpha,#content div.box ol.upper-alpha,#content div.box ol.decimal {
2089 margin:10px 24px 10px 44px;
2089 margin:10px 24px 10px 44px;
2090 }
2090 }
2091
2091
2092 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2092 #content div.box div.form,#content div.box div.table,#content div.box div.traffic {
2093 clear:both;
2093 clear:both;
2094 overflow:hidden;
2094 overflow:hidden;
2095 margin:0;
2095 margin:0;
2096 padding:0 20px 10px;
2096 padding:0 20px 10px;
2097 }
2097 }
2098
2098
2099 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2099 #content div.box div.form div.fields,#login div.form,#login div.form div.fields,#register div.form,#register div.form div.fields {
2100 clear:both;
2100 clear:both;
2101 overflow:hidden;
2101 overflow:hidden;
2102 margin:0;
2102 margin:0;
2103 padding:0;
2103 padding:0;
2104 }
2104 }
2105
2105
2106 #content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span {
2106 #content div.box div.form div.fields div.field div.label span,#login div.form div.fields div.field div.label span,#register div.form div.fields div.field div.label span {
2107 height:1%;
2107 height:1%;
2108 display:block;
2108 display:block;
2109 color:#363636;
2109 color:#363636;
2110 margin:0;
2110 margin:0;
2111 padding:2px 0 0;
2111 padding:2px 0 0;
2112 }
2112 }
2113
2113
2114 #content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error {
2114 #content div.box div.form div.fields div.field div.input input.error,#login div.form div.fields div.field div.input input.error,#register div.form div.fields div.field div.input input.error {
2115 background:#FBE3E4;
2115 background:#FBE3E4;
2116 border-top:1px solid #e1b2b3;
2116 border-top:1px solid #e1b2b3;
2117 border-left:1px solid #e1b2b3;
2117 border-left:1px solid #e1b2b3;
2118 border-right:1px solid #FBC2C4;
2118 border-right:1px solid #FBC2C4;
2119 border-bottom:1px solid #FBC2C4;
2119 border-bottom:1px solid #FBC2C4;
2120 }
2120 }
2121
2121
2122 #content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success {
2122 #content div.box div.form div.fields div.field div.input input.success,#login div.form div.fields div.field div.input input.success,#register div.form div.fields div.field div.input input.success {
2123 background:#E6EFC2;
2123 background:#E6EFC2;
2124 border-top:1px solid #cebb98;
2124 border-top:1px solid #cebb98;
2125 border-left:1px solid #cebb98;
2125 border-left:1px solid #cebb98;
2126 border-right:1px solid #c6d880;
2126 border-right:1px solid #c6d880;
2127 border-bottom:1px solid #c6d880;
2127 border-bottom:1px solid #c6d880;
2128 }
2128 }
2129
2129
2130 #content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input {
2130 #content div.box-left div.form div.fields div.field div.textarea,#content div.box-right div.form div.fields div.field div.textarea,#content div.box div.form div.fields div.field div.select select,#content div.box table th.selected input,#content div.box table td.selected input {
2131 margin:0;
2131 margin:0;
2132 }
2132 }
2133
2133
2134 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios{
2134 #content div.box-left div.form div.fields div.field div.select,#content div.box-left div.form div.fields div.field div.checkboxes,#content div.box-left div.form div.fields div.field div.radios,#content div.box-right div.form div.fields div.field div.select,#content div.box-right div.form div.fields div.field div.checkboxes,#content div.box-right div.form div.fields div.field div.radios{
2135 margin:0 0 0 0px !important;
2135 margin:0 0 0 0px !important;
2136 padding:0;
2136 padding:0;
2137 }
2137 }
2138
2138
2139 #content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios {
2139 #content div.box div.form div.fields div.field div.select,#content div.box div.form div.fields div.field div.checkboxes,#content div.box div.form div.fields div.field div.radios {
2140 margin:0 0 0 200px;
2140 margin:0 0 0 200px;
2141 padding:0;
2141 padding:0;
2142 }
2142 }
2143
2143
2144
2144
2145 #content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover {
2145 #content div.box div.form div.fields div.field div.select a:hover,#content div.box div.form div.fields div.field div.select a.ui-selectmenu:hover,#content div.box div.action a:hover {
2146 color:#000;
2146 color:#000;
2147 text-decoration:none;
2147 text-decoration:none;
2148 }
2148 }
2149
2149
2150 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2150 #content div.box div.form div.fields div.field div.select a.ui-selectmenu-focus,#content div.box div.action a.ui-selectmenu-focus {
2151 border:1px solid #666;
2151 border:1px solid #666;
2152 }
2152 }
2153
2153
2154 #content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio {
2154 #content div.box div.form div.fields div.field div.checkboxes div.checkbox,#content div.box div.form div.fields div.field div.radios div.radio {
2155 clear:both;
2155 clear:both;
2156 overflow:hidden;
2156 overflow:hidden;
2157 margin:0;
2157 margin:0;
2158 padding:8px 0 2px;
2158 padding:8px 0 2px;
2159 }
2159 }
2160
2160
2161 #content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input {
2161 #content div.box div.form div.fields div.field div.checkboxes div.checkbox input,#content div.box div.form div.fields div.field div.radios div.radio input {
2162 float:left;
2162 float:left;
2163 margin:0;
2163 margin:0;
2164 }
2164 }
2165
2165
2166 #content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label {
2166 #content div.box div.form div.fields div.field div.checkboxes div.checkbox label,#content div.box div.form div.fields div.field div.radios div.radio label {
2167 height:1%;
2167 height:1%;
2168 display:block;
2168 display:block;
2169 float:left;
2169 float:left;
2170 margin:2px 0 0 4px;
2170 margin:2px 0 0 4px;
2171 }
2171 }
2172
2172
2173 div.form div.fields div.field div.button input,#content div.box div.form div.fields div.buttons input,div.form div.fields div.buttons input,#content div.box div.action div.button input {
2173 div.form div.fields div.field div.button input,#content div.box div.form div.fields div.buttons input,div.form div.fields div.buttons input,#content div.box div.action div.button input {
2174 color:#000;
2174 color:#000;
2175 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2175 font-family:Lucida Grande, Verdana, Lucida Sans Regular, Lucida Sans Unicode, Arial, sans-serif;
2176 font-size:11px;
2176 font-size:11px;
2177 font-weight:700;
2177 font-weight:700;
2178 margin:0;
2178 margin:0;
2179 }
2179 }
2180
2180
2181 div.form div.fields div.field div.button .ui-state-default,#content div.box div.form div.fields div.buttons input.ui-state-default {
2181 div.form div.fields div.field div.button .ui-state-default,#content div.box div.form div.fields div.buttons input.ui-state-default {
2182 background:#e5e3e3 url("../images/button.png") repeat-x;
2182 background:#e5e3e3 url("../images/button.png") repeat-x;
2183 border-top:1px solid #DDD;
2183 border-top:1px solid #DDD;
2184 border-left:1px solid #c6c6c6;
2184 border-left:1px solid #c6c6c6;
2185 border-right:1px solid #DDD;
2185 border-right:1px solid #DDD;
2186 border-bottom:1px solid #c6c6c6;
2186 border-bottom:1px solid #c6c6c6;
2187 color:#515151;
2187 color:#515151;
2188 outline:none;
2188 outline:none;
2189 margin:0;
2189 margin:0;
2190 padding:6px 12px;
2190 padding:6px 12px;
2191 }
2191 }
2192
2192
2193 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2193 div.form div.fields div.field div.button .ui-state-hover,#content div.box div.form div.fields div.buttons input.ui-state-hover {
2194 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2194 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2195 border-top:1px solid #ccc;
2195 border-top:1px solid #ccc;
2196 border-left:1px solid #bebebe;
2196 border-left:1px solid #bebebe;
2197 border-right:1px solid #b1b1b1;
2197 border-right:1px solid #b1b1b1;
2198 border-bottom:1px solid #afafaf;
2198 border-bottom:1px solid #afafaf;
2199 color:#515151;
2199 color:#515151;
2200 outline:none;
2200 outline:none;
2201 margin:0;
2201 margin:0;
2202 padding:6px 12px;
2202 padding:6px 12px;
2203 }
2203 }
2204
2204
2205 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2205 div.form div.fields div.field div.highlight,#content div.box div.form div.fields div.buttons div.highlight {
2206 display:inline;
2206 display:inline;
2207 }
2207 }
2208
2208
2209 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2209 #content div.box div.form div.fields div.buttons,div.form div.fields div.buttons {
2210 margin:10px 0 0 200px;
2210 margin:10px 0 0 200px;
2211 padding:0;
2211 padding:0;
2212 }
2212 }
2213
2213
2214 #content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons {
2214 #content div.box-left div.form div.fields div.buttons,#content div.box-right div.form div.fields div.buttons,div.box-left div.form div.fields div.buttons,div.box-right div.form div.fields div.buttons {
2215 margin:10px 0 0;
2215 margin:10px 0 0;
2216 }
2216 }
2217
2217
2218 #content div.box table td.user,#content div.box table td.address {
2218 #content div.box table td.user,#content div.box table td.address {
2219 width:10%;
2219 width:10%;
2220 text-align:center;
2220 text-align:center;
2221 }
2221 }
2222
2222
2223 #content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link {
2223 #content div.box div.action div.button,#login div.form div.fields div.field div.input div.link,#register div.form div.fields div.field div.input div.link {
2224 text-align:right;
2224 text-align:right;
2225 margin:6px 0 0;
2225 margin:6px 0 0;
2226 padding:0;
2226 padding:0;
2227 }
2227 }
2228
2228
2229 #content div.box div.action div.button input.ui-state-default,#login div.form div.fields div.buttons input.ui-state-default,#register div.form div.fields div.buttons input.ui-state-default {
2229 #content div.box div.action div.button input.ui-state-default,#login div.form div.fields div.buttons input.ui-state-default,#register div.form div.fields div.buttons input.ui-state-default {
2230 background:#e5e3e3 url("../images/button.png") repeat-x;
2230 background:#e5e3e3 url("../images/button.png") repeat-x;
2231 border-top:1px solid #DDD;
2231 border-top:1px solid #DDD;
2232 border-left:1px solid #c6c6c6;
2232 border-left:1px solid #c6c6c6;
2233 border-right:1px solid #DDD;
2233 border-right:1px solid #DDD;
2234 border-bottom:1px solid #c6c6c6;
2234 border-bottom:1px solid #c6c6c6;
2235 color:#515151;
2235 color:#515151;
2236 margin:0;
2236 margin:0;
2237 padding:6px 12px;
2237 padding:6px 12px;
2238 }
2238 }
2239
2239
2240 #content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover {
2240 #content div.box div.action div.button input.ui-state-hover,#login div.form div.fields div.buttons input.ui-state-hover,#register div.form div.fields div.buttons input.ui-state-hover {
2241 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2241 background:#b4b4b4 url("../images/button_selected.png") repeat-x;
2242 border-top:1px solid #ccc;
2242 border-top:1px solid #ccc;
2243 border-left:1px solid #bebebe;
2243 border-left:1px solid #bebebe;
2244 border-right:1px solid #b1b1b1;
2244 border-right:1px solid #b1b1b1;
2245 border-bottom:1px solid #afafaf;
2245 border-bottom:1px solid #afafaf;
2246 color:#515151;
2246 color:#515151;
2247 margin:0;
2247 margin:0;
2248 padding:6px 12px;
2248 padding:6px 12px;
2249 }
2249 }
2250
2250
2251 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2251 #content div.box div.pagination div.results,#content div.box div.pagination-wh div.results {
2252 text-align:left;
2252 text-align:left;
2253 float:left;
2253 float:left;
2254 margin:0;
2254 margin:0;
2255 padding:0;
2255 padding:0;
2256 }
2256 }
2257
2257
2258 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2258 #content div.box div.pagination div.results span,#content div.box div.pagination-wh div.results span {
2259 height:1%;
2259 height:1%;
2260 display:block;
2260 display:block;
2261 float:left;
2261 float:left;
2262 background:#ebebeb url("../images/pager.png") repeat-x;
2262 background:#ebebeb url("../images/pager.png") repeat-x;
2263 border-top:1px solid #dedede;
2263 border-top:1px solid #dedede;
2264 border-left:1px solid #cfcfcf;
2264 border-left:1px solid #cfcfcf;
2265 border-right:1px solid #c4c4c4;
2265 border-right:1px solid #c4c4c4;
2266 border-bottom:1px solid #c4c4c4;
2266 border-bottom:1px solid #c4c4c4;
2267 color:#4A4A4A;
2267 color:#4A4A4A;
2268 font-weight:700;
2268 font-weight:700;
2269 margin:0;
2269 margin:0;
2270 padding:6px 8px;
2270 padding:6px 8px;
2271 }
2271 }
2272
2272
2273 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2273 #content div.box div.pagination ul.pager li.disabled,#content div.box div.pagination-wh a.disabled {
2274 color:#B4B4B4;
2274 color:#B4B4B4;
2275 padding:6px;
2275 padding:6px;
2276 }
2276 }
2277
2277
2278 #login,#register {
2278 #login,#register {
2279 width:520px;
2279 width:520px;
2280 margin:10% auto 0;
2280 margin:10% auto 0;
2281 padding:0;
2281 padding:0;
2282 }
2282 }
2283
2283
2284 #login div.color,#register div.color {
2284 #login div.color,#register div.color {
2285 clear:both;
2285 clear:both;
2286 overflow:hidden;
2286 overflow:hidden;
2287 background:#FFF;
2287 background:#FFF;
2288 margin:10px auto 0;
2288 margin:10px auto 0;
2289 padding:3px 3px 3px 0;
2289 padding:3px 3px 3px 0;
2290 }
2290 }
2291
2291
2292 #login div.color a,#register div.color a {
2292 #login div.color a,#register div.color a {
2293 width:20px;
2293 width:20px;
2294 height:20px;
2294 height:20px;
2295 display:block;
2295 display:block;
2296 float:left;
2296 float:left;
2297 margin:0 0 0 3px;
2297 margin:0 0 0 3px;
2298 padding:0;
2298 padding:0;
2299 }
2299 }
2300
2300
2301 #login div.title h5,#register div.title h5 {
2301 #login div.title h5,#register div.title h5 {
2302 color:#fff;
2302 color:#fff;
2303 margin:10px;
2303 margin:10px;
2304 padding:0;
2304 padding:0;
2305 }
2305 }
2306
2306
2307 #login div.form div.fields div.field,#register div.form div.fields div.field {
2307 #login div.form div.fields div.field,#register div.form div.fields div.field {
2308 clear:both;
2308 clear:both;
2309 overflow:hidden;
2309 overflow:hidden;
2310 margin:0;
2310 margin:0;
2311 padding:0 0 10px;
2311 padding:0 0 10px;
2312 }
2312 }
2313
2313
2314 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2314 #login div.form div.fields div.field span.error-message,#register div.form div.fields div.field span.error-message {
2315 height:1%;
2315 height:1%;
2316 display:block;
2316 display:block;
2317 color:red;
2317 color:red;
2318 margin:8px 0 0;
2318 margin:8px 0 0;
2319 padding:0;
2319 padding:0;
2320 width: 320px;
2320 max-width: 320px;
2321 }
2321 }
2322
2322
2323 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2323 #login div.form div.fields div.field div.label label,#register div.form div.fields div.field div.label label {
2324 color:#000;
2324 color:#000;
2325 font-weight:700;
2325 font-weight:700;
2326 }
2326 }
2327
2327
2328 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2328 #login div.form div.fields div.field div.input,#register div.form div.fields div.field div.input {
2329 float:left;
2329 float:left;
2330 margin:0;
2330 margin:0;
2331 padding:0;
2331 padding:0;
2332 }
2332 }
2333
2333
2334 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2334 #login div.form div.fields div.field div.checkbox,#register div.form div.fields div.field div.checkbox {
2335 margin:0 0 0 184px;
2335 margin:0 0 0 184px;
2336 padding:0;
2336 padding:0;
2337 }
2337 }
2338
2338
2339 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2339 #login div.form div.fields div.field div.checkbox label,#register div.form div.fields div.field div.checkbox label {
2340 color:#565656;
2340 color:#565656;
2341 font-weight:700;
2341 font-weight:700;
2342 }
2342 }
2343
2343
2344 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2344 #login div.form div.fields div.buttons input,#register div.form div.fields div.buttons input {
2345 color:#000;
2345 color:#000;
2346 font-size:1em;
2346 font-size:1em;
2347 font-weight:700;
2347 font-weight:700;
2348 font-family:Verdana, Helvetica, Sans-Serif;
2348 font-family:Verdana, Helvetica, Sans-Serif;
2349 margin:0;
2349 margin:0;
2350 }
2350 }
2351
2351
2352 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2352 #changeset_content .container .wrapper,#graph_content .container .wrapper {
2353 width:600px;
2353 width:600px;
2354 }
2354 }
2355
2355
2356 #changeset_content .container .left,#graph_content .container .left {
2356 #changeset_content .container .left,#graph_content .container .left {
2357 float:left;
2357 float:left;
2358 width:70%;
2358 width:70%;
2359 padding-left:5px;
2359 padding-left:5px;
2360 }
2360 }
2361
2361
2362 #changeset_content .container .left .date,.ac .match {
2362 #changeset_content .container .left .date,.ac .match {
2363 font-weight:700;
2363 font-weight:700;
2364 padding-top: 5px;
2364 padding-top: 5px;
2365 padding-bottom:5px;
2365 padding-bottom:5px;
2366 }
2366 }
2367
2367
2368 div#legend_container table td,div#legend_choices table td {
2368 div#legend_container table td,div#legend_choices table td {
2369 border:none !important;
2369 border:none !important;
2370 height:20px !important;
2370 height:20px !important;
2371 padding:0 !important;
2371 padding:0 !important;
2372 }
2372 }
2373
2373
2374 #q_filter{
2374 #q_filter{
2375 border:0 none;
2375 border:0 none;
2376 color:#AAAAAA;
2376 color:#AAAAAA;
2377 margin-bottom:-4px;
2377 margin-bottom:-4px;
2378 margin-top:-4px;
2378 margin-top:-4px;
2379 padding-left:3px;
2379 padding-left:3px;
2380 }
2380 }
2381
2381
General Comments 0
You need to be logged in to leave comments. Login now