diff --git a/app/settings.py b/app/settings.py index def99cb..974bf0a 100644 --- a/app/settings.py +++ b/app/settings.py @@ -244,9 +244,9 @@ INSTALLED_APPS = ( 'blog', 'aldryn_bootstrap3', - - 'djangocms_forms' - # 'debug_toolbar', +'debug_toolbar', + 'djangocms_forms', + 'smartsnippets', ) SOUTH_MIGRATION_MODULES = { @@ -321,6 +321,7 @@ CMS_TEMPLATES = ( DJANGOCMS_FORMS_TEMPLATES = ( ('djangocms_forms/form_template/default.html', 'Default'), ('form_template/consultation.html', 'Consultation'), + ('form_template/product_class.html', 'Trademark Product Class'), ) diff --git a/djangocms_forms/cms_plugins.py b/djangocms_forms/cms_plugins.py index 561c0b6..247c404 100644 --- a/djangocms_forms/cms_plugins.py +++ b/djangocms_forms/cms_plugins.py @@ -104,13 +104,24 @@ class FormPlugin(CMSPluginBase): context = super(FormPlugin, self).render(context, instance, placeholder) request = context['request'] + form_slug = "form-%d" % instance.plugin_reference.id + submission_instance = instance + if request.session.get(form_slug, False): + try: + submission_instance = FormSubmission.objects.get(id=request.session.get(form_slug, False)) + except: + pass + + form = FormBuilder( initial={'referrer': request.path_info}, form_definition=instance, label_suffix='', auto_id='%s') context.update({ - 'form': form + 'form': form, + 'results': submission_instance }) + return context diff --git a/djangocms_forms/migrations/0004_auto_20150914_0835.py b/djangocms_forms/migrations/0004_auto_20150914_0835.py new file mode 100644 index 0000000..4c2ac3b --- /dev/null +++ b/djangocms_forms/migrations/0004_auto_20150914_0835.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('djangocms_forms', '0003_add_referrer_field'), + ] + + operations = [ + migrations.AlterField( + model_name='formdefinition', + name='form_template', + field=models.CharField(default=b'djangocms_forms/form_template/default.html', max_length=150, verbose_name='Form Template', blank=True, choices=[(b'djangocms_forms/form_template/default.html', b'Default'), (b'form_template/consultation.html', b'Consultation'), (b'form_template/product_class.html', b'Trademark Product Class')]), + preserve_default=True, + ), + ] diff --git a/djangocms_forms/templates/djangocms_forms/form_template/default.html b/djangocms_forms/templates/djangocms_forms/form_template/default.html index cdba209..d780025 100644 --- a/djangocms_forms/templates/djangocms_forms/form_template/default.html +++ b/djangocms_forms/templates/djangocms_forms/form_template/default.html @@ -1,4 +1,27 @@ {% load cms_tags djangocms_forms_tags i18n sekizai_tags staticfiles %} +
{% if instance.title %}

{{ instance.title }}

diff --git a/requirements.txt b/requirements.txt index b8e0b2f..2b1839e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,4 +32,5 @@ django-meta-mixin django-admin-enhancer aldryn-apphooks-config #export C_INCLUDE_PATH=/usr/local/Cellar/libxml2/2.9.2/include/libxml2:$C_INCLUDE_PATH -git+https://github.com/MagicSolutions/django-cmsplugin-tabs.git#egg=django-cmsplugin-tabs \ No newline at end of file +git+https://github.com/MagicSolutions/django-cmsplugin-tabs.git#egg=django-cmsplugin-tabs +django-cms-smartsnippets \ No newline at end of file diff --git a/smartsnippets/__init__.py b/smartsnippets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smartsnippets/admin.py b/smartsnippets/admin.py new file mode 100644 index 0000000..81eb95e --- /dev/null +++ b/smartsnippets/admin.py @@ -0,0 +1,281 @@ +import re +from collections import Counter + +from django.contrib import admin +from django.db.models import Q +from django.contrib.admin.widgets import FilteredSelectMultiple +from django.contrib.sites.models import Site +from django.core.exceptions import ValidationError +from django.forms import ModelForm, ModelMultipleChoiceField +from django.forms.models import BaseInlineFormSet +from django.template import Template, TemplateSyntaxError, \ + TemplateDoesNotExist, loader +from django.template.loader import render_to_string +from django.forms.widgets import Select + +from django.contrib.admin.templatetags.admin_static import static + +from admin_extend.extend import registered_form, extend_registered, \ + add_bidirectional_m2m + +from models import SmartSnippet, SmartSnippetVariable, DropDownVariable, clean_variable_name +from settings import ( + shared_sites, include_orphan, restrict_user, handle_permissions_checks, + custom_widgets_resources, USE_BOOTSTRAP_ACE) +from widgets_pool import widget_pool + + +class SnippetForm(ModelForm): + include_orphan = include_orphan + use_ace_theme = USE_BOOTSTRAP_ACE + + class Meta: + model = SmartSnippet + exclude = () + + def __init__(self, *args, **kwargs): + if 'sites' in self.base_fields: + # disallow django to validate if empty since it is done + # in the clean sites method + self.base_fields['sites'].required = False + super(SnippetForm, self).__init__(*args, **kwargs) + + def clean_sites(self): + empty_sites = Site.objects.none() + self.cleaned_data['sites'] = self.cleaned_data.get( + 'sites', empty_sites) or empty_sites + + def ids_list(queryset): + return list(queryset.values_list('id', flat=True)) + + all_in_form = self.base_fields['sites'].queryset + assigned_in_form = ids_list(self.cleaned_data['sites']) + unassigned_in_form = ids_list( + all_in_form.exclude(id__in=assigned_in_form)) + + if self.instance.pk: + assigned_and_unchanged = ids_list( + self.instance.sites.exclude(id__in=unassigned_in_form)) + all_assigned = assigned_in_form + assigned_and_unchanged + else: + all_assigned = assigned_in_form + + self.cleaned_data['sites'] = Site.objects.filter(id__in=all_assigned) + + if not self.include_orphan and not self.cleaned_data['sites']: + raise ValidationError('This field is required.') + return self.cleaned_data['sites'] + + def clean_template_code(self): + code = self.cleaned_data.get('template_code', None) + if not code: + return code + try: + Template(code) + except TemplateSyntaxError, e: + raise ValidationError(e) + return code + + def clean_template_path(self): + path = self.cleaned_data.get('template_path', None) + if not path: + return path + try: + loader.get_template(path) + except TemplateDoesNotExist, e: + raise ValidationError(e) + return path + + def clean(self): + clean_result = super(SnippetForm, self).clean() + self.validate_unique_variable_names() + return clean_result + + def validate_unique_variable_names(self): + """ Validates name uniqueness over all variable inlines. """ + all_variable_names = [clean_variable_name(value) + for key, value in self.data.dict().iteritems() + if re.match(r"variables[0-9-]*name", key)] + duplicate_variable_names = [var_name for var_name, count + in Counter(all_variable_names).iteritems() + if count > 1] + + if duplicate_variable_names: + if len(duplicate_variable_names) == 1: + raise ValidationError( + 'The variable name "{}" is used multiple times.'.format(duplicate_variable_names.pop())) + raise ValidationError('The variable names "{}" are used multiple times.'.format( + ', '.join(duplicate_variable_names))) + + +class SnippetVariablesFormSet(BaseInlineFormSet): + def get_queryset(self): + if not hasattr(self, '_queryset'): + available_widgets = [widget.__name__ for widget in widget_pool.get_all_widgets()] + qs = super(SnippetVariablesFormSet, self).get_queryset().filter(widget__in=available_widgets) + self._queryset = qs + return self._queryset + + +class SnippetVariablesAdmin(admin.StackedInline): + model = SmartSnippetVariable + extra = 0 + readonly_fields = ['predefined_widgets'] + + def predefined_widgets(self, ssvar): + return render_to_string( + 'smartsnippets/predefined_widgets.html', + {'widgets': custom_widgets_resources, + 'snippet_var': ssvar}) + + def formfield_for_dbfield(self, db_field, **kwargs): + if db_field.name == 'widget': + kwargs['widget'] = Select(choices=tuple([(x.__name__, x.name) for x in widget_pool.get_all_widgets()])) + return super(SnippetVariablesAdmin,self).formfield_for_dbfield(db_field, **kwargs) + + @staticmethod + def _fieldsets(required): + return ( + (None, { + 'fields': (required, ) + }), + ('Advanced', { + 'fields': (('resources', 'predefined_widgets'), ), + 'classes': ('collapse', ) + }), + ) + + +class RegularSnippetVariablesAdmin(SnippetVariablesAdmin): + formset = SnippetVariablesFormSet + fieldsets = SnippetVariablesAdmin._fieldsets(('name', 'widget')) + + +class DropDownVariableAdmin(SnippetVariablesAdmin): + model = DropDownVariable + exclude = ('widget',) + fieldsets = SnippetVariablesAdmin._fieldsets(('name', 'choices')) + + +class SnippetAdmin(admin.ModelAdmin): + inlines = [RegularSnippetVariablesAdmin, DropDownVariableAdmin] + shared_sites = shared_sites + include_orphan = include_orphan + restrict_user = restrict_user + + list_filter = ('sites__name', ) + list_display = ('name', 'site_list') + search_fields = ['name'] + form = SnippetForm + change_form_template = 'smartsnippets/change_form.html' + filter_horizontal = ('sites', ) + + class Media: + js = ("admin/js/SmartSnippets.Variables.js", + "admin/js/SmartSnippets.PredefinedWidgets.js",) + + @property + def media(self): + + media_obj = super(SnippetAdmin, self).media + + if not USE_BOOTSTRAP_ACE: + media_obj.add_css({ + 'all': ( + static('admin/css/forms.css'), + static('admin/css/smartsnippets-extra.css'),) + }) + return media_obj + + def site_list(self, template): + return ", ".join([site.name for site in template.sites.all()]) + site_list.short_description = 'sites' + + def get_readonly_fields(self, request, obj=None): + if not handle_permissions_checks: + return super(SnippetAdmin, self)\ + .get_readonly_fields(request, obj=obj) + ro = self.form.base_fields.keys() + if request.user.is_superuser or obj is None: + return [] + if self.restrict_user and self.shared_sites: + if obj.sites.filter(name__in=self.shared_sites): + return ro + return [] + + def has_delete_permission(self, request, obj=None): + if not handle_permissions_checks: + return super(SnippetAdmin, self)\ + .has_delete_permission(request, obj=obj) + if request.user.is_superuser or obj is None: + return True + if self.restrict_user and self.shared_sites: + return not bool(obj.sites.filter(name__in=self.shared_sites)) + return True + + def formfield_for_manytomany(self, db_field, request, **kwargs): + if not handle_permissions_checks: + return super(SnippetAdmin, self)\ + .formfield_for_manytomany(db_field, request, **kwargs) + if db_field.name == "sites": + f = Q() + if not request.user.is_superuser: + if self.restrict_user: + f |= Q(globalpagepermission__user=request.user) + f |= Q(globalpagepermission__group__user=request.user) + kwargs["queryset"] = Site.objects.filter(f).distinct() + return (super(SnippetAdmin, self) + .formfield_for_manytomany(db_field, request, **kwargs)) + + def get_queryset(self, request): + q = super(SnippetAdmin, self).get_queryset(request) + if not handle_permissions_checks: + return q + f = Q() + if not request.user.is_superuser: + if self.restrict_user: + f |= Q(sites__globalpagepermission__user=request.user) + f |= Q(sites__globalpagepermission__group__user=request.user) + if self.shared_sites: + f |= Q(sites__name__in=self.shared_sites) + if self.include_orphan: + f |= Q(sites__isnull=True) + + return q.filter(f).distinct() + + +admin.site.register(SmartSnippet, SnippetAdmin) + + +@extend_registered +class ExtendedSiteAdminForm(add_bidirectional_m2m(registered_form(Site))): + + snippets = ModelMultipleChoiceField( + queryset=SmartSnippet.objects.all(), + required=False, + widget=FilteredSelectMultiple( + verbose_name='Snippets', + is_stacked=False + ) + ) + + def _get_bidirectional_m2m_fields(self): + return super(ExtendedSiteAdminForm, self).\ + _get_bidirectional_m2m_fields() + [('snippets', 'smartsnippet_set')] + + def clean_snippets(self): + assigned_snippets = self.cleaned_data['snippets'] + if self.instance.pk is None or include_orphan: + return assigned_snippets + pks = [s.pk for s in assigned_snippets] + # snippets that were previously assigned to this site, but got unassigned + unassigned_snippets = self.instance.smartsnippet_set.exclude(pk__in=pks) + snippets_with_no_sites = [] + for snippet in unassigned_snippets: + if snippet.sites.count() == 1: + snippets_with_no_sites.append(snippet) + if snippets_with_no_sites: + raise ValidationError( + "Following snippets will remain with no sites assigned: %s" % + ", ".join(s.name for s in snippets_with_no_sites)) + return assigned_snippets diff --git a/smartsnippets/cms_plugins.py b/smartsnippets/cms_plugins.py new file mode 100644 index 0000000..5518488 --- /dev/null +++ b/smartsnippets/cms_plugins.py @@ -0,0 +1,225 @@ + +from django.db.models import Q +from django.forms.widgets import Media as WidgetsMedia +from django.contrib.sites.models import Site +from django.contrib.admin.templatetags.admin_static import static +from django.core.urlresolvers import reverse + +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool + +from .models import SmartSnippetPointer, SmartSnippet, Variable +from .settings import ( + shared_sites, include_orphan, restrict_user, USE_BOOTSTRAP_ACE) +from django.conf import settings +import itertools + + +def variables_media(media, variables=None): + variables = variables or [] + media.add_js([static('admin/js/SmartSnippetLib.js')]) + media.add_js( + itertools.chain(*[var.js for var in variables]) + ) + media.add_css( + {'all': itertools.chain(*[var.css for var in variables])}) + + +def add_variables_media(context): + if not context: + return + formMedia = context.get('media') + if not formMedia: + return + variables = context.get('variables') + variables_media(formMedia, variables) + + +class SmartSnippetPlugin(CMSPluginBase): + shared_sites = shared_sites + include_orphan = include_orphan + restrict_user = restrict_user + + change_form_template = 'smartsnippets/snippet_change_form.html' + + model = SmartSnippetPointer + name = 'Smart Snippet' + render_template = 'smartsnippets/plugin.html' + text_enabled = True + + @property + def media(self): + + if not USE_BOOTSTRAP_ACE: + media_obj = super(SmartSnippetPlugin, self).media + else: + media_obj = WidgetsMedia( + js=(( + static('admin/js/core.js'), + static('admin/js/admin/RelatedObjectLookups.js'), + static('libs/jquery-2.1.1.min.js'), + static('libs/bootstrap/js/bootstrap.min.js'), + static('admin/js/custom.js'), ) + ), + css={ + 'all': ( + '//fonts.googleapis.com/css?family=Open+Sans:400,300', + static('libs/bootstrap/css/bootstrap.css'), + static('libs/ace/css/ace.min.css'), + static('admin/css/custom.css'), ) + } + ) + + media_obj.add_js( + (reverse('admin:jsi18n'), + static('admin/js/SmartSnippetLib.js'), + static('admin/js/jquery.init.js'), + static('admin/js/default.jQuery.init.js'))) + + if not USE_BOOTSTRAP_ACE: + media_obj.add_css({ + 'all': ( + static('admin/css/forms.css'), + static('admin/css/base.css'), + static('css/tipTip.css'), + static('admin/css/snippet_plugin_default.css'), ) + }) + media_obj.add_js(( + static('js/jquery.tipTip.minified.js'), + static('admin/js/snippet_plugin_default.js'), ) + ) + return media_obj + + def response_add(self, request, obj, **kwargs): + response = super(SmartSnippetPlugin, self)\ + .response_add(request, obj, **kwargs) + if hasattr(response, 'context_data'): + response.context_data['plugin'] = obj + return response + + def add_view(self, request, form_url='', extra_context=None): + extra_context = extra_context or {} + try: + snippet = SmartSnippet.objects.get( + id=int(request.GET.get('snippet', ''))) + except (ValueError, SmartSnippet.DoesNotExist): + snippet = None + else: + empty_plugin_vars = self._make_vars_for_rendering(snippet) + extra_context.update({'variables': empty_plugin_vars}) + + response = super(SmartSnippetPlugin, self).add_view( + request, form_url, extra_context) + + if snippet and hasattr(response, 'context_data'): + self._change_snippet_plugin_for_preview( + response.context_data, snippet) + add_variables_media(response.context_data) + return response + + def _make_vars_for_rendering(self, snippet, plugin=None): + """ + Create plugin varibles instances prepared for template rendering. + """ + plugin = plugin or SmartSnippetPointer(snippet=snippet) + selected_snippet_vars = snippet.variables.all() + + existing_plugin_vars = plugin.variables.filter( + snippet_variable__in=selected_snippet_vars) + existing_snippet_var_ids = set([ + plugin_var.snippet_variable.id + for plugin_var in existing_plugin_vars]) + # add empty model instances; these are not saved in the db and are + # created just for rendering purpose + empty_plugin_vars = [ + Variable(snippet=plugin, snippet_variable=snippet_var) + for snippet_var in selected_snippet_vars + if snippet_var.id not in existing_snippet_var_ids] + return sorted( + list(existing_plugin_vars) + empty_plugin_vars, + key=lambda v: v.snippet_variable.name) + + def _change_snippet_plugin_for_preview(self, context, snippet): + """ + The plugin instance rendered in the context needs to correspond to + the new selected snippet in order for it to render its template code. + If this is not changed for the context, the plugin that is saved + in the db will get rendered in the preview box(which is not what + we want if the snippet gets changed). + """ + empty_plugin = SmartSnippetPointer(snippet=snippet) + # copy all attributes from the cms plugin to the plugin instance + # in order for cms to render it as if it exists + empty_plugin.__dict__.update(context['plugin'].__dict__) + empty_plugin.pk = empty_plugin.id + context['plugin'] = empty_plugin + context['original'] = context['plugin'] + + def change_view(self, request, object_id, *args, **kwargs): + extra_context = kwargs.get('extra_context', None) or {} + + try: + selected_snippet = SmartSnippet.objects.get( + id=int(request.GET.get('snippet', ''))) + except (ValueError, SmartSnippet.DoesNotExist): + selected_snippet = None + + plugin = SmartSnippetPointer.objects.get(pk=object_id) + snippet_changed = (selected_snippet and + selected_snippet.id != plugin.snippet.id) + + if snippet_changed: + variables = self._make_vars_for_rendering( + selected_snippet, plugin) + else: + snippet_vars = plugin.snippet.variables.all() + variables = plugin.variables.filter( + snippet_variable__in=snippet_vars + ).order_by('snippet_variable__name') + + extra_context.update({'variables': variables}) + kwargs['extra_context'] = extra_context + response = super(SmartSnippetPlugin, self).change_view( + request, object_id, *args, **kwargs) + + context = getattr(response, 'context_data', None) + add_variables_media(context) + if snippet_changed and context: + adminform = response.context_data.get('adminform') + if not adminform: + return response + adminform.form.initial['snippet'] = selected_snippet.id + self._change_snippet_plugin_for_preview( + response.context_data, selected_snippet) + return response + + def render(self, context, instance, placeholder): + context.update({'content': instance.render(context)}) + return context + + def save_model(self, request, obj, form, change): + super(SmartSnippetPlugin, self).save_model(request, obj, form, change) + vars = obj.snippet.variables.all() + for var in vars: + v, _ = Variable.objects.get_or_create(snippet=obj, snippet_variable=var) + v.value = request.REQUEST.get('_'+var.name+'_', '') + v.save() + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "snippet": + f = Q(sites=Site.objects.get_current()) + if self.shared_sites: + f |= Q(sites__name__in=self.shared_sites) + kwargs["queryset"] = SmartSnippet.objects.filter(f).distinct() + return (super(SmartSnippetPlugin, self) + .formfield_for_foreignkey(db_field, request, **kwargs)) + + def icon_src(self, instance): + return settings.STATIC_URL + u"images/snippet.png" + + def icon_alt(self, instance): + if instance.snippet: + return instance.snippet.name + return "" + +plugin_pool.register_plugin(SmartSnippetPlugin) diff --git a/smartsnippets/exceptions.py b/smartsnippets/exceptions.py new file mode 100644 index 0000000..269ed95 --- /dev/null +++ b/smartsnippets/exceptions.py @@ -0,0 +1,5 @@ +class WidgetAlreadyRegistered(Exception): + pass + +class WidgetNotRegistered(Exception): + pass \ No newline at end of file diff --git a/smartsnippets/migrations/0001_initial.py b/smartsnippets/migrations/0001_initial.py new file mode 100644 index 0000000..2b5553a --- /dev/null +++ b/smartsnippets/migrations/0001_initial.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0001_initial'), + ('sites', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='SmartSnippet', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=255)), + ('template_code', models.TextField(verbose_name='Template code', blank=True)), + ('template_path', models.CharField(help_text='Enter a template (i.e. "snippets/plugin_xy.html") which will be rendered.', max_length=100, verbose_name='Template path', blank=True)), + ('description', models.TextField(verbose_name='Description', blank=True)), + ('documentation_link', models.CharField(help_text='Enter URL (i.e. "http://snippets/docs/plugin_xy.html") to the extended documentation.', max_length=100, verbose_name='Documentation link', blank=True)), + ('sites', models.ManyToManyField(help_text='Select on which sites the snippet will be available.', to='sites.Site', verbose_name=b'sites', blank=True)), + ], + options={ + 'ordering': ['name'], + 'verbose_name': 'Smart Snippet', + 'verbose_name_plural': 'Smart Snippets', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='SmartSnippetPointer', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), + ('snippet', models.ForeignKey(to='smartsnippets.SmartSnippet')), + ], + options={ + 'db_table': 'cmsplugin_smartsnippetpointer', + }, + bases=('cms.cmsplugin',), + ), + migrations.CreateModel( + name='SmartSnippetVariable', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(help_text='Enter the name of the variable defined in the smart snippet template.', max_length=50)), + ('widget', models.CharField(help_text='Select the type of the variable defined in the smart snippet template.', max_length=50)), + ('resources', models.TextField(null=True, verbose_name='Admin resources', blank=True)), + ], + options={ + 'ordering': ['name'], + 'verbose_name': 'Standard variable', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='DropDownVariable', + fields=[ + ('smartsnippetvariable_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='smartsnippets.SmartSnippetVariable')), + ('choices', models.CharField(help_text='Enter a comma separated list of choices that will be available in the dropdown variable when adding and configuring the smart snippet on a page.', max_length=512)), + ], + options={ + }, + bases=('smartsnippets.smartsnippetvariable',), + ), + migrations.CreateModel( + name='Variable', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('value', models.TextField()), + ('snippet', models.ForeignKey(related_name='variables', to='smartsnippets.SmartSnippetPointer')), + ('snippet_variable', models.ForeignKey(related_name='variables', to='smartsnippets.SmartSnippetVariable')), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.AlterUniqueTogether( + name='variable', + unique_together=set([('snippet_variable', 'snippet')]), + ), + migrations.AddField( + model_name='smartsnippetvariable', + name='snippet', + field=models.ForeignKey(related_name='variables', to='smartsnippets.SmartSnippet'), + preserve_default=True, + ), + migrations.AlterUniqueTogether( + name='smartsnippetvariable', + unique_together=set([('snippet', 'name')]), + ), + ] diff --git a/smartsnippets/migrations/0002_change_smartsnippetvariable_description.py b/smartsnippets/migrations/0002_change_smartsnippetvariable_description.py new file mode 100644 index 0000000..ce5010f --- /dev/null +++ b/smartsnippets/migrations/0002_change_smartsnippetvariable_description.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('smartsnippets', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='smartsnippetvariable', + name='name', + field=models.CharField(help_text='Enter the name of the variable defined in the smart snippet template. Unallowed charactes will be removed when the form is saved.', max_length=50), + preserve_default=True, + ), + ] diff --git a/smartsnippets/migrations/0003_change_smartsnippetvariable_description.py b/smartsnippets/migrations/0003_change_smartsnippetvariable_description.py new file mode 100644 index 0000000..6c606f7 --- /dev/null +++ b/smartsnippets/migrations/0003_change_smartsnippetvariable_description.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('smartsnippets', '0002_change_smartsnippetvariable_description'), + ] + + operations = [ + migrations.AlterField( + model_name='smartsnippetvariable', + name='name', + field=models.CharField(help_text='Enter the name of the variable defined in the smart snippet template. Unallowed characters will be removed when the form is saved.', max_length=50), + preserve_default=True, + ), + ] diff --git a/smartsnippets/migrations/__init__.py b/smartsnippets/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smartsnippets/models.py b/smartsnippets/models.py new file mode 100644 index 0000000..020f312 --- /dev/null +++ b/smartsnippets/models.py @@ -0,0 +1,283 @@ +import re + +from django.core.cache import cache +from django.db import models +from django.core.exceptions import ValidationError +from django.template import Template, TemplateSyntaxError, \ + TemplateDoesNotExist, loader +from django.db.models import signals +from django.contrib.sites.models import Site +from django.utils.translation import ugettext_lazy as _ + +from cms.models import CMSPlugin + +from sekizai.helpers import ( + Watcher as sekizai_context_watcher, + get_varname as sekizai_cache_key, +) + +from .resources_processor import get_resources +from .settings import ( + snippet_caching_time, caching_enabled, allow_inheritance, + inherit_variable_pattern) + + +class SmartSnippet(models.Model): + name = models.CharField(unique=True, max_length=255) + template_code = models.TextField(_("Template code"), blank=True) + template_path = models.CharField( + _("Template path"), + max_length=100, blank=True, + help_text=_( + 'Enter a template (i.e. "snippets/plugin_xy.html")' + ' which will be rendered.')) + sites = models.ManyToManyField( + Site, null=False, blank=True, + help_text=_('Select on which sites the snippet will be available.'), + verbose_name='sites') + description = models.TextField(_("Description"), blank=True) + documentation_link = models.CharField( + _("Documentation link"), + max_length=100, blank=True, + help_text=_('Enter URL (i.e. "http://snippets/docs/plugin_xy.html")' + ' to the extended documentation.')) + + class Meta: + ordering = ['name'] + verbose_name = 'Smart Snippet' + verbose_name_plural = 'Smart Snippets' + + def __init__(self, *args, **kwargs): + #hack due to + # https://code.djangoproject.com/ticket/16433#no1 + for rel_obj in self._meta.get_all_related_objects(): + rel_obj.help_text = "" + super(SmartSnippet, self).__init__(*args, **kwargs) + + def get_template(self): + if self.template_path: + return loader.get_template(self.template_path) + else: + return Template(self.template_code) + + def clean_template_code(self): + try: + self.get_template() + except (TemplateSyntaxError, TemplateDoesNotExist), e: + raise ValidationError(str(e)) + + def get_cache_key(self): + return 'smartsnippet-%s' % self.pk + + def render(self, context): + return self.get_template().render(context) + + def __unicode__(self): + return self.name + + +class SmartSnippetVariable(models.Model): + name = models.CharField( + max_length=50, + help_text=_('Enter the name of the variable defined in the smart snippet ' + 'template. Unallowed characters will be removed when the form is saved.')) + widget = models.CharField( + max_length=50, + help_text=_('Select the type of the variable defined ' + 'in the smart snippet template.')) + snippet = models.ForeignKey(SmartSnippet, related_name="variables") + + resources = models.TextField(_('Admin resources'), null=True, blank=True) + + def __init__(self, *args, **kwargs): + super(SmartSnippetVariable, self).__init__(*args, **kwargs) + self._resource_dict = None + + @property + def resources_dict(self): + if self._resource_dict is None: + self._resource_dict = get_resources(self.resources) + return self._resource_dict + + class Meta: + unique_together = (('snippet', 'name')) + ordering = ['name'] + verbose_name = "Standard variable" + + def save(self, *args, **kwargs): + self.name = clean_variable_name(self.name) + super(SmartSnippetVariable, self).save(*args, **kwargs) + # auto-generate missing variables for all snippet plugins + plugin_ids = SmartSnippetPointer.objects \ + .filter(snippet=self.snippet) \ + .exclude(variables__snippet_variable=self) \ + .values_list('id', flat=True) + # in order to improve performance do a bulk create + Variable.objects.bulk_create([ + Variable(snippet_id=plugin_id, snippet_variable=self) + for plugin_id in plugin_ids + ]) + if not caching_enabled: + return + # invalidate cache for changed plugins + cache_keys = [ + SmartSnippetPointer.cache_key_format.format(primary_key=plugin_id) + for plugin_id in plugin_ids + ] + cache.delete_many(cache_keys) + + def __unicode__(self): + return self.name + + +class SmartSnippetPointer(CMSPlugin): + snippet = models.ForeignKey(SmartSnippet) + cache_key_format = 'smartsnippet-pointer-{primary_key}' + + class Meta: + db_table = 'cmsplugin_smartsnippetpointer' + + def get_cache_key(self): + return self.cache_key_format.format(primary_key=self.pk) + + def _do_restore_sekizai_context(self, context, changes): + """Sekizai tags involve magic with the context object. + When need to restore the sekizai content to the context""" + cache_key = sekizai_cache_key() + sekizai_container = context.get(cache_key) + for key, values in changes.items(): + sekizai_namespace = sekizai_container[key] + for value in values: + sekizai_namespace.append(value) + + def fetch_cached(self, context): + cache_key = self.get_cache_key() + user = context['request'].user + if not user.is_staff and caching_enabled and cache.has_key(cache_key): + cached_value = cache.get(cache_key) + rendered_content = cached_value.get('content') + sekizai = cached_value.get('sekizai') + self._do_restore_sekizai_context(context, sekizai) + return rendered_content + + def set_and_get_cache(self, user, sekizai_diff, content): + if not user.is_staff and caching_enabled: + value = {'content': content, 'sekizai': sekizai_diff} + key = self.get_cache_key() + cache.set(key, value, snippet_caching_time) + return content + + def render_pointer(self, context): + vars_qs = self.variables.select_related('snippet_variable').all() + + def var_for_context(var): + default, overwrite = var.formatted_value, None + if allow_inheritance: + overwrite = context.get( + inherit_variable_pattern.format(identifier=var.pk)) + name = var.snippet_variable.name + value = overwrite if overwrite is not None else default + return (name, value) + + variables = dict(var_for_context(var) for var in vars_qs) + context.update(variables) + sekizai_differ = sekizai_context_watcher(context) + content = self.snippet.render(context) + sekizai_diff = sekizai_differ.get_changes() + user = context.get('request').user + return self.set_and_get_cache(user, sekizai_diff, content) + + def render(self, context): + return self.fetch_cached(context) or self.render_pointer(context) + + def copy_relations(self, old_instance): + for variable in old_instance.variables.all(): + variable.pk = None + variable.snippet = self + variable.save() + + def __unicode__(self): + return unicode(self.snippet) + + +class Variable(models.Model): + snippet_variable = models.ForeignKey(SmartSnippetVariable, + related_name='variables') + value = models.TextField() + snippet = models.ForeignKey(SmartSnippetPointer, related_name='variables') + + class Meta: + unique_together = (('snippet_variable', 'snippet')) + + @property + def formatted_value(self): + from widgets_pool import widget_pool + widget_instance = widget_pool.get_widget(self.widget)(self) + return widget_instance.formatted_value + + @property + def name(self): + return self.snippet_variable.name + + @property + def widget(self): + return self.snippet_variable.widget + + @property + def templates(self): + return self.snippet_variable.resources_dict.get('html', set()) + + @property + def js(self): + return self.snippet_variable.resources_dict.get('js', set()) + + @property + def css(self): + return self.snippet_variable.resources_dict.get('css', set()) + + +class DropDownVariable(SmartSnippetVariable): + choices = models.CharField( + max_length=512, + help_text=_( + 'Enter a comma separated list of choices that will be ' + 'available in the dropdown variable when adding and ' + 'configuring the smart snippet on a page.')) + + @property + def choices_list(self): + return ([choice.strip() for choice in self.choices.split(',') if choice.strip()] + if self.choices else []) + + def save(self, *args, **kwargs): + self.widget = 'DropDownField' + super(DropDownVariable, self).save(*args, **kwargs) + + +def remove_cached_pointers(instance, **kwargs): + if not caching_enabled: + return + + pointer_pks = SmartSnippetPointer.objects.filter( + snippet=instance + ).values_list('pk', flat=True) + cache_keys = [ + SmartSnippetPointer.cache_key_format.format(primary_key=pk) + for pk in pointer_pks + ] + cache.delete_many(cache_keys) + + +def remove_cached_variables(instance, **kwargs): + if not caching_enabled: + return + key = instance.snippet.get_cache_key() + if key in cache: + cache.delete(key) + +def clean_variable_name(variable_name): + """ Convert the variable name to a name that can be used as a template variable. """ + return re.sub(r"[^a-zA-Z0-9_]", '', variable_name.replace(' ', '_')) + +signals.post_save.connect(remove_cached_pointers, sender=SmartSnippet) +signals.post_save.connect(remove_cached_variables, sender=Variable) diff --git a/smartsnippets/resources_processor.py b/smartsnippets/resources_processor.py new file mode 100644 index 0000000..145e67c --- /dev/null +++ b/smartsnippets/resources_processor.py @@ -0,0 +1,68 @@ +from collections import defaultdict +from django.contrib.admin.templatetags.admin_static import static +from django.conf import settings +import os + + +def get_filer_url(link): + if 'filertags' in settings.INSTALLED_APPS: + from filertags.templatetags.filertags import filerfile + return filerfile(link) + return link + + +def get_static_url(link): + return static(link) + + +PROCESSORS = { + 'static': get_static_url, + 'filer': get_filer_url, +} + + +def _process(resource): + # split processor name from resource link + link = resource.strip().split(':', 1) + + processor_type = link[0].strip() + if processor_type in PROCESSORS: + processor_type, link = link + else: + processor_type = None + link = link[0] + + res_type = os.path.splitext(link)[1].strip('.') + if not res_type: + return None + + if not processor_type: + return (res_type, link) + + return (res_type, PROCESSORS[processor_type](link)) + + +def get_resources(resources_data): + """ + Parses resources_data to get all resources defined with + the following format: + snippet-field/custom.html, static: admin/style.css, + http://somesite/absolute-url.js + and returns a dictionary with resources extensions and the links defined. + """ + if not resources_data: + return {} + resources_data = resources_data or '' + resources = defaultdict(list) + for resource in resources_data.split(','): + processed_link = _process(resource) + if not processed_link: + continue + links = resources[processed_link[0]] + res_link = processed_link[1] + # check if already added. Note: using list and not set just to + # make sure the ordering is kept + if res_link not in links: + links.append(processed_link[1]) + return resources + diff --git a/smartsnippets/settings.py b/smartsnippets/settings.py new file mode 100644 index 0000000..20336b8 --- /dev/null +++ b/smartsnippets/settings.py @@ -0,0 +1,33 @@ +from django.conf import settings + +shared_sites = getattr(settings, 'SMARTSNIPPETS_SHARED_SITES', []) +include_orphan = getattr(settings, 'SMARTSNIPPETS_INCLUDE_ORPHAN', True) +restrict_user = getattr(settings, 'SMARTSNIPPETS_RESTRICT_USER', False) +handle_permissions_checks = getattr(settings, 'SMARTSNIPPETS_HANDLE_PERMISSIONS_CHECKS', True) + +snippet_caching_time = getattr(settings, 'SMARTSNIPPETS_CACHING_TIME', 300) +caching_enabled = snippet_caching_time != 0 + + +def _has_data_defined(widget_data): + return ( + widget_data.get('widget', None) or + widget_data.get('resources', None) + ) + +custom_widgets_resources = { + widget_type: widget_data + for widget_type, widget_data in getattr( + settings, 'SMARTSNIPPETS_PREDEFINED_WIDGETS', {}).items() + if _has_data_defined(widget_data) +} + +allow_inheritance = getattr( + settings, 'SMARTSNIPPETS_ALLOW_INHERITANCE', + 'smartsnippets_inherit' in settings.INSTALLED_APPS) +inherit_variable_pattern = getattr( + settings, 'SMARTSNIPPETS_INHERIT_VAR_PATTERN', + '_snippet_inherit_{identifier}') + +USE_BOOTSTRAP_ACE = getattr( + settings, 'SMARTSNIPPETS_USE_BOOTSTRAP_ACE', False) diff --git a/smartsnippets/south_migrations/0001_initial.py b/smartsnippets/south_migrations/0001_initial.py new file mode 100644 index 0000000..6b64fca --- /dev/null +++ b/smartsnippets/south_migrations/0001_initial.py @@ -0,0 +1,95 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding model 'SmartSnippet' + db.create_table('smartsnippets_smartsnippet', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), + ('template_code', self.gf('django.db.models.fields.TextField')()), + )) + db.send_create_signal('smartsnippets', ['SmartSnippet']) + + # Adding model 'SmartSnippetPointer' + db.create_table('cmsplugin_smartsnippetpointer', ( + ('cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)), + ('snippet', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['smartsnippets.SmartSnippet'])), + )) + db.send_create_signal('smartsnippets', ['SmartSnippetPointer']) + + # Adding model 'Variable' + db.create_table('smartsnippets_variable', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('value', self.gf('django.db.models.fields.CharField')(max_length=255)), + ('snippet', self.gf('django.db.models.fields.related.ForeignKey')(related_name='variables', to=orm['smartsnippets.SmartSnippetPointer'])), + )) + db.send_create_signal('smartsnippets', ['Variable']) + + # Adding unique constraint on 'Variable', fields ['name', 'snippet'] + db.create_unique('smartsnippets_variable', ['name', 'snippet_id']) + + + def backwards(self, orm): + + # Removing unique constraint on 'Variable', fields ['name', 'snippet'] + db.delete_unique('smartsnippets_variable', ['name', 'snippet_id']) + + # Deleting model 'SmartSnippet' + db.delete_table('smartsnippets_smartsnippet') + + # Deleting model 'SmartSnippetPointer' + db.delete_table('cmsplugin_smartsnippetpointer') + + # Deleting model 'Variable' + db.delete_table('smartsnippets_variable') + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'template_code': ('django.db.models.fields.TextField', [], {}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('name', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0002_auto.py b/smartsnippets/south_migrations/0002_auto.py new file mode 100644 index 0000000..a629e81 --- /dev/null +++ b/smartsnippets/south_migrations/0002_auto.py @@ -0,0 +1,74 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding M2M table for field sites on 'SmartSnippet' + db.create_table('smartsnippets_smartsnippet_sites', ( + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), + ('smartsnippet', models.ForeignKey(orm['smartsnippets.smartsnippet'], null=False)), + ('site', models.ForeignKey(orm['sites.site'], null=False)) + )) + db.create_unique('smartsnippets_smartsnippet_sites', ['smartsnippet_id', 'site_id']) + + + def backwards(self, orm): + + # Removing M2M table for field sites on 'SmartSnippet' + db.delete_table('smartsnippets_smartsnippet_sites') + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False'}), + 'template_code': ('django.db.models.fields.TextField', [], {}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('name', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0003_auto__add_field_smartsnippet_template_path.py b/smartsnippets/south_migrations/0003_auto__add_field_smartsnippet_template_path.py new file mode 100644 index 0000000..f6a5bdb --- /dev/null +++ b/smartsnippets/south_migrations/0003_auto__add_field_smartsnippet_template_path.py @@ -0,0 +1,70 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'SmartSnippet.template_path' + db.add_column('smartsnippets_smartsnippet', 'template_path', self.gf('django.db.models.fields.CharField')(default='', max_length=50, blank=True), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'SmartSnippet.template_path' + db.delete_column('smartsnippets_smartsnippet', 'template_path') + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('name', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0004_auto__chg_field_smartsnippet_template_path.py b/smartsnippets/south_migrations/0004_auto__chg_field_smartsnippet_template_path.py new file mode 100644 index 0000000..64cfaf4 --- /dev/null +++ b/smartsnippets/south_migrations/0004_auto__chg_field_smartsnippet_template_path.py @@ -0,0 +1,70 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'SmartSnippet.template_path' + db.alter_column('smartsnippets_smartsnippet', 'template_path', self.gf('django.db.models.fields.CharField')(max_length=100)) + + + def backwards(self, orm): + + # Changing field 'SmartSnippet.template_path' + db.alter_column('smartsnippets_smartsnippet', 'template_path', self.gf('django.db.models.fields.CharField')(max_length=50)) + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('name', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0005_auto__add_dropdownvariable__add_smartsnippetvariable__add_unique_smart.py b/smartsnippets/south_migrations/0005_auto__add_dropdownvariable__add_smartsnippetvariable__add_unique_smart.py new file mode 100644 index 0000000..491951e --- /dev/null +++ b/smartsnippets/south_migrations/0005_auto__add_dropdownvariable__add_smartsnippetvariable__add_unique_smart.py @@ -0,0 +1,123 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Removing unique constraint on 'Variable', fields ['snippet', 'name'] + db.delete_unique('smartsnippets_variable', ['snippet_id', 'name']) + + # Adding model 'DropDownVariable' + db.create_table('smartsnippets_dropdownvariable', ( + ('smartsnippetvariable_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['smartsnippets.SmartSnippetVariable'], unique=True, primary_key=True)), + ('choices', self.gf('django.db.models.fields.CharField')(max_length=512)), + )) + db.send_create_signal('smartsnippets', ['DropDownVariable']) + + # Adding model 'SmartSnippetVariable' + db.create_table('smartsnippets_smartsnippetvariable', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('widget', self.gf('django.db.models.fields.CharField')(max_length=50)), + ('snippet', self.gf('django.db.models.fields.related.ForeignKey')(related_name='variables', to=orm['smartsnippets.SmartSnippet'])), + )) + db.send_create_signal('smartsnippets', ['SmartSnippetVariable']) + + # Adding unique constraint on 'SmartSnippetVariable', fields ['snippet', 'name'] + db.create_unique('smartsnippets_smartsnippetvariable', ['snippet_id', 'name']) + + # Adding field 'Variable.snippet_variable' + db.add_column('smartsnippets_variable', 'snippet_variable', self.gf('django.db.models.fields.related.ForeignKey')(related_name='variables', null=True, to=orm['smartsnippets.SmartSnippetVariable']), keep_default=False) + + # Changing field 'Variable.value' + db.alter_column('smartsnippets_variable', 'value', self.gf('django.db.models.fields.CharField')(max_length=1024)) + + + def backwards(self, orm): + + # Removing unique constraint on 'SmartSnippetVariable', fields ['snippet', 'name'] + db.delete_unique('smartsnippets_smartsnippetvariable', ['snippet_id', 'name']) + + # Deleting model 'DropDownVariable' + db.delete_table('smartsnippets_dropdownvariable') + + # Deleting model 'SmartSnippetVariable' + db.delete_table('smartsnippets_smartsnippetvariable') + + # Deleting field 'Variable.snippet_variable' + db.delete_column('smartsnippets_variable', 'snippet_variable_id') + + # Changing field 'Variable.value' + db.alter_column('smartsnippets_variable', 'value', self.gf('django.db.models.fields.CharField')(max_length=255)) + + # Adding unique constraint on 'Variable', fields ['snippet', 'name'] + db.create_unique('smartsnippets_variable', ['snippet_id', 'name']) + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'null': 'True', 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0006_populate_variables_and_relations.py b/smartsnippets/south_migrations/0006_populate_variables_and_relations.py new file mode 100644 index 0000000..b619eec --- /dev/null +++ b/smartsnippets/south_migrations/0006_populate_variables_and_relations.py @@ -0,0 +1,118 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models +from django.template import Template, VariableNode, loader + +class Migration(DataMigration): + + def forwards(self, orm): + # create variables for all templates using the old auto-detection method + for snippet in orm.SmartSnippet.objects.all(): + for var_name in self.get_variables_list(snippet): + snippet.variables.create(name=var_name, widget='TextField') + + # relate snippet instance variable by id instead of name + for snippet_ptr in orm.SmartSnippetPointer.objects.all(): + for snippet_ptr_var in snippet_ptr.variables.all(): + try: + snippet_var = orm.SmartSnippetVariable.objects.get(snippet=snippet_ptr.snippet, + name=snippet_ptr_var.name) + snippet_ptr_var.snippet_variable = snippet_var + snippet_ptr_var.save() + except orm.SmartSnippetVariable.DoesNotExist: + pass # ignore unused snippet variable values and then drop them + orm.Variable.objects.filter(snippet_variable=None).delete() + + def backwards(self, orm): + # repopulate variable names from relation + for variable in orm.Variable.objects.all(): + variable.name = variable.snippet_variable.name + variable.save() + + # delete variable definitions + orm.Variable.objects.all().update(snippet_variable=None) + orm.SmartSnippetVariable.objects.all().delete() + + def get_template(self, snippet): + if snippet.template_path: + return None + else: + return Template(snippet.template_code) + + def get_variables_list(self, snippet): + t = self.get_template(snippet) + result = set() + if t is None: + return result + + for node in t.nodelist.get_nodes_by_type(VariableNode): + v = getattr(node.filter_expression.var, 'var', None) + if v and not v.endswith('_'): + result.add(v) + return result + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'null': 'True', 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0007_auto__del_field_variable_name__chg_field_variable_snippet_variable__ad.py b/smartsnippets/south_migrations/0007_auto__del_field_variable_name__chg_field_variable_snippet_variable__ad.py new file mode 100644 index 0000000..48ad361 --- /dev/null +++ b/smartsnippets/south_migrations/0007_auto__del_field_variable_name__chg_field_variable_snippet_variable__ad.py @@ -0,0 +1,94 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Deleting field 'Variable.name' + db.delete_column('smartsnippets_variable', 'name') + + # Changing field 'Variable.snippet_variable' + db.alter_column('smartsnippets_variable', 'snippet_variable_id', self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['smartsnippets.SmartSnippetVariable'])) + + # Adding unique constraint on 'Variable', fields ['snippet', 'snippet_variable'] + db.create_unique('smartsnippets_variable', ['snippet_id', 'snippet_variable_id']) + + + def backwards(self, orm): + + # Removing unique constraint on 'Variable', fields ['snippet', 'snippet_variable'] + db.delete_unique('smartsnippets_variable', ['snippet_id', 'snippet_variable_id']) + + # Adding field 'Variable.name' + db.add_column('smartsnippets_variable', 'name', self.gf('django.db.models.fields.CharField')(default='', max_length=255), keep_default=False) + + # Changing field 'Variable.snippet_variable' + db.alter_column('smartsnippets_variable', 'snippet_variable_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['smartsnippets.SmartSnippetVariable'])) + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('snippet_variable', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + } + } + + complete_apps = ['smartsnippets'] diff --git a/smartsnippets/south_migrations/0008_auto__add_field_smartsnippet_description__add_field_smartsnippet_docum.py b/smartsnippets/south_migrations/0008_auto__add_field_smartsnippet_description__add_field_smartsnippet_docum.py new file mode 100644 index 0000000..64ef2d0 --- /dev/null +++ b/smartsnippets/south_migrations/0008_auto__add_field_smartsnippet_description__add_field_smartsnippet_docum.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'SmartSnippet.description' + db.add_column('smartsnippets_smartsnippet', 'description', + self.gf('django.db.models.fields.TextField')(default='', blank=True), + keep_default=False) + + # Adding field 'SmartSnippet.documentation_link' + db.add_column('smartsnippets_smartsnippet', 'documentation_link', + self.gf('django.db.models.fields.CharField')(default='', max_length=100, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'SmartSnippet.description' + db.delete_column('smartsnippets_smartsnippet', 'description') + + # Deleting field 'SmartSnippet.documentation_link' + db.delete_column('smartsnippets_smartsnippet', 'documentation_link') + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'documentation_link': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('snippet_variable', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + } + } + + complete_apps = ['smartsnippets'] \ No newline at end of file diff --git a/smartsnippets/south_migrations/0009_auto__chg_field_variable_value.py b/smartsnippets/south_migrations/0009_auto__chg_field_variable_value.py new file mode 100644 index 0000000..3d8116e --- /dev/null +++ b/smartsnippets/south_migrations/0009_auto__chg_field_variable_value.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Variable.value' + db.alter_column('smartsnippets_variable', 'value', self.gf('django.db.models.fields.CharField')(max_length=2048)) + + def backwards(self, orm): + + # Changing field 'Variable.value' + db.alter_column('smartsnippets_variable', 'value', self.gf('django.db.models.fields.CharField')(max_length=1024)) + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 6, 3, 0, 0)'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'documentation_link': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('snippet_variable', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.CharField', [], {'max_length': '2048'}) + } + } + + complete_apps = ['smartsnippets'] \ No newline at end of file diff --git a/smartsnippets/south_migrations/0010_auto__chg_field_variable_value.py b/smartsnippets/south_migrations/0010_auto__chg_field_variable_value.py new file mode 100644 index 0000000..e55eab7 --- /dev/null +++ b/smartsnippets/south_migrations/0010_auto__chg_field_variable_value.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Variable.value' + db.alter_column('smartsnippets_variable', 'value', self.gf('django.db.models.fields.TextField')()) + + def backwards(self, orm): + + # Changing field 'Variable.value' + db.alter_column('smartsnippets_variable', 'value', self.gf('django.db.models.fields.CharField')(max_length=2048)) + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2013, 11, 25, 0, 0)'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'documentation_link': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('snippet_variable', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['smartsnippets'] \ No newline at end of file diff --git a/smartsnippets/south_migrations/0011_auto__add_field_smartsnippetvariable_resources.py b/smartsnippets/south_migrations/0011_auto__add_field_smartsnippetvariable_resources.py new file mode 100644 index 0000000..ed0b54f --- /dev/null +++ b/smartsnippets/south_migrations/0011_auto__add_field_smartsnippetvariable_resources.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'SmartSnippetVariable.resources' + db.add_column('smartsnippets_smartsnippetvariable', 'resources', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'SmartSnippetVariable.resources' + db.delete_column('smartsnippets_smartsnippetvariable', 'resources') + + + models = { + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'changed_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 11, 18, 0, 0)'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'sites.site': { + 'Meta': {'ordering': "('domain',)", 'object_name': 'Site', 'db_table': "'django_site'"}, + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.dropdownvariable': { + 'Meta': {'ordering': "['name']", 'object_name': 'DropDownVariable', '_ormbases': ['smartsnippets.SmartSnippetVariable']}, + 'choices': ('django.db.models.fields.CharField', [], {'max_length': '512'}), + 'smartsnippetvariable_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['smartsnippets.SmartSnippetVariable']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'smartsnippets.smartsnippet': { + 'Meta': {'ordering': "['name']", 'object_name': 'SmartSnippet'}, + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'documentation_link': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), + 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}), + 'template_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'template_path': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'smartsnippets.smartsnippetpointer': { + 'Meta': {'object_name': 'SmartSnippetPointer', 'db_table': "'cmsplugin_smartsnippetpointer'", '_ormbases': ['cms.CMSPlugin']}, + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['smartsnippets.SmartSnippet']"}) + }, + 'smartsnippets.smartsnippetvariable': { + 'Meta': {'ordering': "['name']", 'unique_together': "(('snippet', 'name'),)", 'object_name': 'SmartSnippetVariable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}), + 'resources': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippet']"}), + 'widget': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'smartsnippets.variable': { + 'Meta': {'unique_together': "(('snippet_variable', 'snippet'),)", 'object_name': 'Variable'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'snippet': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetPointer']"}), + 'snippet_variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variables'", 'to': "orm['smartsnippets.SmartSnippetVariable']"}), + 'value': ('django.db.models.fields.TextField', [], {}) + } + } + + complete_apps = ['smartsnippets'] \ No newline at end of file diff --git a/smartsnippets/south_migrations/__init__.py b/smartsnippets/south_migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smartsnippets/static/admin/css/codemirror.css b/smartsnippets/static/admin/css/codemirror.css new file mode 100644 index 0000000..f5379d9 --- /dev/null +++ b/smartsnippets/static/admin/css/codemirror.css @@ -0,0 +1,249 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; +} +.CodeMirror-scroll { + /* Set scrolling behaviour here */ + overflow: auto; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; +} + +/* CURSOR */ + +.CodeMirror div.CodeMirror-cursor { + border-left: 1px solid black; + z-index: 3; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor { + width: auto; + border: 0; + background: #7e7; + z-index: 1; +} +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {} + +.cm-tab { display: inline-block; } + +/* DEFAULT THEME */ + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable {color: black;} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-property {color: black;} +.cm-s-default .cm-operator {color: black;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-error {color: #f00;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} + +.cm-invalidchar {color: #f00;} + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + line-height: 1; + position: relative; + overflow: hidden; + background: white; + color: black; +} + +.CodeMirror-scroll { + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; padding-right: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actuall scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + padding-bottom: 30px; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + padding-bottom: 30px; + margin-bottom: -32px; + display: inline-block; + /* Hack to make IE7 behave */ + *zoom:1; + *display:inline; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} + +.CodeMirror-lines { + cursor: text; +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget { + display: inline-block; +} + +.CodeMirror-wrap .CodeMirror-scroll { + overflow-x: hidden; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; height: 0px; + overflow: hidden; + visibility: hidden; +} +.CodeMirror-measure pre { position: static; } + +.CodeMirror div.CodeMirror-cursor { + position: absolute; + visibility: hidden; + border-right: none; + width: 0; +} +.CodeMirror-focused div.CodeMirror-cursor { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* IE7 hack to prevent it from returning funny offsetTops on the spans */ +.CodeMirror span { *vertical-align: text-bottom; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursor { + visibility: hidden; + } +} diff --git a/smartsnippets/static/admin/css/custom.css b/smartsnippets/static/admin/css/custom.css new file mode 100644 index 0000000..1be2d07 --- /dev/null +++ b/smartsnippets/static/admin/css/custom.css @@ -0,0 +1,173 @@ +body { + background: white; +} +.text-left { + text-align: left !important; +} +.smartsnippet-title { + color: #abbac3; + font-weight: 300; + font-size: 32px; +} +.smartsnippet-description { + font-size: 14px; +} +.smartsnippet-description p { + white-space: pre-wrap; +} +input[type=color], input[type=date], input[type=datetime-local], input[type=datetime], +input[type=email], input[type=month], input[type=number], input[type=password], +input[type=search], input[type=tel], input[type=text], input[type=time], +input[type=url], input[type=week], textarea, select { + color: #393939; + width: 55%; +} +.btn.btn-info[disabled] { + color: white !important; +} +.popover-content, .popover { + min-width: 330px; +} +.popover-content span { + display: block; + margin-bottom: 15px; +} +.popover-content img { + margin-top: 5px; + display: block; +} +.popover { + border-radius: 0; + padding: 0; + border-color: #ccc; + border-width: 1px; + color: #000; + font-weight: 300; + font-size: 12px; + box-shadow: none; +} +.widget-drag { + height: 38px; + width: 15px; + background: url(../../images/drag.gif) no-repeat 2px 4px; + display: inline-block; + float: left; + cursor: move; + margin-right: 12px; +} +.widget-box { + border: none; + margin-bottom: 20px; +} +.widget-body > table { + border: 1px solid #CCC !important; + border-top: none !important; +} +.deletelink { + color: white !important; + margin-right: 20px; + padding: 8px 18px; + border: none; +} +.form-horizontal .widget-body .field-snippet .row { + margin: 0; +} +.form-horizontal .widget-body .field-snippet { + margin-bottom: 0; + margin-top: 15px; +} +.form-horizontal .widget-body .field-snippet .col-sm-2 { + width: 25%; +} +.form-horizontal .widget-body .field-snippet .col-sm-9 { + padding-left: 15px !important; +} +.form-horizontal .widget-body .field-snippet .control-label { + text-align: right !important; +} +.collapsed .glyphicon-chevron-up:before { + content: "\e114"; +} +.collapse-item { + height: 0; + position: relative; + overflow: hidden; + -webkit-transition: all .3s; + -o-transition: all .3s; + transition: all .3s; +} +.collapse-item.on { + height: auto; +} +.submit-button { + float: right; + position: relative; +} +td.filer-input-wrapper .help-button { + position: absolute; + top: 0; + right: -30px; +} +.help-button { + margin: 3px 0 0 10px; +} +.form-actions { + background: white; +} +.widget-header { + background: #fff; + padding: 0; + border: 1px solid #DDD; +} +.widget-header > .widget-title { + line-height: 36px; + font-size: 18px; + font-weight: 300; + text-transform: none; + padding: 0; + margin: 0; + display: inline; + color: #666; +} +.limiterBox { + border: none; + background: none; + padding: 3px 6px; + font-size: 12px; + color: #737373; + text-align: right; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 300; + margin-top: 3px; + margin-left: 15px; +} +.limiterBox:after { + display: none; +} +.limiterBox:before { + display: none; +} +.ui-dialog, .ui-jqdialog { + border: none; + display: inline-block !important; +} +.ui-dialog .ui-dialog-titlebar, .ui-jqdialog .ui-dialog-titlebar, .ui-dialog .ui-jqdialog-titlebar, .ui-jqdialog .ui-jqdialog-titlebar { + color: #fff; + background-color: #669fc7; + padding: 5px 10px; +} +.ui-dialog .ui-dialog-titlebar-close, .ui-jqdialog .ui-dialog-titlebar-close, .ui-dialog .ui-jqdialog-titlebar-close, .ui-jqdialog .ui-jqdialog-titlebar-close { + display: none; +} +#dialog-confirm { + padding: 10px 10px 0; +} +.ui-dialog .ui-dialog-buttonpane, .ui-jqdialog .ui-dialog-buttonpane, .ui-dialog .ui-jqdialog-buttonpane, .ui-jqdialog .ui-jqdialog-buttonpane { + padding: 0 10px 20px; + text-align: center; + background: none; + border-top: none; +} +.ui-dialog .ui-dialog-buttonpane button, .ui-jqdialog .ui-dialog-buttonpane button, .ui-dialog .ui-jqdialog-buttonpane button, .ui-jqdialog .ui-jqdialog-buttonpane button { + margin: 0 5px; +} diff --git a/smartsnippets/static/admin/css/smartsnippets-extra.css b/smartsnippets/static/admin/css/smartsnippets-extra.css new file mode 100644 index 0000000..8851049 --- /dev/null +++ b/smartsnippets/static/admin/css/smartsnippets-extra.css @@ -0,0 +1,11 @@ +.inline-related { + border: solid 1px #999; +} +.predefined-widgets li{ + list-style-type: none; + padding: 3px; + border: 1px solid #7CA0C7; + cursor:pointer; + border-left: none; + border-right: none; +} \ No newline at end of file diff --git a/smartsnippets/static/admin/css/snippet_plugin_default.css b/smartsnippets/static/admin/css/snippet_plugin_default.css new file mode 100644 index 0000000..76da695 --- /dev/null +++ b/smartsnippets/static/admin/css/snippet_plugin_default.css @@ -0,0 +1,18 @@ +span.plugin-help-tooltip{ + cursor: help; +} +.plugin-help-tooltip{ + float: left; + margin-right: 5px; +} +.plugin-help-tooltip img{ + border: 0; + width: 20px; + height: 20px; +} + +#layout_help_popup{ + position: absolute; + top:0; + margin:0 auto; +} diff --git a/smartsnippets/static/admin/js/CMInstance.js b/smartsnippets/static/admin/js/CMInstance.js new file mode 100644 index 0000000..595671c --- /dev/null +++ b/smartsnippets/static/admin/js/CMInstance.js @@ -0,0 +1,41 @@ +function CMInstance(elem, options, events){ + if(!elem){ + return null; + } + + var codemirrorObj = null; + + var defaults = { + continuousScanning: 500, + mode: 'htmlmixed', + height: "40.2em", + tabMode: "shift", + indentUnit: 4, + lineNumbers: true, + lineWrapping: true, + readOnly: true + }; + + //overwrite defaults if neccesary + if(options){ + for(var j in options){ + if(options.hasOwnProperty(j)){ + defaults[j] = options[j]; + } + } + } + + //create CodeMirror instance + codemirrorObj = CodeMirror.fromTextArea(elem, defaults); + + //attach events + if(events instanceof Array ){ + for(var i=0; i 0 && widget_type.length > 0){ + widget_select.val(widget_type); + } + if (resources.length > 0 && widget_resources.length > 0){ + resources.val(widget_resources); + } + }(django.jQuery)); +} diff --git a/smartsnippets/static/admin/js/SmartSnippets.Variables.js b/smartsnippets/static/admin/js/SmartSnippets.Variables.js new file mode 100644 index 0000000..aebf9fc --- /dev/null +++ b/smartsnippets/static/admin/js/SmartSnippets.Variables.js @@ -0,0 +1,421 @@ +(function ($) { + + /** + * This object provides helper functions for parsing a pasted smart snippet's code and auto populating the variable + * fields needed by that smart snippet. + * @type {Object} + */ + var LayoutParser = { + + /** + * Clear all added variables from a container + * @param jQuery container + */ + emptyContainer:function (container) { + container.children('.inline-related ').each(function (i, item) { + if (!$(item).hasClass('empty-form')) + $(item).remove(); + }); + }, + + /** + * Gets the standard variables container or the drop down one + * @param String variablesHolderType + * @return {*\jQuery} + */ + getContainer:function (variablesHolderType) { + var cx = null; + $('.inline-group').each(function (i, item) { + if (variablesHolderType == 'standard') { + + var header = $(item).children('h2').get(0); + if ($(header).text().toLowerCase() == 'standard variables') { + cx = $(item); + return; + } + + } else if (variablesHolderType == 'select') { + + var header = $(item).children('h2').get(0); + + if ($(header).text().toLowerCase() == 'drop down variables') { + cx = $(item); + return; + } + } + }); + + return cx; + }, + + getExistingStandardVariables:function (container) { + var fieldRows = container.children('.dynamic-variables'); + var existingVars = new Array(); + + fieldRows.each(function (i, row) { + var textField = $(row).find('.vTextField'); + var typeField = $(row).find('select'); + var name = textField.val(); + var type = typeField.val(); + + var typeDocId = typeField.attr('id'); + var obj = {name:name, type:type, typeDocId:typeDocId}; + existingVars.push(obj); + }); + + return existingVars; + }, + + getExistingSelectVariables:function (container) { + var fieldRows = container.children('.dynamic-variables-2'); + var existingVars = new Array(); + + fieldRows.each(function (i, row) { + var name = $(row).find('.field-name').find('.vTextField').val(); + var nameDocId = $(row).find('.field-name').find('.vTextField').attr('id'); + + var values = $(row).find('.field-choices').find('.vTextField').val(); + var valuesDocId = $(row).find('.field-choices').find('.vTextField').attr('id'); + + var obj = {name:name, values:values, valuesDocId:valuesDocId}; + + existingVars.push(obj); + }); + + return existingVars; + }, + + + groupExistingVars:function (existingVars, newVars, variablesType) { + var similarVars = []; + var updateVars = []; + var toBeDeletedVars = []; + + var similarFieldToCheck = (variablesType && variablesType.toLowerCase() == 'select' ? 'values' : 'type'); + + for (var i = 0; i < existingVars.length; i++) { + var toBeUpdated = false; + var updatedFieldValue = undefined; + var isSimilar = false; + for (var j = 0; j < newVars.length; j++) { + if (existingVars[i].name == newVars[j].varname && existingVars[i][similarFieldToCheck] == newVars[j][similarFieldToCheck]) { + isSimilar = true; + break; + } else if (existingVars[i].name == newVars[j].varname && existingVars[i][similarFieldToCheck] != newVars[j][similarFieldToCheck]) { + toBeUpdated = true; + updatedFieldValue = newVars[j][similarFieldToCheck]; + break; + } + } + + if (toBeUpdated) { + existingVars[i].updateWithValue = updatedFieldValue; + updateVars.push(existingVars[i]); + } else if (isSimilar) { + similarVars.push(existingVars[i]); + } else if (!toBeUpdated && !isSimilar) { + toBeDeletedVars.push(existingVars[i]); + } + } + + return { + similarVars:similarVars, + toUpdateVars:updateVars, + deleteVars:toBeDeletedVars + }; + }, + + findByVarName:function (arr, vName) { + var found = false; + $.each(arr, function (i, item) { + if (item.name == vName) { + found = item; + return; + } + }); + + return found; + }, + + markForDeletion:function (container, deletedVars) { + var rows = container.children('.inline-related'); + + var self = this; + $.each(rows, function (i, row) { + var varName = $(row).find('.field-name').find('.vTextField').val(); + var isFoundVar = self.findByVarName(deletedVars, varName); + + if (isFoundVar) { + var deleteBtn = $(row).find('a.inline-deletelink'); + if(deleteBtn.get(0)) { + //most likely variable was added from a previous paste or by the user so trigger the deletion here + deleteBtn.trigger('click'); + } else { + var deleteCheckbox = $(row).find('.delete').find('input[type=checkbox]'); + deleteCheckbox.attr('checked', 'checked'); + } + } + }); + }, + + updateVars:function (container, updatedVars, varsType) { + var rows = container.children('.inline-related'); + + var objFieldToUpdate = (varsType.toLowerCase() == 'select' ? 'valuesDocId' : 'typeDocId'); + + var self = this; + $.each(rows, function (i, row) { + var varName = $(row).find('.field-name').find('.vTextField').val(); + var isFoundVar = self.findByVarName(updatedVars, varName); + + if (isFoundVar) { + $('#'+ isFoundVar[objFieldToUpdate]).val(isFoundVar.updateWithValue) + } + }); + }, + + /** + * Find the "Add another Standard Variable" button and trigger a click event on it. Returns the div container + * holding form fields + * @param container + * @return {*|jQuery} + */ + clickAddNewFieldStd:function (container) { + + //count the number of already inserted vars here + //subtract 1 for the empty one present by default + var presentFieldsCount = container.children('.inline-related').length - 1; + + var addNewFieldBtn = $(container).children('div.add-row').find('a'); + addNewFieldBtn.trigger('click'); + + var addedField = $(container).children('.inline-related').last().prev(); + + addedField.attr('id', 'variables-' + presentFieldsCount); + + var textField = addedField.find('input.vTextField'); + $(textField).attr('id', 'id_variables-' + presentFieldsCount + '-name'); + $(textField).attr('name', 'variables-' + presentFieldsCount + '-name'); + + var textLabel = addedField.find('div.field-name').find('label'); + $(textLabel).attr('for', 'id_variables-' + presentFieldsCount + '-name'); + + var select = addedField.find('div.field-widget').find('select'); + $(select).attr('id', 'id_variables-' + presentFieldsCount + '-widget'); + $(select).attr('name', 'variables-' + presentFieldsCount + '-widget'); + + var selectLabel = addedField.find('div.field-widget').find('label'); + $(selectLabel).attr('for', 'id_variables-' + presentFieldsCount + '-widget') + + return addedField; + }, + + /** + * Find the "Add another Drop Down Variable" button and trigger a click event on it. Returns the div container + * holding form fields. There is really no difference at the moment between this and the clickAddNewFieldStd. + * The only reason for them to be separate is for expressiveness and future extensions. + * @param container + * @return {*|jQuery} + */ + clickAddNewFieldSelect:function (container) { + var addNewFieldBtn = $(container).children('div.add-row').find('a'); + addNewFieldBtn.trigger('click'); + + var addedField = $(container).children('.inline-related').last().prev(); + var inputFields = addedField.children('.vTextField'); + + var presentFieldsCount = container.children('.inline-related').length; + + $(inputFields[0]).attr('id', 'id_variables-2-' + presentFieldsCount + '-name'); + $(inputFields[0]).attr('name', 'variables-2-' + presentFieldsCount + '-name'); + + $(inputFields[1]).attr('id', 'id_variables-2-' + presentFieldsCount + '-choices'); + $(inputFields[1]).attr('name', 'variables-2-' + presentFieldsCount + '-choices'); + + return addedField; + }, + + /** + * Add a new standard variable in the container + * varNameObj = {varname: 'name', type: 'type'} + * @param varNameObj + * @param container + */ + addStdVar:function (varNameObj, container) { + var fieldCx = this.clickAddNewFieldStd(container); + $(fieldCx).find('input.vTextField').val(varNameObj.varname); + $(fieldCx).find('select').val(varNameObj.type); + }, + + /** + * Add a new drop down variable in the container + * varNameObj = {varname: 'name', type: 'type', values: 'value1,value2,value3'} + * @param varNameObj + * @param container + */ + + addSelectVar:function (varNameObj, container) { + var fieldCx = this.clickAddNewFieldSelect(container); + $(fieldCx).find('div.field-name').find('input.vTextField').val(varNameObj.varname); + $(fieldCx).find('div.field-choices').find('input.vTextField').val(varNameObj.values); + }, + + /** + * The following code will try to match everything that's within an html comment tag. It should look like this + * + * + * + * Where type could be anything from TextField, TextAreaField, MerlinField or ImageField + * Each variable is declared on a new line. + */ + extractVarnames:function (text) { + var regex = //gi; + var variablesSnippet = regex.exec(text); + var varNames = []; //hold the var names here + + if (variablesSnippet) { + var lines = variablesSnippet[1].split('\n'); //split the input in multiple lines + + $.each(lines, function (index, line) { + if ($.trim(line).length > 0) { + var vObj = {}; + var vDeclarationArr = line.split('='); + vObj.varname = $.trim(vDeclarationArr[0]); + + var type = $.trim(vDeclarationArr[1]); + if (type.toLowerCase().indexOf('select') != -1) { + var tmp = type.split('|'); + vObj.type = $.trim(tmp[0]); + vObj.values = vDeclarationArr[2] ? $.trim(vDeclarationArr[2]) : ''; + } else { + vObj.type = $.trim(vDeclarationArr[1]); + } + + varNames.push(vObj); + } + }); + } + return varNames; + }, + + groupNewVars:function (varsArr) { + var returnObj = {}; + returnObj.standard = new Array(); + returnObj.select = new Array(); + + $.each(varsArr, function (i, variable) { + if (variable.type.toLowerCase() == 'select') { + returnObj.select.push(variable); + } else { + returnObj.standard.push(variable); + } + }); + + return returnObj; + }, + + getOnlyToAddVars: function(groupedVars, newVars) { + var onlyToAdd = new Array(); + for (var i = 0; i < newVars.length; i++) { + var notInUpdates = true; + var notInSimilar = true; + + for(var j = 0; j < groupedVars.similarVars.length; j++) { + if(newVars[i].varname == groupedVars.similarVars[j].name) { + notInSimilar = false; + } + } + + for(var k = 0; k < groupedVars.toUpdateVars.length; k++) { + if(newVars[i].varname == groupedVars.toUpdateVars[k].name) { + notInUpdates = false; + } + } + + if(notInSimilar && notInUpdates) { + onlyToAdd.push(newVars[i]); + } + } + + return onlyToAdd; + }, + /** + * Given an array of objects with the following structure {varname: 'name', type: 'type', values: 'value1, + * value2,value3'} or varNameObj = {varname: 'name', type: 'type'} this function fill parse the array. + * + * @param varNamesArr + */ + populate:function (varNamesArr) { + var self = this; + if (varNamesArr.length > 0) { //don't do any mumbo jumbo if we have no varnames + + var groupedNewVars = self.groupNewVars(varNamesArr); + + var stdContainer = self.getContainer('standard'); + var selectContainer = self.getContainer('select'); + + var existingStdVars = self.getExistingStandardVariables(stdContainer); + var existingSelectVars = self.getExistingSelectVariables(selectContainer); + + var groupedExistingStdVars = self.groupExistingVars(existingStdVars, groupedNewVars.standard, 'standard'); + + if (existingStdVars.length > 0) { + self.markForDeletion(stdContainer, groupedExistingStdVars.deleteVars); + self.updateVars(stdContainer, groupedExistingStdVars.toUpdateVars, 'standard'); + } + + var groupedExistingSelectVars = self.groupExistingVars(existingSelectVars, groupedNewVars.select, 'select'); + if(existingSelectVars.length > 0) { + + self.markForDeletion(selectContainer, groupedExistingSelectVars.deleteVars); + self.updateVars(selectContainer, groupedExistingSelectVars.toUpdateVars, 'select'); + } + + var onlyToAddStdVars = self.getOnlyToAddVars(groupedExistingStdVars, groupedNewVars.standard); + var onlyToAddSelectVars = self.getOnlyToAddVars(groupedExistingSelectVars, groupedNewVars.select); + + + $.each(onlyToAddStdVars, function(i, vObj) { + self.addStdVar(vObj, stdContainer); + }); + + $.each(onlyToAddSelectVars, function(i, vObj) { + self.addSelectVar(vObj, selectContainer); + }); + } + } + }; + + $.updateSnippetVars = function(el){ + + //use a setTimeout to capture pasted text + setTimeout(function () { + + var checkboxes = django.jQuery('.delete input[type=checkbox]'); + django.jQuery.each(checkboxes, function(i, box) { + django.jQuery(this).attr('checked', false); + }); + + var text = django.jQuery(el).val(); + var varNames = LayoutParser.extractVarnames(text); + LayoutParser.populate(varNames); + }, 100); + }; + + + $(document).ready(function () { + var textArea = $('#id_template_code'); + + textArea.bind('paste', function (e) { + var el = $(this); + +// if ($.trim($(el).val()).length == 0) {//only when the area is empty + //use a setTimeout to capture pasted text + $.updateSnippetVars(el); +// } + }); + }); + +})(django.jQuery); diff --git a/smartsnippets/static/admin/js/codemirror/codemirror.js b/smartsnippets/static/admin/js/codemirror/codemirror.js new file mode 100644 index 0000000..ffe015c --- /dev/null +++ b/smartsnippets/static/admin/js/codemirror/codemirror.js @@ -0,0 +1,5637 @@ +// CodeMirror version 3.13 +// +// CodeMirror is the only global var we claim +window.CodeMirror = (function() { + "use strict"; + + // BROWSER SNIFFING + + // Crude, but necessary to handle a number of hard-to-feature-detect + // bugs and behavior differences. + var gecko = /gecko\/\d/i.test(navigator.userAgent); + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt8 = ie && (document.documentMode == null || document.documentMode < 8); + var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); + var webkit = /WebKit\//.test(navigator.userAgent); + var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); + var chrome = /Chrome\//.test(navigator.userAgent); + var opera = /Opera\//.test(navigator.userAgent); + var safari = /Apple Computer/.test(navigator.vendor); + var khtml = /KHTML\//.test(navigator.userAgent); + var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent); + var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); + var phantom = /PhantomJS/.test(navigator.userAgent); + + var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); + // This is woefully incomplete. Suggestions for alternative methods welcome. + var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); + var mac = ios || /Mac/.test(navigator.platform); + var windows = /windows/i.test(navigator.platform); + + var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/); + if (opera_version) opera_version = Number(opera_version[1]); + // Some browsers use the wrong event properties to signal cmd/ctrl on OS X + var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11)); + var captureMiddleClick = gecko || (ie && !ie_lt9); + + // Optimize some code when these features are not used + var sawReadOnlySpans = false, sawCollapsedSpans = false; + + // CONSTRUCTOR + + function CodeMirror(place, options) { + if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); + + this.options = options = options || {}; + // Determine effective options based on given values and defaults. + for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt)) + options[opt] = defaults[opt]; + setGuttersForLineNumbers(options); + + var docStart = typeof options.value == "string" ? 0 : options.value.first; + var display = this.display = makeDisplay(place, docStart); + display.wrapper.CodeMirror = this; + updateGutters(this); + if (options.autofocus && !mobile) focusInput(this); + + this.state = {keyMaps: [], + overlays: [], + modeGen: 0, + overwrite: false, focused: false, + suppressEdits: false, pasteIncoming: false, + draggingText: false, + highlight: new Delayed()}; + + themeChanged(this); + if (options.lineWrapping) + this.display.wrapper.className += " CodeMirror-wrap"; + + var doc = options.value; + if (typeof doc == "string") doc = new Doc(options.value, options.mode); + operation(this, attachDoc)(this, doc); + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie) setTimeout(bind(resetInput, this, true), 20); + + registerEventHandlers(this); + // IE throws unspecified error in certain cases, when + // trying to access activeElement before onload + var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { } + if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20); + else onBlur(this); + + operation(this, function() { + for (var opt in optionHandlers) + if (optionHandlers.propertyIsEnumerable(opt)) + optionHandlers[opt](this, options[opt], Init); + for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); + })(); + } + + // DISPLAY CONSTRUCTOR + + function makeDisplay(place, docStart) { + var d = {}; + + var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;"); + if (webkit) input.style.width = "1000px"; + else input.setAttribute("wrap", "off"); + // if border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) input.style.border = "1px solid black"; + input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false"); + + // Wraps and hides input textarea + d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); + // The actual fake scrollbars. + d.scrollbarH = elt("div", [elt("div", null, null, "height: 1px")], "CodeMirror-hscrollbar"); + d.scrollbarV = elt("div", [elt("div", null, null, "width: 1px")], "CodeMirror-vscrollbar"); + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); + // DIVs containing the selection and the actual code + d.lineDiv = elt("div", null, "CodeMirror-code"); + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); + // Blinky cursor, and element used to ensure cursor fits at the end of a line + d.cursor = elt("div", "\u00a0", "CodeMirror-cursor"); + // Secondary cursor, shown when on a 'jump' in bi-directional text + d.otherCursor = elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"); + // Used to measure text size + d.measure = elt("div", null, "CodeMirror-measure"); + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = elt("div", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor], + null, "position: relative; outline: none"); + // Moved around its parent to cover visible view + d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); + // Set to the height of the text, causes scrolling + d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); + // D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;"); + // Will contain the gutters, if any + d.gutters = elt("div", null, "CodeMirror-gutters"); + d.lineGutter = null; + // Provides scrolling + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); + d.scroller.setAttribute("tabIndex", "-1"); + // The element in which the editor lives. + d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV, + d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); + // Work around IE7 z-index bug + if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } + if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); + + // Needed to hide big blue blinking cursor on Mobile Safari + if (ios) input.style.width = "0px"; + if (!webkit) d.scroller.draggable = true; + // Needed to handle Tab key in KHTML + if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; } + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = "18px"; + + // Current visible range (may be bigger than the view window). + d.viewOffset = d.lastSizeC = 0; + d.showingFrom = d.showingTo = docStart; + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; + // See readInput and resetInput + d.prevInput = ""; + // Set to true when a non-horizontal-scrolling widget is added. As + // an optimization, widget aligning is skipped when d is false. + d.alignWidgets = false; + // Flag that indicates whether we currently expect input to appear + // (after some event like 'keypress' or 'input') and are polling + // intensively. + d.pollingFast = false; + // Self-resetting timeout for the poller + d.poll = new Delayed(); + + d.cachedCharWidth = d.cachedTextHeight = null; + d.measureLineCache = []; + d.measureLineCachePos = 0; + + // Tracks when resetInput has punted to just putting a short + // string instead of the (large) selection. + d.inaccurateSelection = false; + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null; + d.maxLineLength = 0; + d.maxLineChanged = false; + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; + + return d; + } + + // STATE UPDATES + + // Used to get the editor into a consistent state again when options change. + + function loadMode(cm) { + cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); + cm.doc.iter(function(line) { + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + }); + cm.doc.frontier = cm.doc.first; + startWorker(cm, 100); + cm.state.modeGen++; + if (cm.curOp) regChange(cm); + } + + function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + cm.display.wrapper.className += " CodeMirror-wrap"; + cm.display.sizer.style.minWidth = ""; + } else { + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", ""); + computeMaxLength(cm); + } + estimateLineHeights(cm); + regChange(cm); + clearCaches(cm); + setTimeout(function(){updateScrollbars(cm);}, 100); + } + + function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); + return function(line) { + if (lineIsHidden(cm.doc, line)) + return 0; + else if (wrapping) + return (Math.ceil(line.text.length / perLine) || 1) * th; + else + return th; + }; + } + + function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm); + doc.iter(function(line) { + var estHeight = est(line); + if (estHeight != line.height) updateLineHeight(line, estHeight); + }); + } + + function keyMapChanged(cm) { + var style = keyMap[cm.options.keyMap].style; + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") + + (style ? " cm-keymap-" + style : ""); + } + + function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); + clearCaches(cm); + } + + function guttersChanged(cm) { + updateGutters(cm); + regChange(cm); + setTimeout(function(){alignHorizontally(cm);}, 20); + } + + function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters; + removeChildren(gutters); + for (var i = 0; i < specs.length; ++i) { + var gutterClass = specs[i]; + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt; + gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; + } + } + gutters.style.display = i ? "" : "none"; + } + + function lineLength(doc, line) { + if (line.height == 0) return 0; + var len = line.text.length, merged, cur = line; + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(); + cur = getLine(doc, found.from.line); + len += found.from.ch - found.to.ch; + } + cur = line; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(); + len -= cur.text.length - found.from.ch; + cur = getLine(doc, found.to.line); + len += cur.text.length - found.to.ch; + } + return len; + } + + function computeMaxLength(cm) { + var d = cm.display, doc = cm.doc; + d.maxLine = getLine(doc, doc.first); + d.maxLineLength = lineLength(doc, d.maxLine); + d.maxLineChanged = true; + doc.iter(function(line) { + var len = lineLength(doc, line); + if (len > d.maxLineLength) { + d.maxLineLength = len; + d.maxLine = line; + } + }); + } + + // Make sure the gutters options contains the element + // "CodeMirror-linenumbers" when the lineNumbers option is true. + function setGuttersForLineNumbers(options) { + var found = false; + for (var i = 0; i < options.gutters.length; ++i) { + if (options.gutters[i] == "CodeMirror-linenumbers") { + if (options.lineNumbers) found = true; + else options.gutters.splice(i--, 1); + } + } + if (!found && options.lineNumbers) + options.gutters.push("CodeMirror-linenumbers"); + } + + // SCROLLBARS + + // Re-synchronize the fake scrollbars with the actual size of the + // content. Optionally force a scrollTop. + function updateScrollbars(cm) { + var d = cm.display, docHeight = cm.doc.height; + var totalHeight = docHeight + paddingVert(d); + d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + "px"; + d.gutters.style.height = Math.max(totalHeight, d.scroller.clientHeight - scrollerCutOff) + "px"; + var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight); + var needsH = d.scroller.scrollWidth > d.scroller.clientWidth; + var needsV = scrollHeight > d.scroller.clientHeight; + if (needsV) { + d.scrollbarV.style.display = "block"; + d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarV.firstChild.style.height = + (scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px"; + } else d.scrollbarV.style.display = ""; + if (needsH) { + d.scrollbarH.style.display = "block"; + d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0"; + d.scrollbarH.firstChild.style.width = + (d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px"; + } else d.scrollbarH.style.display = ""; + if (needsH && needsV) { + d.scrollbarFiller.style.display = "block"; + d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px"; + } else d.scrollbarFiller.style.display = ""; + if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block"; + d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px"; + d.gutterFiller.style.width = d.gutters.offsetWidth + "px"; + } else d.gutterFiller.style.display = ""; + + if (mac_geLion && scrollbarWidth(d.measure) === 0) + d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px"; + } + + function visibleLines(display, doc, viewPort) { + var top = display.scroller.scrollTop, height = display.wrapper.clientHeight; + if (typeof viewPort == "number") top = viewPort; + else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;} + top = Math.floor(top - paddingTop(display)); + var bottom = Math.ceil(top + height); + return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)}; + } + + // LINE NUMBERS + + function alignHorizontally(cm) { + var display = cm.display; + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; + var gutterW = display.gutters.offsetWidth, l = comp + "px"; + for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) { + for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l; + } + if (cm.options.fixedGutter) + display.gutters.style.left = (comp + gutterW) + "px"; + } + + function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) return false; + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")); + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; + display.lineGutter.style.width = ""; + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); + display.lineNumWidth = display.lineNumInnerWidth + padding; + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; + display.lineGutter.style.width = display.lineNumWidth + "px"; + return true; + } + return false; + } + + function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)); + } + function compensateForHScroll(display) { + return getRect(display.scroller).left - getRect(display.sizer).left; + } + + // DISPLAY DRAWING + + function updateDisplay(cm, changes, viewPort) { + var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated; + var visible = visibleLines(cm.display, cm.doc, viewPort); + for (;;) { + if (!updateDisplayInner(cm, changes, visible)) break; + updated = true; + updateSelection(cm); + updateScrollbars(cm); + + // Clip forced viewport to actual scrollable area + if (viewPort) + viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, + typeof viewPort == "number" ? viewPort : viewPort.top); + visible = visibleLines(cm.display, cm.doc, viewPort); + if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo) + break; + changes = []; + } + + if (updated) { + signalLater(cm, "update", cm); + if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo) + signalLater(cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo); + } + return updated; + } + + // Uses a set of changes plus the current scroll position to + // determine which DOM updates have to be made, and makes the + // updates. + function updateDisplayInner(cm, changes, visible) { + var display = cm.display, doc = cm.doc; + if (!display.wrapper.clientWidth) { + display.showingFrom = display.showingTo = doc.first; + display.viewOffset = 0; + return; + } + + // Bail out if the visible area is already rendered and nothing changed. + if (changes.length == 0 && + visible.from > display.showingFrom && visible.to < display.showingTo) + return; + + if (maybeUpdateLineNumberWidth(cm)) + changes = [{from: doc.first, to: doc.first + doc.size}]; + var gutterW = display.sizer.style.marginLeft = display.gutters.offsetWidth + "px"; + display.scrollbarH.style.left = cm.options.fixedGutter ? gutterW : "0"; + + // Used to determine which lines need their line numbers updated + var positionsChangedFrom = Infinity; + if (cm.options.lineNumbers) + for (var i = 0; i < changes.length; ++i) + if (changes[i].diff) { positionsChangedFrom = changes[i].from; break; } + + var end = doc.first + doc.size; + var from = Math.max(visible.from - cm.options.viewportMargin, doc.first); + var to = Math.min(end, visible.to + cm.options.viewportMargin); + if (display.showingFrom < from && from - display.showingFrom < 20) from = Math.max(doc.first, display.showingFrom); + if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(end, display.showingTo); + if (sawCollapsedSpans) { + from = lineNo(visualLine(doc, getLine(doc, from))); + while (to < end && lineIsHidden(doc, getLine(doc, to))) ++to; + } + + // Create a range of theoretically intact lines, and punch holes + // in that using the change info. + var intact = [{from: Math.max(display.showingFrom, doc.first), + to: Math.min(display.showingTo, end)}]; + if (intact[0].from >= intact[0].to) intact = []; + else intact = computeIntact(intact, changes); + // When merged lines are present, we might have to reduce the + // intact ranges because changes in continued fragments of the + // intact lines do require the lines to be redrawn. + if (sawCollapsedSpans) + for (var i = 0; i < intact.length; ++i) { + var range = intact[i], merged; + while (merged = collapsedSpanAtEnd(getLine(doc, range.to - 1))) { + var newTo = merged.find().from.line; + if (newTo > range.from) range.to = newTo; + else { intact.splice(i--, 1); break; } + } + } + + // Clip off the parts that won't be visible + var intactLines = 0; + for (var i = 0; i < intact.length; ++i) { + var range = intact[i]; + if (range.from < from) range.from = from; + if (range.to > to) range.to = to; + if (range.from >= range.to) intact.splice(i--, 1); + else intactLines += range.to - range.from; + } + if (intactLines == to - from && from == display.showingFrom && to == display.showingTo) { + updateViewOffset(cm); + return; + } + intact.sort(function(a, b) {return a.from - b.from;}); + + // Avoid crashing on IE's "unspecified error" when in iframes + try { + var focused = document.activeElement; + } catch(e) {} + if (intactLines < (to - from) * .7) display.lineDiv.style.display = "none"; + patchDisplay(cm, from, to, intact, positionsChangedFrom); + display.lineDiv.style.display = ""; + if (focused && document.activeElement != focused && focused.offsetHeight) focused.focus(); + + var different = from != display.showingFrom || to != display.showingTo || + display.lastSizeC != display.wrapper.clientHeight; + // This is just a bogus formula that detects when the editor is + // resized or the font size changes. + if (different) display.lastSizeC = display.wrapper.clientHeight; + display.showingFrom = from; display.showingTo = to; + startWorker(cm, 100); + + var prevBottom = display.lineDiv.offsetTop; + for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) { + if (ie_lt8) { + var bot = node.offsetTop + node.offsetHeight; + height = bot - prevBottom; + prevBottom = bot; + } else { + var box = getRect(node); + height = box.bottom - box.top; + } + var diff = node.lineObj.height - height; + if (height < 2) height = textHeight(display); + if (diff > .001 || diff < -.001) { + updateLineHeight(node.lineObj, height); + var widgets = node.lineObj.widgets; + if (widgets) for (var i = 0; i < widgets.length; ++i) + widgets[i].height = widgets[i].node.offsetHeight; + } + } + updateViewOffset(cm); + + return true; + } + + function updateViewOffset(cm) { + var off = cm.display.viewOffset = heightAtLine(cm, getLine(cm.doc, cm.display.showingFrom)); + // Position the mover div to align with the current virtual scroll position + cm.display.mover.style.top = off + "px"; + } + + function computeIntact(intact, changes) { + for (var i = 0, l = changes.length || 0; i < l; ++i) { + var change = changes[i], intact2 = [], diff = change.diff || 0; + for (var j = 0, l2 = intact.length; j < l2; ++j) { + var range = intact[j]; + if (change.to <= range.from && change.diff) { + intact2.push({from: range.from + diff, to: range.to + diff}); + } else if (change.to <= range.from || change.from >= range.to) { + intact2.push(range); + } else { + if (change.from > range.from) + intact2.push({from: range.from, to: change.from}); + if (change.to < range.to) + intact2.push({from: change.to + diff, to: range.to + diff}); + } + } + intact = intact2; + } + return intact; + } + + function getDimensions(cm) { + var d = cm.display, left = {}, width = {}; + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft; + width[cm.options.gutters[i]] = n.offsetWidth; + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth}; + } + + function patchDisplay(cm, from, to, intact, updateNumbersFrom) { + var dims = getDimensions(cm); + var display = cm.display, lineNumbers = cm.options.lineNumbers; + if (!intact.length && (!webkit || !cm.display.currentWheelTarget)) + removeChildren(display.lineDiv); + var container = display.lineDiv, cur = container.firstChild; + + function rm(node) { + var next = node.nextSibling; + if (webkit && mac && cm.display.currentWheelTarget == node) { + node.style.display = "none"; + node.lineObj = null; + } else { + node.parentNode.removeChild(node); + } + return next; + } + + var nextIntact = intact.shift(), lineN = from; + cm.doc.iter(from, to, function(line) { + if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift(); + if (lineIsHidden(cm.doc, line)) { + if (line.height != 0) updateLineHeight(line, 0); + if (line.widgets && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) + if (line.widgets[i].showIfHidden) { + var prev = cur.previousSibling; + if (/pre/i.test(prev.nodeName)) { + var wrap = elt("div", null, null, "position: relative"); + prev.parentNode.replaceChild(wrap, prev); + wrap.appendChild(prev); + prev = wrap; + } + var wnode = prev.appendChild(elt("div", [line.widgets[i].node], "CodeMirror-linewidget")); + positionLineWidget(line.widgets[i], wnode, prev, dims); + } + } else if (nextIntact && nextIntact.from <= lineN && nextIntact.to > lineN) { + // This line is intact. Skip to the actual node. Update its + // line number if needed. + while (cur.lineObj != line) cur = rm(cur); + if (lineNumbers && updateNumbersFrom <= lineN && cur.lineNumber) + setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineN)); + cur = cur.nextSibling; + } else { + // For lines with widgets, make an attempt to find and reuse + // the existing element, so that widgets aren't needlessly + // removed and re-inserted into the dom + if (line.widgets) for (var j = 0, search = cur, reuse; search && j < 20; ++j, search = search.nextSibling) + if (search.lineObj == line && /div/i.test(search.nodeName)) { reuse = search; break; } + // This line needs to be generated. + var lineNode = buildLineElement(cm, line, lineN, dims, reuse); + if (lineNode != reuse) { + container.insertBefore(lineNode, cur); + } else { + while (cur != reuse) cur = rm(cur); + cur = cur.nextSibling; + } + + lineNode.lineObj = line; + } + ++lineN; + }); + while (cur) cur = rm(cur); + } + + function buildLineElement(cm, line, lineNo, dims, reuse) { + var lineElement = lineContent(cm, line); + var markers = line.gutterMarkers, display = cm.display, wrap; + + if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && !line.widgets) + return lineElement; + + // Lines with gutter elements, widgets or a background class need + // to be wrapped again, and have the extra elements added to the + // wrapper div + + if (reuse) { + reuse.alignable = null; + var isOk = true, widgetsSeen = 0; + for (var n = reuse.firstChild, next; n; n = next) { + next = n.nextSibling; + if (!/\bCodeMirror-linewidget\b/.test(n.className)) { + reuse.removeChild(n); + } else { + for (var i = 0, first = true; i < line.widgets.length; ++i) { + var widget = line.widgets[i], isFirst = false; + if (!widget.above) { isFirst = first; first = false; } + if (widget.node == n.firstChild) { + positionLineWidget(widget, n, reuse, dims); + ++widgetsSeen; + if (isFirst) reuse.insertBefore(lineElement, n); + break; + } + } + if (i == line.widgets.length) { isOk = false; break; } + } + } + if (isOk && widgetsSeen == line.widgets.length) { + wrap = reuse; + reuse.className = line.wrapClass || ""; + } + } + if (!wrap) { + wrap = elt("div", null, line.wrapClass, "position: relative"); + wrap.appendChild(lineElement); + } + // Kludge to make sure the styled element lies behind the selection (by z-index) + if (line.bgClass) + wrap.insertBefore(elt("div", null, line.bgClass + " CodeMirror-linebackground"), wrap.firstChild); + if (cm.options.lineNumbers || markers) { + var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " + + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"), + wrap.firstChild); + if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap); + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + wrap.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineNo), + "CodeMirror-linenumber CodeMirror-gutter-elt", + "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + + display.lineNumInnerWidth + "px")); + if (markers) + for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; + if (found) + gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); + } + } + if (ie_lt8) wrap.style.zIndex = 2; + if (line.widgets && wrap != reuse) for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); + positionLineWidget(widget, node, wrap, dims); + if (widget.above) + wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement); + else + wrap.appendChild(node); + signalLater(widget, "redraw"); + } + return wrap; + } + + function positionLineWidget(widget, node, wrap, dims) { + if (widget.noHScroll) { + (wrap.alignable || (wrap.alignable = [])).push(node); + var width = dims.wrapperWidth; + node.style.left = dims.fixedPos + "px"; + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth; + node.style.paddingLeft = dims.gutterTotalWidth + "px"; + } + node.style.width = width + "px"; + } + if (widget.coverGutter) { + node.style.zIndex = 5; + node.style.position = "relative"; + if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; + } + } + + // SELECTION / CURSOR + + function updateSelection(cm) { + var display = cm.display; + var collapsed = posEq(cm.doc.sel.from, cm.doc.sel.to); + if (collapsed || cm.options.showCursorWhenSelecting) + updateSelectionCursor(cm); + else + display.cursor.style.display = display.otherCursor.style.display = "none"; + if (!collapsed) + updateSelectionRange(cm); + else + display.selectionDiv.style.display = "none"; + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, cm.doc.sel.head, "div"); + var wrapOff = getRect(display.wrapper), lineOff = getRect(display.lineDiv); + display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)) + "px"; + display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)) + "px"; + } + } + + // No selection, plain cursor + function updateSelectionCursor(cm) { + var display = cm.display, pos = cursorCoords(cm, cm.doc.sel.head, "div"); + display.cursor.style.left = pos.left + "px"; + display.cursor.style.top = pos.top + "px"; + display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; + display.cursor.style.display = ""; + + if (pos.other) { + display.otherCursor.style.display = ""; + display.otherCursor.style.left = pos.other.left + "px"; + display.otherCursor.style.top = pos.other.top + "px"; + display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; + } else { display.otherCursor.style.display = "none"; } + } + + // Highlight selection + function updateSelectionRange(cm) { + var display = cm.display, doc = cm.doc, sel = cm.doc.sel; + var fragment = document.createDocumentFragment(); + var clientWidth = display.lineSpace.offsetWidth, pl = paddingLeft(cm.display); + + function add(left, top, width, bottom) { + if (top < 0) top = 0; + fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + + "px; top: " + top + "px; width: " + (width == null ? clientWidth - left : width) + + "px; height: " + (bottom - top) + "px")); + } + + function drawForLine(line, fromArg, toArg, retTop) { + var lineObj = getLine(doc, line); + var lineLen = lineObj.text.length, rVal = retTop ? Infinity : -Infinity; + function coords(ch) { + return charCoords(cm, Pos(line, ch), "div", lineObj); + } + + iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { + var leftPos = coords(from), rightPos, left, right; + if (from == to) { + rightPos = leftPos; + left = right = leftPos.left; + } else { + rightPos = coords(to - 1); + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } + left = leftPos.left; + right = rightPos.right; + } + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom); + left = pl; + if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); + } + if (toArg == null && to == lineLen) right = clientWidth; + if (fromArg == null && from == 0) left = pl; + rVal = retTop ? Math.min(rightPos.top, rVal) : Math.max(rightPos.bottom, rVal); + if (left < pl + 1) left = pl; + add(left, rightPos.top, right - left, rightPos.bottom); + }); + return rVal; + } + + if (sel.from.line == sel.to.line) { + drawForLine(sel.from.line, sel.from.ch, sel.to.ch); + } else { + var fromObj = getLine(doc, sel.from.line); + var cur = fromObj, merged, path = [sel.from.line, sel.from.ch], singleLine; + while (merged = collapsedSpanAtEnd(cur)) { + var found = merged.find(); + path.push(found.from.ch, found.to.line, found.to.ch); + if (found.to.line == sel.to.line) { + path.push(sel.to.ch); + singleLine = true; + break; + } + cur = getLine(doc, found.to.line); + } + + // This is a single, merged line + if (singleLine) { + for (var i = 0; i < path.length; i += 3) + drawForLine(path[i], path[i+1], path[i+2]); + } else { + var middleTop, middleBot, toObj = getLine(doc, sel.to.line); + if (sel.from.ch) + // Draw the first line of selection. + middleTop = drawForLine(sel.from.line, sel.from.ch, null, false); + else + // Simply include it in the middle block. + middleTop = heightAtLine(cm, fromObj) - display.viewOffset; + + if (!sel.to.ch) + middleBot = heightAtLine(cm, toObj) - display.viewOffset; + else + middleBot = drawForLine(sel.to.line, collapsedSpanAtStart(toObj) ? null : 0, sel.to.ch, true); + + if (middleTop < middleBot) add(pl, middleTop, null, middleBot); + } + } + + removeChildrenAndAdd(display.selectionDiv, fragment); + display.selectionDiv.style.display = ""; + } + + // Cursor-blinking + function restartBlink(cm) { + if (!cm.state.focused) return; + var display = cm.display; + clearInterval(display.blinker); + var on = true; + display.cursor.style.visibility = display.otherCursor.style.visibility = ""; + display.blinker = setInterval(function() { + display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden"; + }, cm.options.cursorBlinkRate); + } + + // HIGHLIGHT WORKER + + function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.showingTo) + cm.state.highlight.set(time, bind(highlightWorker, cm)); + } + + function highlightWorker(cm) { + var doc = cm.doc; + if (doc.frontier < doc.first) doc.frontier = doc.first; + if (doc.frontier >= cm.display.showingTo) return; + var end = +new Date + cm.options.workTime; + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); + var changed = [], prevChange; + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) { + if (doc.frontier >= cm.display.showingFrom) { // Visible + var oldStyles = line.styles; + line.styles = highlightLine(cm, line, state); + var ischange = !oldStyles || oldStyles.length != line.styles.length; + for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; + if (ischange) { + if (prevChange && prevChange.end == doc.frontier) prevChange.end++; + else changed.push(prevChange = {start: doc.frontier, end: doc.frontier + 1}); + } + line.stateAfter = copyState(doc.mode, state); + } else { + processLine(cm, line, state); + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; + } + ++doc.frontier; + if (+new Date > end) { + startWorker(cm, cm.options.workDelay); + return true; + } + }); + if (changed.length) + operation(cm, function() { + for (var i = 0; i < changed.length; ++i) + regChange(this, changed[i].start, changed[i].end); + })(); + } + + // Finds the line to start with when starting a parse. Tries to + // find a line with a stateAfter, so that it can start with a + // valid state. If that fails, it returns the line with the + // smallest indentation, which tends to need the least context to + // parse correctly. + function findStartLine(cm, n) { + var minindent, minline, doc = cm.doc; + for (var search = n, lim = n - 100; search > lim; --search) { + if (search <= doc.first) return doc.first; + var line = getLine(doc, search - 1); + if (line.stateAfter) return search; + var indented = countColumn(line.text, null, cm.options.tabSize); + if (minline == null || minindent > indented) { + minline = search - 1; + minindent = indented; + } + } + return minline; + } + + function getStateBefore(cm, n) { + var doc = cm.doc, display = cm.display; + if (!doc.mode.startState) return true; + var pos = findStartLine(cm, n), state = pos > doc.first && getLine(doc, pos-1).stateAfter; + if (!state) state = startState(doc.mode); + else state = copyState(doc.mode, state); + doc.iter(pos, n, function(line) { + processLine(cm, line, state); + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo; + line.stateAfter = save ? copyState(doc.mode, state) : null; + ++pos; + }); + return state; + } + + // POSITION MEASUREMENT + + function paddingTop(display) {return display.lineSpace.offsetTop;} + function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} + function paddingLeft(display) { + var e = removeChildrenAndAdd(display.measure, elt("pre", null, null, "text-align: left")).appendChild(elt("span", "x")); + return e.offsetLeft; + } + + function measureChar(cm, line, ch, data) { + var dir = -1; + data = data || measureLine(cm, line); + + for (var pos = ch;; pos += dir) { + var r = data[pos]; + if (r) break; + if (dir < 0 && pos == 0) dir = 1; + } + return {left: pos < ch ? r.right : r.left, + right: pos > ch ? r.left : r.right, + top: r.top, bottom: r.bottom}; + } + + function findCachedMeasurement(cm, line) { + var cache = cm.display.measureLineCache; + for (var i = 0; i < cache.length; ++i) { + var memo = cache[i]; + if (memo.text == line.text && memo.markedSpans == line.markedSpans && + cm.display.scroller.clientWidth == memo.width && + memo.classes == line.textClass + "|" + line.bgClass + "|" + line.wrapClass) + return memo; + } + } + + function clearCachedMeasurement(cm, line) { + var exists = findCachedMeasurement(cm, line); + if (exists) exists.text = exists.measure = exists.markedSpans = null; + } + + function measureLine(cm, line) { + // First look in the cache + var cached = findCachedMeasurement(cm, line); + if (cached) return cached.measure; + + // Failing that, recompute and store result in cache + var measure = measureLineInner(cm, line); + var cache = cm.display.measureLineCache; + var memo = {text: line.text, width: cm.display.scroller.clientWidth, + markedSpans: line.markedSpans, measure: measure, + classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass}; + if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo; + else cache.push(memo); + return measure; + } + + function measureLineInner(cm, line) { + var display = cm.display, measure = emptyArray(line.text.length); + var pre = lineContent(cm, line, measure); + + // IE does not cache element positions of inline elements between + // calls to getBoundingClientRect. This makes the loop below, + // which gathers the positions of all the characters on the line, + // do an amount of layout work quadratic to the number of + // characters. When line wrapping is off, we try to improve things + // by first subdividing the line into a bunch of inline blocks, so + // that IE can reuse most of the layout information from caches + // for those blocks. This does interfere with line wrapping, so it + // doesn't work when wrapping is on, but in that case the + // situation is slightly better, since IE does cache line-wrapping + // information and only recomputes per-line. + if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) { + var fragment = document.createDocumentFragment(); + var chunk = 10, n = pre.childNodes.length; + for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) { + var wrap = elt("div", null, null, "display: inline-block"); + for (var j = 0; j < chunk && n; ++j) { + wrap.appendChild(pre.firstChild); + --n; + } + fragment.appendChild(wrap); + } + pre.appendChild(fragment); + } + + removeChildrenAndAdd(display.measure, pre); + + var outer = getRect(display.lineDiv); + var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight; + // Work around an IE7/8 bug where it will sometimes have randomly + // replaced our pre with a clone at this point. + if (ie_lt9 && display.measure.first != pre) + removeChildrenAndAdd(display.measure, pre); + + for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) { + var size = getRect(cur); + var top = Math.max(0, size.top - outer.top), bot = Math.min(size.bottom - outer.top, maxBot); + for (var j = 0; j < vranges.length; j += 2) { + var rtop = vranges[j], rbot = vranges[j+1]; + if (rtop > bot || rbot < top) continue; + if (rtop <= top && rbot >= bot || + top <= rtop && bot >= rbot || + Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) { + vranges[j] = Math.min(top, rtop); + vranges[j+1] = Math.max(bot, rbot); + break; + } + } + if (j == vranges.length) vranges.push(top, bot); + var right = size.right; + if (cur.measureRight) right = getRect(cur.measureRight).left; + data[i] = {left: size.left - outer.left, right: right - outer.left, top: j}; + } + for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) { + var vr = cur.top; + cur.top = vranges[vr]; cur.bottom = vranges[vr+1]; + } + + return data; + } + + function measureLineWidth(cm, line) { + var hasBadSpan = false; + if (line.markedSpans) for (var i = 0; i < line.markedSpans; ++i) { + var sp = line.markedSpans[i]; + if (sp.collapsed && (sp.to == null || sp.to == line.text.length)) hasBadSpan = true; + } + var cached = !hasBadSpan && findCachedMeasurement(cm, line); + if (cached) return measureChar(cm, line, line.text.length, cached.measure).right; + + var pre = lineContent(cm, line); + var end = pre.appendChild(zeroWidthElement(cm.display.measure)); + removeChildrenAndAdd(cm.display.measure, pre); + return getRect(end).right - getRect(cm.display.lineDiv).left; + } + + function clearCaches(cm) { + cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0; + cm.display.cachedCharWidth = cm.display.cachedTextHeight = null; + if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; + cm.display.lineNumChars = null; + } + + // Context is one of "line", "div" (display.lineDiv), "local"/null (editor), or "page" + function intoCoordSystem(cm, lineObj, rect, context) { + if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]); + rect.top += size; rect.bottom += size; + } + if (context == "line") return rect; + if (!context) context = "local"; + var yOff = heightAtLine(cm, lineObj); + if (context != "local") yOff -= cm.display.viewOffset; + if (context == "page") { + var lOff = getRect(cm.display.lineSpace); + yOff += lOff.top + (window.pageYOffset || (document.documentElement || document.body).scrollTop); + var xOff = lOff.left + (window.pageXOffset || (document.documentElement || document.body).scrollLeft); + rect.left += xOff; rect.right += xOff; + } + rect.top += yOff; rect.bottom += yOff; + return rect; + } + + // Context may be "window", "page", "div", or "local"/null + // Result is in "div" coords + function fromCoordSystem(cm, coords, context) { + if (context == "div") return coords; + var left = coords.left, top = coords.top; + if (context == "page") { + left -= window.pageXOffset || (document.documentElement || document.body).scrollLeft; + top -= window.pageYOffset || (document.documentElement || document.body).scrollTop; + } + var lineSpaceBox = getRect(cm.display.lineSpace); + left -= lineSpaceBox.left; + top -= lineSpaceBox.top; + if (context == "local" || !context) { + var editorBox = getRect(cm.display.wrapper); + left += editorBox.left; + top += editorBox.top; + } + return {left: left, top: top}; + } + + function charCoords(cm, pos, context, lineObj) { + if (!lineObj) lineObj = getLine(cm.doc, pos.line); + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch), context); + } + + function cursorCoords(cm, pos, context, lineObj, measurement) { + lineObj = lineObj || getLine(cm.doc, pos.line); + if (!measurement) measurement = measureLine(cm, lineObj); + function get(ch, right) { + var m = measureChar(cm, lineObj, ch, measurement); + if (right) m.left = m.right; else m.right = m.left; + return intoCoordSystem(cm, lineObj, m, context); + } + function getBidi(ch, partPos) { + var part = order[partPos], right = part.level % 2; + if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { + part = order[--partPos]; + ch = bidiRight(part) - (part.level % 2 ? 0 : 1); + right = true; + } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { + part = order[++partPos]; + ch = bidiLeft(part) - part.level % 2; + right = false; + } + if (right && ch == part.to && ch > part.from) return get(ch - 1); + return get(ch, right); + } + var order = getOrder(lineObj), ch = pos.ch; + if (!order) return get(ch); + var partPos = getBidiPartAt(order, ch); + var val = getBidi(ch, partPos); + if (bidiOther != null) val.other = getBidi(ch, bidiOther); + return val; + } + + function PosMaybeOutside(line, ch, outside) { + var pos = new Pos(line, ch); + if (outside) pos.outside = true; + return pos; + } + + // Coords must be lineSpace-local + function coordsChar(cm, x, y) { + var doc = cm.doc; + y += cm.display.viewOffset; + if (y < 0) return PosMaybeOutside(doc.first, 0, true); + var lineNo = lineAtHeight(doc, y), last = doc.first + doc.size - 1; + if (lineNo > last) + return PosMaybeOutside(doc.first + doc.size - 1, getLine(doc, last).text.length, true); + if (x < 0) x = 0; + + for (;;) { + var lineObj = getLine(doc, lineNo); + var found = coordsCharInner(cm, lineObj, lineNo, x, y); + var merged = collapsedSpanAtEnd(lineObj); + var mergedPos = merged && merged.find(); + if (merged && found.ch >= mergedPos.from.ch) + lineNo = mergedPos.to.line; + else + return found; + } + } + + function coordsCharInner(cm, lineObj, lineNo, x, y) { + var innerOff = y - heightAtLine(cm, lineObj); + var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; + var measurement = measureLine(cm, lineObj); + + function getX(ch) { + var sp = cursorCoords(cm, Pos(lineNo, ch), "line", + lineObj, measurement); + wrongLine = true; + if (innerOff > sp.bottom) return sp.left - adjust; + else if (innerOff < sp.top) return sp.left + adjust; + else wrongLine = false; + return sp.left; + } + + var bidi = getOrder(lineObj), dist = lineObj.text.length; + var from = lineLeft(lineObj), to = lineRight(lineObj); + var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; + + if (x > toX) return PosMaybeOutside(lineNo, to, toOutside); + // Do a binary search between these bounds. + for (;;) { + if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { + var after = x - fromX < toX - x, ch = after ? from : to; + while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch; + var pos = PosMaybeOutside(lineNo, ch, after ? fromOutside : toOutside); + pos.after = after; + return pos; + } + var step = Math.ceil(dist / 2), middle = from + step; + if (bidi) { + middle = from; + for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); + } + var middleX = getX(middle); + if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} + else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} + } + } + + var measureText; + function textHeight(display) { + if (display.cachedTextHeight != null) return display.cachedTextHeight; + if (measureText == null) { + measureText = elt("pre"); + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")); + measureText.appendChild(elt("br")); + } + measureText.appendChild(document.createTextNode("x")); + } + removeChildrenAndAdd(display.measure, measureText); + var height = measureText.offsetHeight / 50; + if (height > 3) display.cachedTextHeight = height; + removeChildren(display.measure); + return height || 1; + } + + function charWidth(display) { + if (display.cachedCharWidth != null) return display.cachedCharWidth; + var anchor = elt("span", "x"); + var pre = elt("pre", [anchor]); + removeChildrenAndAdd(display.measure, pre); + var width = anchor.offsetWidth; + if (width > 2) display.cachedCharWidth = width; + return width || 10; + } + + // OPERATIONS + + // Operations are used to wrap changes in such a way that each + // change won't have to update the cursor and display (which would + // be awkward, slow, and error-prone), but instead updates are + // batched and then all combined and executed at once. + + var nextOpId = 0; + function startOperation(cm) { + cm.curOp = { + // An array of ranges of lines that have to be updated. See + // updateDisplay. + changes: [], + updateInput: null, + userSelChange: null, + textChanged: null, + selectionChanged: false, + cursorActivity: false, + updateMaxLine: false, + updateScrollPos: false, + id: ++nextOpId + }; + if (!delayedCallbackDepth++) delayedCallbacks = []; + } + + function endOperation(cm) { + var op = cm.curOp, doc = cm.doc, display = cm.display; + cm.curOp = null; + + if (op.updateMaxLine) computeMaxLength(cm); + if (display.maxLineChanged && !cm.options.lineWrapping && display.maxLine) { + var width = measureLineWidth(cm, display.maxLine); + display.sizer.style.minWidth = Math.max(0, width + 3 + scrollerCutOff) + "px"; + display.maxLineChanged = false; + var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + display.sizer.offsetWidth - display.scroller.clientWidth); + if (maxScrollLeft < doc.scrollLeft && !op.updateScrollPos) + setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true); + } + var newScrollPos, updated; + if (op.updateScrollPos) { + newScrollPos = op.updateScrollPos; + } else if (op.selectionChanged && display.scroller.clientHeight) { // don't rescroll if not visible + var coords = cursorCoords(cm, doc.sel.head); + newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom); + } + if (op.changes.length || newScrollPos && newScrollPos.scrollTop != null) { + updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop); + if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop; + } + if (!updated && op.selectionChanged) updateSelection(cm); + if (op.updateScrollPos) { + display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = newScrollPos.scrollTop; + display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = newScrollPos.scrollLeft; + alignHorizontally(cm); + if (op.scrollToPos) + scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos), op.scrollToPosMargin); + } else if (newScrollPos) { + scrollCursorIntoView(cm); + } + if (op.selectionChanged) restartBlink(cm); + + if (cm.state.focused && op.updateInput) + resetInput(cm, op.userSelChange); + + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; + if (hidden) for (var i = 0; i < hidden.length; ++i) + if (!hidden[i].lines.length) signal(hidden[i], "hide"); + if (unhidden) for (var i = 0; i < unhidden.length; ++i) + if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); + + var delayed; + if (!--delayedCallbackDepth) { + delayed = delayedCallbacks; + delayedCallbacks = null; + } + if (op.textChanged) + signal(cm, "change", cm, op.textChanged); + if (op.cursorActivity) signal(cm, "cursorActivity", cm); + if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + // Wraps a function in an operation. Returns the wrapped function. + function operation(cm1, f) { + return function() { + var cm = cm1 || this, withOp = !cm.curOp; + if (withOp) startOperation(cm); + try { var result = f.apply(cm, arguments); } + finally { if (withOp) endOperation(cm); } + return result; + }; + } + function docOperation(f) { + return function() { + var withOp = this.cm && !this.cm.curOp, result; + if (withOp) startOperation(this.cm); + try { result = f.apply(this, arguments); } + finally { if (withOp) endOperation(this.cm); } + return result; + }; + } + function runInOp(cm, f) { + var withOp = !cm.curOp, result; + if (withOp) startOperation(cm); + try { result = f(); } + finally { if (withOp) endOperation(cm); } + return result; + } + + function regChange(cm, from, to, lendiff) { + if (from == null) from = cm.doc.first; + if (to == null) to = cm.doc.first + cm.doc.size; + cm.curOp.changes.push({from: from, to: to, diff: lendiff}); + } + + // INPUT HANDLING + + function slowPoll(cm) { + if (cm.display.pollingFast) return; + cm.display.poll.set(cm.options.pollInterval, function() { + readInput(cm); + if (cm.state.focused) slowPoll(cm); + }); + } + + function fastPoll(cm) { + var missed = false; + cm.display.pollingFast = true; + function p() { + var changed = readInput(cm); + if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);} + else {cm.display.pollingFast = false; slowPoll(cm);} + } + cm.display.poll.set(20, p); + } + + // prevInput is a hack to work with IME. If we reset the textarea + // on every change, that breaks IME. So we look for changes + // compared to the previous content instead. (Modern browsers have + // events that indicate IME taking place, but these are not widely + // supported or compatible enough yet to rely on.) + function readInput(cm) { + var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel; + if (!cm.state.focused || hasSelection(input) || isReadOnly(cm)) return false; + var text = input.value; + if (text == prevInput && posEq(sel.from, sel.to)) return false; + if (ie && !ie_lt9 && cm.display.inputHasSelection === text) { + resetInput(cm, true); + return false; + } + + var withOp = !cm.curOp; + if (withOp) startOperation(cm); + sel.shift = false; + var same = 0, l = Math.min(prevInput.length, text.length); + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; + var from = sel.from, to = sel.to; + if (same < prevInput.length) + from = Pos(from.line, from.ch - (prevInput.length - same)); + else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming) + to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + (text.length - same))); + var updateInput = cm.curOp.updateInput; + makeChange(cm.doc, {from: from, to: to, text: splitLines(text.slice(same)), + origin: cm.state.pasteIncoming ? "paste" : "+input"}, "end"); + + cm.curOp.updateInput = updateInput; + if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = ""; + else cm.display.prevInput = text; + if (withOp) endOperation(cm); + cm.state.pasteIncoming = false; + return true; + } + + function resetInput(cm, user) { + var minimal, selected, doc = cm.doc; + if (!posEq(doc.sel.from, doc.sel.to)) { + cm.display.prevInput = ""; + minimal = hasCopyEvent && + (doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000); + var content = minimal ? "-" : selected || cm.getSelection(); + cm.display.input.value = content; + if (cm.state.focused) selectInput(cm.display.input); + if (ie && !ie_lt9) cm.display.inputHasSelection = content; + } else if (user) { + cm.display.prevInput = cm.display.input.value = ""; + if (ie && !ie_lt9) cm.display.inputHasSelection = null; + } + cm.display.inaccurateSelection = minimal; + } + + function focusInput(cm) { + if (cm.options.readOnly != "nocursor" && (!mobile || document.activeElement != cm.display.input)) + cm.display.input.focus(); + } + + function isReadOnly(cm) { + return cm.options.readOnly || cm.doc.cantEdit; + } + + // EVENT HANDLERS + + function registerEventHandlers(cm) { + var d = cm.display; + on(d.scroller, "mousedown", operation(cm, onMouseDown)); + if (ie) + on(d.scroller, "dblclick", operation(cm, function(e) { + var pos = posFromMouse(cm, e); + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; + e_preventDefault(e); + var word = findWordAt(getLine(cm.doc, pos.line).text, pos); + extendSelection(cm.doc, word.from, word.to); + })); + else + on(d.scroller, "dblclick", e_preventDefault); + on(d.lineSpace, "selectstart", function(e) { + if (!eventInWidget(d, e)) e_preventDefault(e); + }); + // Gecko browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for Gecko. + if (!captureMiddleClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); + + on(d.scroller, "scroll", function() { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop); + setScrollLeft(cm, d.scroller.scrollLeft, true); + signal(cm, "scroll", cm); + } + }); + on(d.scrollbarV, "scroll", function() { + if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop); + }); + on(d.scrollbarH, "scroll", function() { + if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft); + }); + + on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); + on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); + + function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); } + on(d.scrollbarH, "mousedown", reFocus); + on(d.scrollbarV, "mousedown", reFocus); + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); + + function onResize() { + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = null; + clearCaches(cm); + runInOp(cm, bind(regChange, cm)); + } + on(window, "resize", onResize); + // Above handler holds on to the editor and its data structures. + // Here we poll to unregister it when the editor is no longer in + // the document, so that it can be garbage-collected. + function unregister() { + for (var p = d.wrapper.parentNode; p && p != document.body; p = p.parentNode) {} + if (p) setTimeout(unregister, 5000); + else off(window, "resize", onResize); + } + setTimeout(unregister, 5000); + + on(d.input, "keyup", operation(cm, function(e) { + if (cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + if (e.keyCode == 16) cm.doc.sel.shift = false; + })); + on(d.input, "input", bind(fastPoll, cm)); + on(d.input, "keydown", operation(cm, onKeyDown)); + on(d.input, "keypress", operation(cm, onKeyPress)); + on(d.input, "focus", bind(onFocus, cm)); + on(d.input, "blur", bind(onBlur, cm)); + + function drag_(e) { + if (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return; + e_stop(e); + } + if (cm.options.dragDrop) { + on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); + on(d.scroller, "dragenter", drag_); + on(d.scroller, "dragover", drag_); + on(d.scroller, "drop", operation(cm, onDrop)); + } + on(d.scroller, "paste", function(e){ + if (eventInWidget(d, e)) return; + focusInput(cm); + fastPoll(cm); + }); + on(d.input, "paste", function() { + cm.state.pasteIncoming = true; + fastPoll(cm); + }); + + function prepareCopy() { + if (d.inaccurateSelection) { + d.prevInput = ""; + d.inaccurateSelection = false; + d.input.value = cm.getSelection(); + selectInput(d.input); + } + } + on(d.input, "cut", prepareCopy); + on(d.input, "copy", prepareCopy); + + // Needed to handle Tab key in KHTML + if (khtml) on(d.sizer, "mouseup", function() { + if (document.activeElement == d.input) d.input.blur(); + focusInput(cm); + }); + } + + function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n) return true; + if (/\bCodeMirror-(?:line)?widget\b/.test(n.className) || + n.parentNode == display.sizer && n != display.mover) return true; + } + } + + function posFromMouse(cm, e, liberal) { + var display = cm.display; + if (!liberal) { + var target = e_target(e); + if (target == display.scrollbarH || target == display.scrollbarH.firstChild || + target == display.scrollbarV || target == display.scrollbarV.firstChild || + target == display.scrollbarFiller || target == display.gutterFiller) return null; + } + var x, y, space = getRect(display.lineSpace); + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX; y = e.clientY; } catch (e) { return null; } + return coordsChar(cm, x - space.left, y - space.top); + } + + var lastClick, lastDoubleClick; + function onMouseDown(e) { + var cm = this, display = cm.display, doc = cm.doc, sel = doc.sel; + sel.shift = e.shiftKey; + + if (eventInWidget(display, e)) { + if (!webkit) { + display.scroller.draggable = false; + setTimeout(function(){display.scroller.draggable = true;}, 100); + } + return; + } + if (clickInGutter(cm, e)) return; + var start = posFromMouse(cm, e); + + switch (e_button(e)) { + case 3: + if (captureMiddleClick) onContextMenu.call(cm, cm, e); + return; + case 2: + if (start) extendSelection(cm.doc, start); + setTimeout(bind(focusInput, cm), 20); + e_preventDefault(e); + return; + } + // For button 1, if it was clicked inside the editor + // (posFromMouse returning non-null), we have to adjust the + // selection. + if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;} + + if (!cm.state.focused) onFocus(cm); + + var now = +new Date, type = "single"; + if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) { + type = "triple"; + e_preventDefault(e); + setTimeout(bind(focusInput, cm), 20); + selectLine(cm, start.line); + } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) { + type = "double"; + lastDoubleClick = {time: now, pos: start}; + e_preventDefault(e); + var word = findWordAt(getLine(doc, start.line).text, start); + extendSelection(cm.doc, word.from, word.to); + } else { lastClick = {time: now, pos: start}; } + + var last = start; + if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) && + !posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") { + var dragEnd = operation(cm, function(e2) { + if (webkit) display.scroller.draggable = false; + cm.state.draggingText = false; + off(document, "mouseup", dragEnd); + off(display.scroller, "drop", dragEnd); + if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { + e_preventDefault(e2); + extendSelection(cm.doc, start); + focusInput(cm); + } + }); + // Let the drag handler handle this. + if (webkit) display.scroller.draggable = true; + cm.state.draggingText = dragEnd; + // IE's approach to draggable + if (display.scroller.dragDrop) display.scroller.dragDrop(); + on(document, "mouseup", dragEnd); + on(display.scroller, "drop", dragEnd); + return; + } + e_preventDefault(e); + if (type == "single") extendSelection(cm.doc, clipPos(doc, start)); + + var startstart = sel.from, startend = sel.to, lastPos = start; + + function doSelect(cur) { + if (posEq(lastPos, cur)) return; + lastPos = cur; + + if (type == "single") { + extendSelection(cm.doc, clipPos(doc, start), cur); + return; + } + + startstart = clipPos(doc, startstart); + startend = clipPos(doc, startend); + if (type == "double") { + var word = findWordAt(getLine(doc, cur.line).text, cur); + if (posLess(cur, startstart)) extendSelection(cm.doc, word.from, startend); + else extendSelection(cm.doc, startstart, word.to); + } else if (type == "triple") { + if (posLess(cur, startstart)) extendSelection(cm.doc, startend, clipPos(doc, Pos(cur.line, 0))); + else extendSelection(cm.doc, startstart, clipPos(doc, Pos(cur.line + 1, 0))); + } + } + + var editorSize = getRect(display.wrapper); + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0; + + function extend(e) { + var curCount = ++counter; + var cur = posFromMouse(cm, e, true); + if (!cur) return; + if (!posEq(cur, last)) { + if (!cm.state.focused) onFocus(cm); + last = cur; + doSelect(cur); + var visible = visibleLines(display, doc); + if (cur.line >= visible.to || cur.line < visible.from) + setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; + if (outside) setTimeout(operation(cm, function() { + if (counter != curCount) return; + display.scroller.scrollTop += outside; + extend(e); + }), 50); + } + } + + function done(e) { + counter = Infinity; + var cur = posFromMouse(cm, e); + if (cur) doSelect(cur); + e_preventDefault(e); + focusInput(cm); + off(document, "mousemove", move); + off(document, "mouseup", up); + } + + var move = operation(cm, function(e) { + if (!ie && !e_button(e)) done(e); + else extend(e); + }); + var up = operation(cm, done); + on(document, "mousemove", move); + on(document, "mouseup", up); + } + + function onDrop(e) { + var cm = this; + if (eventInWidget(cm.display, e) || (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e)))) + return; + e_preventDefault(e); + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; + if (!pos || isReadOnly(cm)) return; + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0; + var loadFile = function(file, i) { + var reader = new FileReader; + reader.onload = function() { + text[i] = reader.result; + if (++read == n) { + pos = clipPos(cm.doc, pos); + makeChange(cm.doc, {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}, "around"); + } + }; + reader.readAsText(file); + }; + for (var i = 0; i < n; ++i) loadFile(files[i], i); + } else { + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && !(posLess(pos, cm.doc.sel.from) || posLess(cm.doc.sel.to, pos))) { + cm.state.draggingText(e); + // Ensure the editor is re-focused + setTimeout(bind(focusInput, cm), 20); + return; + } + try { + var text = e.dataTransfer.getData("Text"); + if (text) { + var curFrom = cm.doc.sel.from, curTo = cm.doc.sel.to; + setSelection(cm.doc, pos, pos); + if (cm.state.draggingText) replaceRange(cm.doc, "", curFrom, curTo, "paste"); + cm.replaceSelection(text, null, "paste"); + focusInput(cm); + onFocus(cm); + } + } + catch(e){} + } + } + + function clickInGutter(cm, e) { + var display = cm.display; + try { var mX = e.clientX, mY = e.clientY; } + catch(e) { return false; } + + if (mX >= Math.floor(getRect(display.gutters).right)) return false; + e_preventDefault(e); + if (!hasHandler(cm, "gutterClick")) return true; + + var lineBox = getRect(display.lineDiv); + if (mY > lineBox.bottom) return true; + mY -= lineBox.top - display.viewOffset; + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i]; + if (g && getRect(g).right >= mX) { + var line = lineAtHeight(cm.doc, mY); + var gutter = cm.options.gutters[i]; + signalLater(cm, "gutterClick", cm, line, gutter, e); + break; + } + } + return true; + } + + function onDragStart(cm, e) { + if (ie && !cm.state.draggingText) { e_stop(e); return; } + if (eventInWidget(cm.display, e)) return; + + var txt = cm.getSelection(); + e.dataTransfer.setData("Text", txt); + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); + if (opera) { + img.width = img.height = 1; + cm.display.wrapper.appendChild(img); + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop; + } + if (safari) { + if (cm.display.dragImg) { + img = cm.display.dragImg; + } else { + cm.display.dragImg = img; + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + cm.display.wrapper.appendChild(img); + } + } + e.dataTransfer.setDragImage(img, 0, 0); + if (opera) img.parentNode.removeChild(img); + } + } + + function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) return; + cm.doc.scrollTop = val; + if (!gecko) updateDisplay(cm, [], val); + if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; + if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val; + if (gecko) updateDisplay(cm, []); + } + function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); + cm.doc.scrollLeft = val; + alignHorizontally(cm); + if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; + if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val; + } + + // Since the delta values reported on mouse wheel events are + // unstandardized between browsers and even browser versions, and + // generally horribly unpredictable, this code starts by measuring + // the scroll effect that the first few mouse wheel events have, + // and, from that, detects the way it can convert deltas to pixel + // offsets afterwards. + // + // The reason we want to know the amount a wheel event will scroll + // is that it gives us a chance to update the display before the + // actual scrolling happens, reducing flickering. + + var wheelSamples = 0, wheelPixelsPerUnit = null; + // Fill in a browser-detected starting value on browsers where we + // know one. These don't have to be accurate -- the result of them + // being wrong would just be a slight flicker on the first wheel + // scroll (if it is large enough). + if (ie) wheelPixelsPerUnit = -.53; + else if (gecko) wheelPixelsPerUnit = 15; + else if (chrome) wheelPixelsPerUnit = -.7; + else if (safari) wheelPixelsPerUnit = -1/3; + + function onScrollWheel(cm, e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY; + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; + else if (dy == null) dy = e.wheelDelta; + + var display = cm.display, scroll = display.scroller; + // Quit if there's nothing to scroll here + if (!(dx && scroll.scrollWidth > scroll.clientWidth || + dy && scroll.scrollHeight > scroll.clientHeight)) return; + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + for (var cur = e.target; cur != scroll; cur = cur.parentNode) { + if (cur.lineObj) { + cm.display.currentWheelTarget = cur; + break; + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !opera && wheelPixelsPerUnit != null) { + if (dy) + setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); + e_preventDefault(e); + display.wheelStartX = null; // Abort measurement, if in progress + return; + } + + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit; + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; + if (pixels < 0) top = Math.max(0, top + pixels - 50); + else bot = Math.min(cm.doc.height, bot + pixels + 50); + updateDisplay(cm, [], {top: top, bottom: bot}); + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; + display.wheelDX = dx; display.wheelDY = dy; + setTimeout(function() { + if (display.wheelStartX == null) return; + var movedX = scroll.scrollLeft - display.wheelStartX; + var movedY = scroll.scrollTop - display.wheelStartY; + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX); + display.wheelStartX = display.wheelStartY = null; + if (!sample) return; + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); + ++wheelSamples; + }, 200); + } else { + display.wheelDX += dx; display.wheelDY += dy; + } + } + } + + function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound]; + if (!bound) return false; + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false; + var doc = cm.doc, prevShift = doc.sel.shift, done = false; + try { + if (isReadOnly(cm)) cm.state.suppressEdits = true; + if (dropShift) doc.sel.shift = false; + done = bound(cm) != Pass; + } finally { + doc.sel.shift = prevShift; + cm.state.suppressEdits = false; + } + return done; + } + + function allKeyMaps(cm) { + var maps = cm.state.keyMaps.slice(0); + if (cm.options.extraKeys) maps.push(cm.options.extraKeys); + maps.push(cm.options.keyMap); + return maps; + } + + var maybeTransition; + function handleKeyBinding(cm, e) { + // Handle auto keymap transitions + var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto; + clearTimeout(maybeTransition); + if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() { + if (getKeyMap(cm.options.keyMap) == startMap) + cm.options.keyMap = (next.call ? next.call(null, cm) : next); + }, 50); + + var name = keyName(e, true), handled = false; + if (!name) return false; + var keymaps = allKeyMaps(cm); + + if (e.shiftKey) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);}) + || lookupKey(name, keymaps, function(b) { + if (typeof b == "string" && /^go[A-Z]/.test(b)) return doHandleBinding(cm, b); + }); + } else { + handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); }); + } + if (handled == "stop") handled = false; + + if (handled) { + e_preventDefault(e); + restartBlink(cm); + if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; } + } + return handled; + } + + function handleCharBinding(cm, e, ch) { + var handled = lookupKey("'" + ch + "'", allKeyMaps(cm), + function(b) { return doHandleBinding(cm, b, true); }); + if (handled) { + e_preventDefault(e); + restartBlink(cm); + } + return handled; + } + + var lastStoppedKey = null; + function onKeyDown(e) { + var cm = this; + if (!cm.state.focused) onFocus(cm); + if (ie && e.keyCode == 27) { e.returnValue = false; } + if (cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + var code = e.keyCode; + // IE does strange things with escape. + cm.doc.sel.shift = code == 16 || e.shiftKey; + // First give onKeyEvent option a chance to handle this. + var handled = handleKeyBinding(cm, e); + if (opera) { + lastStoppedKey = handled ? code : null; + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + cm.replaceSelection(""); + } + } + + function onKeyPress(e) { + var cm = this; + if (cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return; + var keyCode = e.keyCode, charCode = e.charCode; + if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} + if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return; + var ch = String.fromCharCode(charCode == null ? keyCode : charCode); + if (this.options.electricChars && this.doc.mode.electricChars && + this.options.smartIndent && !isReadOnly(this) && + this.doc.mode.electricChars.indexOf(ch) > -1) + setTimeout(operation(cm, function() {indentLine(cm, cm.doc.sel.to.line, "smart");}), 75); + if (handleCharBinding(cm, e, ch)) return; + if (ie && !ie_lt9) cm.display.inputHasSelection = null; + fastPoll(cm); + } + + function onFocus(cm) { + if (cm.options.readOnly == "nocursor") return; + if (!cm.state.focused) { + signal(cm, "focus", cm); + cm.state.focused = true; + if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1) + cm.display.wrapper.className += " CodeMirror-focused"; + resetInput(cm, true); + } + slowPoll(cm); + restartBlink(cm); + } + function onBlur(cm) { + if (cm.state.focused) { + signal(cm, "blur", cm); + cm.state.focused = false; + cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-focused", ""); + } + clearInterval(cm.display.blinker); + setTimeout(function() {if (!cm.state.focused) cm.doc.sel.shift = false;}, 150); + } + + var detectingSelectAll; + function onContextMenu(cm, e) { + var display = cm.display, sel = cm.doc.sel; + if (eventInWidget(display, e)) return; + + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; + if (!pos || opera) return; // Opera is difficult. + if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to)) + operation(cm, setSelection)(cm.doc, pos, pos); + + var oldCSS = display.input.style.cssText; + display.inputDiv.style.position = "absolute"; + display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" + + "border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);"; + focusInput(cm); + resetInput(cm, true); + // Adds "Select all" to context menu in FF + if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = " "; + + function prepareSelectAllHack() { + if (display.input.selectionStart != null) { + var extval = display.input.value = " " + (posEq(sel.from, sel.to) ? "" : display.input.value); + display.prevInput = " "; + display.input.selectionStart = 1; display.input.selectionEnd = extval.length; + } + } + function rehide() { + display.inputDiv.style.position = "relative"; + display.input.style.cssText = oldCSS; + if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos; + slowPoll(cm); + + // Try to detect the user choosing select-all + if (display.input.selectionStart != null) { + if (!ie || ie_lt9) prepareSelectAllHack(); + clearTimeout(detectingSelectAll); + var i = 0, poll = function(){ + if (display.prevInput == " " && display.input.selectionStart == 0) + operation(cm, commands.selectAll)(cm); + else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500); + else resetInput(cm); + }; + detectingSelectAll = setTimeout(poll, 200); + } + } + + if (ie && !ie_lt9) prepareSelectAllHack(); + if (captureMiddleClick) { + e_stop(e); + var mouseup = function() { + off(window, "mouseup", mouseup); + setTimeout(rehide, 20); + }; + on(window, "mouseup", mouseup); + } else { + setTimeout(rehide, 50); + } + } + + // UPDATING + + function changeEnd(change) { + if (!change.text) return change.to; + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); + } + + // Make sure a position will be valid after the given change. + function clipPostChange(doc, change, pos) { + if (!posLess(change.from, pos)) return clipPos(doc, pos); + var diff = (change.text.length - 1) - (change.to.line - change.from.line); + if (pos.line > change.to.line + diff) { + var preLine = pos.line - diff, lastLine = doc.first + doc.size - 1; + if (preLine > lastLine) return Pos(lastLine, getLine(doc, lastLine).text.length); + return clipToLen(pos, getLine(doc, preLine).text.length); + } + if (pos.line == change.to.line + diff) + return clipToLen(pos, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) + + getLine(doc, change.to.line).text.length - change.to.ch); + var inside = pos.line - change.from.line; + return clipToLen(pos, change.text[inside].length + (inside ? 0 : change.from.ch)); + } + + // Hint can be null|"end"|"start"|"around"|{anchor,head} + function computeSelAfterChange(doc, change, hint) { + if (hint && typeof hint == "object") // Assumed to be {anchor, head} object + return {anchor: clipPostChange(doc, change, hint.anchor), + head: clipPostChange(doc, change, hint.head)}; + + if (hint == "start") return {anchor: change.from, head: change.from}; + + var end = changeEnd(change); + if (hint == "around") return {anchor: change.from, head: end}; + if (hint == "end") return {anchor: end, head: end}; + + // hint is null, leave the selection alone as much as possible + var adjustPos = function(pos) { + if (posLess(pos, change.from)) return pos; + if (!posLess(change.to, pos)) return end; + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; + if (pos.line == change.to.line) ch += end.ch - change.to.ch; + return Pos(line, ch); + }; + return {anchor: adjustPos(doc.sel.anchor), head: adjustPos(doc.sel.head)}; + } + + function filterChange(doc, change) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + update: function(from, to, text, origin) { + if (from) this.from = clipPos(doc, from); + if (to) this.to = clipPos(doc, to); + if (text) this.text = text; + if (origin !== undefined) this.origin = origin; + }, + cancel: function() { this.canceled = true; } + }; + signal(doc, "beforeChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); + + if (obj.canceled) return null; + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; + } + + // Replace the range from from to to by the strings in replacement. + // change is a {from, to, text [, origin]} object + function makeChange(doc, change, selUpdate, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, selUpdate, ignoreReadOnly); + if (doc.cm.state.suppressEdits) return; + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change); + if (!change) return; + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); + if (split) { + for (var i = split.length - 1; i >= 1; --i) + makeChangeNoReadonly(doc, {from: split[i].from, to: split[i].to, text: [""]}); + if (split.length) + makeChangeNoReadonly(doc, {from: split[0].from, to: split[0].to, text: change.text}, selUpdate); + } else { + makeChangeNoReadonly(doc, change, selUpdate); + } + } + + function makeChangeNoReadonly(doc, change, selUpdate) { + var selAfter = computeSelAfterChange(doc, change, selUpdate); + addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); + }); + } + + function makeChangeFromHistory(doc, type) { + if (doc.cm && doc.cm.state.suppressEdits) return; + + var hist = doc.history; + var event = (type == "undo" ? hist.done : hist.undone).pop(); + if (!event) return; + hist.dirtyCounter += type == "undo" ? -1 : 1; + + var anti = {changes: [], anchorBefore: event.anchorAfter, headBefore: event.headAfter, + anchorAfter: event.anchorBefore, headAfter: event.headBefore}; + (type == "undo" ? hist.undone : hist.done).push(anti); + + for (var i = event.changes.length - 1; i >= 0; --i) { + var change = event.changes[i]; + change.origin = type; + anti.changes.push(historyChangeFromChange(doc, change)); + + var after = i ? computeSelAfterChange(doc, change, null) + : {anchor: event.anchorBefore, head: event.headBefore}; + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); + var rebased = []; + + linkedDocs(doc, function(doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change); + rebased.push(doc.history); + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); + }); + } + } + + function shiftDoc(doc, distance) { + function shiftPos(pos) {return Pos(pos.line + distance, pos.ch);} + doc.first += distance; + if (doc.cm) regChange(doc.cm, doc.first, doc.first, distance); + doc.sel.head = shiftPos(doc.sel.head); doc.sel.anchor = shiftPos(doc.sel.anchor); + doc.sel.from = shiftPos(doc.sel.from); doc.sel.to = shiftPos(doc.sel.to); + } + + function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); + return; + } + if (change.from.line > doc.lastLine()) return; + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line); + shiftDoc(doc, shift); + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin}; + } + var last = doc.lastLine(); + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin}; + } + + change.removed = getBetween(doc, change.from, change.to); + + if (!selAfter) selAfter = computeSelAfterChange(doc, change, null); + if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter); + else updateDoc(doc, change, spans, selAfter); + } + + function makeChangeSingleDocInEditor(cm, change, spans, selAfter) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to; + + var recomputeMaxLength = false, checkWidthStart = from.line; + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(doc, getLine(doc, from.line))); + doc.iter(checkWidthStart, to.line + 1, function(line) { + if (line == display.maxLine) { + recomputeMaxLength = true; + return true; + } + }); + } + + if (!posLess(doc.sel.head, change.from) && !posLess(change.to, doc.sel.head)) + cm.curOp.cursorActivity = true; + + updateDoc(doc, change, spans, selAfter, estimateHeight(cm)); + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function(line) { + var len = lineLength(doc, line); + if (len > display.maxLineLength) { + display.maxLine = line; + display.maxLineLength = len; + display.maxLineChanged = true; + recomputeMaxLength = false; + } + }); + if (recomputeMaxLength) cm.curOp.updateMaxLine = true; + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line); + startWorker(cm, 400); + + var lendiff = change.text.length - (to.line - from.line) - 1; + // Remember that these lines changed, for updating the display + regChange(cm, from.line, to.line + 1, lendiff); + + if (hasHandler(cm, "change")) { + var changeObj = {from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin}; + if (cm.curOp.textChanged) { + for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {} + cur.next = changeObj; + } else cm.curOp.textChanged = changeObj; + } + } + + function replaceRange(doc, code, from, to, origin) { + if (!to) to = from; + if (posLess(to, from)) { var tmp = to; to = from; from = tmp; } + if (typeof code == "string") code = splitLines(code); + makeChange(doc, {from: from, to: to, text: code, origin: origin}, null); + } + + // POSITION OBJECT + + function Pos(line, ch) { + if (!(this instanceof Pos)) return new Pos(line, ch); + this.line = line; this.ch = ch; + } + CodeMirror.Pos = Pos; + + function posEq(a, b) {return a.line == b.line && a.ch == b.ch;} + function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);} + function copyPos(x) {return Pos(x.line, x.ch);} + + // SELECTION + + function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} + function clipPos(doc, pos) { + if (pos.line < doc.first) return Pos(doc.first, 0); + var last = doc.first + doc.size - 1; + if (pos.line > last) return Pos(last, getLine(doc, last).text.length); + return clipToLen(pos, getLine(doc, pos.line).text.length); + } + function clipToLen(pos, linelen) { + var ch = pos.ch; + if (ch == null || ch > linelen) return Pos(pos.line, linelen); + else if (ch < 0) return Pos(pos.line, 0); + else return pos; + } + function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} + + // If shift is held, this will move the selection anchor. Otherwise, + // it'll set the whole selection. + function extendSelection(doc, pos, other, bias) { + if (doc.sel.shift || doc.sel.extend) { + var anchor = doc.sel.anchor; + if (other) { + var posBefore = posLess(pos, anchor); + if (posBefore != posLess(other, anchor)) { + anchor = pos; + pos = other; + } else if (posBefore != posLess(pos, other)) { + pos = other; + } + } + setSelection(doc, anchor, pos, bias); + } else { + setSelection(doc, pos, other || pos, bias); + } + if (doc.cm) doc.cm.curOp.userSelChange = true; + } + + function filterSelectionChange(doc, anchor, head) { + var obj = {anchor: anchor, head: head}; + signal(doc, "beforeSelectionChange", doc, obj); + if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); + obj.anchor = clipPos(doc, obj.anchor); obj.head = clipPos(doc, obj.head); + return obj; + } + + // Update the selection. Last two args are only used by + // updateDoc, since they have to be expressed in the line + // numbers before the update. + function setSelection(doc, anchor, head, bias, checkAtomic) { + if (!checkAtomic && hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { + var filtered = filterSelectionChange(doc, anchor, head); + head = filtered.head; + anchor = filtered.anchor; + } + + var sel = doc.sel; + sel.goalColumn = null; + // Skip over atomic spans. + if (checkAtomic || !posEq(anchor, sel.anchor)) + anchor = skipAtomic(doc, anchor, bias, checkAtomic != "push"); + if (checkAtomic || !posEq(head, sel.head)) + head = skipAtomic(doc, head, bias, checkAtomic != "push"); + + if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return; + + sel.anchor = anchor; sel.head = head; + var inv = posLess(head, anchor); + sel.from = inv ? head : anchor; + sel.to = inv ? anchor : head; + + if (doc.cm) + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = + doc.cm.curOp.cursorActivity = true; + + signalLater(doc, "cursorActivity", doc); + } + + function reCheckSelection(cm) { + setSelection(cm.doc, cm.doc.sel.from, cm.doc.sel.to, null, "push"); + } + + function skipAtomic(doc, pos, bias, mayClear) { + var flipped = false, curPos = pos; + var dir = bias || 1; + doc.cantEdit = false; + search: for (;;) { + var line = getLine(doc, curPos.line); + if (line.markedSpans) { + for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker; + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter"); + if (m.explicitlyCleared) { + if (!line.markedSpans) break; + else {--i; continue;} + } + } + if (!m.atomic) continue; + var newPos = m.find()[dir < 0 ? "from" : "to"]; + if (posEq(newPos, curPos)) { + newPos.ch += dir; + if (newPos.ch < 0) { + if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); + else newPos = null; + } else if (newPos.ch > line.text.length) { + if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); + else newPos = null; + } + if (!newPos) { + if (flipped) { + // Driven in a corner -- no valid cursor position found at all + // -- try again *with* clearing, if we didn't already + if (!mayClear) return skipAtomic(doc, pos, bias, true); + // Otherwise, turn off editing until further notice, and return the start of the doc + doc.cantEdit = true; + return Pos(doc.first, 0); + } + flipped = true; newPos = pos; dir = -dir; + } + } + curPos = newPos; + continue search; + } + } + } + return curPos; + } + } + + // SCROLLING + + function scrollCursorIntoView(cm) { + var coords = scrollPosIntoView(cm, cm.doc.sel.head, cm.options.cursorScrollMargin); + if (!cm.state.focused) return; + var display = cm.display, box = getRect(display.sizer), doScroll = null, pTop = paddingTop(cm.display); + if (coords.top + pTop + box.top < 0) doScroll = true; + else if (coords.bottom + pTop + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; + if (doScroll != null && !phantom) { + var hidden = display.cursor.style.display == "none"; + if (hidden) { + display.cursor.style.display = ""; + display.cursor.style.left = coords.left + "px"; + display.cursor.style.top = (coords.top - display.viewOffset) + "px"; + } + display.cursor.scrollIntoView(doScroll); + if (hidden) display.cursor.style.display = "none"; + } + } + + function scrollPosIntoView(cm, pos, margin) { + if (margin == null) margin = 0; + for (;;) { + var changed = false, coords = cursorCoords(cm, pos); + var scrollPos = calculateScrollPos(cm, coords.left, coords.top - margin, coords.left, coords.bottom + margin); + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop); + if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft); + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; + } + if (!changed) return coords; + } + } + + function scrollIntoView(cm, x1, y1, x2, y2) { + var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); + if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); + if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); + } + + function calculateScrollPos(cm, x1, y1, x2, y2) { + var display = cm.display, pt = paddingTop(display); + y1 += pt; y2 += pt; + if (y1 < 0) y1 = 0; + var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {}; + var docBottom = cm.doc.height + paddingVert(display); + var atTop = y1 < pt + 10, atBottom = y2 + pt > docBottom - 10; + if (y1 < screentop) { + result.scrollTop = atTop ? 0 : y1; + } else if (y2 > screentop + screen) { + var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); + if (newTop != screentop) result.scrollTop = newTop; + } + + var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft; + x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth; + var gutterw = display.gutters.offsetWidth; + var atLeft = x1 < gutterw + 10; + if (x1 < screenleft + gutterw || atLeft) { + if (atLeft) x1 = 0; + result.scrollLeft = Math.max(0, x1 - 10 - gutterw); + } else if (x2 > screenw + screenleft - 3) { + result.scrollLeft = x2 + 10 - screenw; + } + return result; + } + + function updateScrollPos(cm, left, top) { + cm.curOp.updateScrollPos = {scrollLeft: left == null ? cm.doc.scrollLeft : left, + scrollTop: top == null ? cm.doc.scrollTop : top}; + } + + function addToScrollPos(cm, left, top) { + var pos = cm.curOp.updateScrollPos || (cm.curOp.updateScrollPos = {scrollLeft: cm.doc.scrollLeft, scrollTop: cm.doc.scrollTop}); + var scroll = cm.display.scroller; + pos.scrollTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.clientHeight, pos.scrollTop + top)); + pos.scrollLeft = Math.max(0, Math.min(scroll.scrollWidth - scroll.clientWidth, pos.scrollLeft + left)); + } + + // API UTILITIES + + function indentLine(cm, n, how, aggressive) { + var doc = cm.doc; + if (!how) how = "add"; + if (how == "smart") { + if (!cm.doc.mode.indent) how = "prev"; + else var state = getStateBefore(cm, n); + } + + var tabSize = cm.options.tabSize; + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); + var curSpaceString = line.text.match(/^\s*/)[0], indentation; + if (how == "smart") { + indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); + if (indentation == Pass) { + if (!aggressive) return; + how = "prev"; + } + } + if (how == "prev") { + if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); + else indentation = 0; + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit; + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit; + } + indentation = Math.max(0, indentation); + + var indentString = "", pos = 0; + if (cm.options.indentWithTabs) + for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} + if (pos < indentation) indentString += spaceStr(indentation - pos); + + if (indentString != curSpaceString) + replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); + line.stateAfter = null; + } + + function changeLine(cm, handle, op) { + var no = handle, line = handle, doc = cm.doc; + if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); + else no = lineNo(handle); + if (no == null) return null; + if (op(line, no)) regChange(cm, no, no + 1); + else return null; + return line; + } + + function findPosH(doc, pos, dir, unit, visually) { + var line = pos.line, ch = pos.ch, origDir = dir; + var lineObj = getLine(doc, line); + var possible = true; + function findNextLine() { + var l = line + dir; + if (l < doc.first || l >= doc.first + doc.size) return (possible = false); + line = l; + return lineObj = getLine(doc, l); + } + function moveOnce(boundToLine) { + var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); + if (next == null) { + if (!boundToLine && findNextLine()) { + if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); + else ch = dir < 0 ? lineObj.text.length : 0; + } else return (possible = false); + } else ch = next; + return true; + } + + if (unit == "char") moveOnce(); + else if (unit == "column") moveOnce(true); + else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group"; + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) break; + var cur = lineObj.text.charAt(ch) || "\n"; + var type = isWordChar(cur) ? "w" + : !group ? null + : /\s/.test(cur) ? null + : "p"; + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce();} + break; + } + if (type) sawType = type; + if (dir > 0 && !moveOnce(!first)) break; + } + } + var result = skipAtomic(doc, Pos(line, ch), origDir, true); + if (!possible) result.hitSide = true; + return result; + } + + function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y; + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); + y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3; + } + for (;;) { + var target = coordsChar(cm, x, y); + if (!target.outside) break; + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } + y += dir * 5; + } + return target; + } + + function findWordAt(line, pos) { + var start = pos.ch, end = pos.ch; + if (line) { + if (pos.after === false || end == line.length) --start; else ++end; + var startChar = line.charAt(start); + var check = isWordChar(startChar) ? isWordChar + : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} + : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; + while (start > 0 && check(line.charAt(start - 1))) --start; + while (end < line.length && check(line.charAt(end))) ++end; + } + return {from: Pos(pos.line, start), to: Pos(pos.line, end)}; + } + + function selectLine(cm, line) { + extendSelection(cm.doc, Pos(line, 0), clipPos(cm.doc, Pos(line + 1, 0))); + } + + // PROTOTYPE + + // The publicly visible API. Note that operation(null, f) means + // 'wrap f in an operation, performed on its `this` parameter' + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);}, + + setOption: function(option, value) { + var options = this.options, old = options[option]; + if (options[option] == value && option != "mode") return; + options[option] = value; + if (optionHandlers.hasOwnProperty(option)) + operation(this, optionHandlers[option])(this, value, old); + }, + + getOption: function(option) {return this.options[option];}, + getDoc: function() {return this.doc;}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](map); + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps; + for (var i = 0; i < maps.length; ++i) + if ((typeof map == "string" ? maps[i].name : maps[i]) == map) { + maps.splice(i, 1); + return true; + } + }, + + addOverlay: operation(null, function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); + if (mode.startState) throw new Error("Overlays may not be stateful."); + this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); + this.state.modeGen++; + regChange(this); + }), + removeOverlay: operation(null, function(spec) { + var overlays = this.state.overlays; + for (var i = 0; i < overlays.length; ++i) { + if (overlays[i].modeSpec == spec) { + overlays.splice(i, 1); + this.state.modeGen++; + regChange(this); + return; + } + } + }), + + indentLine: operation(null, function(n, dir, aggressive) { + if (typeof dir != "string") { + if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; + else dir = dir ? "add" : "subtract"; + } + if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); + }), + indentSelection: operation(null, function(how) { + var sel = this.doc.sel; + if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how); + var e = sel.to.line - (sel.to.ch ? 0 : 1); + for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how); + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos) { + var doc = this.doc; + pos = clipPos(doc, pos); + var state = getStateBefore(this, pos.line), mode = this.doc.mode; + var line = getLine(doc, pos.line); + var stream = new StringStream(line.text, this.options.tabSize); + while (stream.pos < pos.ch && !stream.eol()) { + stream.start = stream.pos; + var style = mode.token(stream, state); + } + return {start: stream.start, + end: stream.pos, + string: stream.current(), + className: style || null, // Deprecated, use 'type' instead + type: style || null, + state: state}; + }, + + getStateAfter: function(line) { + var doc = this.doc; + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); + return getStateBefore(this, line + 1); + }, + + cursorCoords: function(start, mode) { + var pos, sel = this.doc.sel; + if (start == null) pos = sel.head; + else if (typeof start == "object") pos = clipPos(this.doc, start); + else pos = start ? sel.from : sel.to; + return cursorCoords(this, pos, mode || "page"); + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page"); + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page"); + return coordsChar(this, coords.left, coords.top); + }, + + defaultTextHeight: function() { return textHeight(this.display); }, + defaultCharWidth: function() { return charWidth(this.display); }, + + setGutterMarker: operation(null, function(line, gutterID, value) { + return changeLine(this, line, function(line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}); + markers[gutterID] = value; + if (!value && isEmpty(markers)) line.gutterMarkers = null; + return true; + }); + }), + + clearGutter: operation(null, function(gutterID) { + var cm = this, doc = cm.doc, i = doc.first; + doc.iter(function(line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + line.gutterMarkers[gutterID] = null; + regChange(cm, i, i + 1); + if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; + } + ++i; + }); + }), + + addLineClass: operation(null, function(handle, where, cls) { + return changeLine(this, handle, function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + if (!line[prop]) line[prop] = cls; + else if (new RegExp("\\b" + cls + "\\b").test(line[prop])) return false; + else line[prop] += " " + cls; + return true; + }); + }), + + removeLineClass: operation(null, function(handle, where, cls) { + return changeLine(this, handle, function(line) { + var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass"; + var cur = line[prop]; + if (!cur) return false; + else if (cls == null) line[prop] = null; + else { + var upd = cur.replace(new RegExp("^" + cls + "\\b\\s*|\\s*\\b" + cls + "\\b"), ""); + if (upd == cur) return false; + line[prop] = upd || null; + } + return true; + }); + }), + + addLineWidget: operation(null, function(handle, node, options) { + return addLineWidget(this, handle, node, options); + }), + + removeLineWidget: function(widget) { widget.clear(); }, + + lineInfo: function(line) { + if (typeof line == "number") { + if (!isLine(this.doc, line)) return null; + var n = line; + line = getLine(this.doc, line); + if (!line) return null; + } else { + var n = lineNo(line); + if (n == null) return null; + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets}; + }, + + getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display; + pos = cursorCoords(this, clipPos(this.doc, pos)); + var top = pos.bottom, left = pos.left; + node.style.position = "absolute"; + display.sizer.appendChild(node); + if (vert == "over") { + top = pos.top; + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + top = pos.top - node.offsetHeight; + else if (pos.bottom + node.offsetHeight <= vspace) + top = pos.bottom; + if (left + node.offsetWidth > hspace) + left = hspace - node.offsetWidth; + } + node.style.top = (top + paddingTop(display)) + "px"; + node.style.left = node.style.right = ""; + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth; + node.style.right = "0px"; + } else { + if (horiz == "left") left = 0; + else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; + node.style.left = left + "px"; + } + if (scroll) + scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); + }, + + triggerOnKeyDown: operation(null, onKeyDown), + + execCommand: function(cmd) {return commands[cmd](this);}, + + findPosH: function(from, amount, unit, visually) { + var dir = 1; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + cur = findPosH(this.doc, cur, dir, unit, visually); + if (cur.hitSide) break; + } + return cur; + }, + + moveH: operation(null, function(dir, unit) { + var sel = this.doc.sel, pos; + if (sel.shift || sel.extend || posEq(sel.from, sel.to)) + pos = findPosH(this.doc, sel.head, dir, unit, this.options.rtlMoveVisually); + else + pos = dir < 0 ? sel.from : sel.to; + extendSelection(this.doc, pos, pos, dir); + }), + + deleteH: operation(null, function(dir, unit) { + var sel = this.doc.sel; + if (!posEq(sel.from, sel.to)) replaceRange(this.doc, "", sel.from, sel.to, "+delete"); + else replaceRange(this.doc, "", sel.from, findPosH(this.doc, sel.head, dir, unit, false), "+delete"); + this.curOp.userSelChange = true; + }), + + findPosV: function(from, amount, unit, goalColumn) { + var dir = 1, x = goalColumn; + if (amount < 0) { dir = -1; amount = -amount; } + for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { + var coords = cursorCoords(this, cur, "div"); + if (x == null) x = coords.left; + else coords.left = x; + cur = findPosV(this, coords, dir, unit); + if (cur.hitSide) break; + } + return cur; + }, + + moveV: operation(null, function(dir, unit) { + var sel = this.doc.sel; + var pos = cursorCoords(this, sel.head, "div"); + if (sel.goalColumn != null) pos.left = sel.goalColumn; + var target = findPosV(this, pos, dir, unit); + + if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top); + extendSelection(this.doc, target, target, dir); + sel.goalColumn = pos.left; + }), + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) return; + if (this.state.overwrite = !this.state.overwrite) + this.display.cursor.className += " CodeMirror-overwrite"; + else + this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", ""); + }, + hasFocus: function() { return this.state.focused; }, + + scrollTo: operation(null, function(x, y) { + updateScrollPos(this, x, y); + }), + getScrollInfo: function() { + var scroller = this.display.scroller, co = scrollerCutOff; + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - co, width: scroller.scrollWidth - co, + clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co}; + }, + + scrollIntoView: operation(null, function(pos, margin) { + if (typeof pos == "number") pos = Pos(pos, 0); + if (!margin) margin = 0; + var coords = pos; + + if (!pos || pos.line != null) { + this.curOp.scrollToPos = pos ? clipPos(this.doc, pos) : this.doc.sel.head; + this.curOp.scrollToPosMargin = margin; + coords = cursorCoords(this, this.curOp.scrollToPos); + } + var sPos = calculateScrollPos(this, coords.left, coords.top - margin, coords.right, coords.bottom + margin); + updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop); + }), + + setSize: function(width, height) { + function interpret(val) { + return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; + } + if (width != null) this.display.wrapper.style.width = interpret(width); + if (height != null) this.display.wrapper.style.height = interpret(height); + this.refresh(); + }, + + on: function(type, f) {on(this, type, f);}, + off: function(type, f) {off(this, type, f);}, + + operation: function(f){return runInOp(this, f);}, + + refresh: operation(null, function() { + clearCaches(this); + updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop); + regChange(this); + }), + + swapDoc: operation(null, function(doc) { + var old = this.doc; + old.cm = null; + attachDoc(this, doc); + clearCaches(this); + resetInput(this, true); + updateScrollPos(this, doc.scrollLeft, doc.scrollTop); + return old; + }), + + getInputField: function(){return this.display.input;}, + getWrapperElement: function(){return this.display.wrapper;}, + getScrollerElement: function(){return this.display.scroller;}, + getGutterElement: function(){return this.display.gutters;} + }; + + // OPTION DEFAULTS + + var optionHandlers = CodeMirror.optionHandlers = {}; + + // The default configuration options. + var defaults = CodeMirror.defaults = {}; + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt; + if (handle) optionHandlers[name] = + notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; + } + + var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function(cm, val) { + cm.setValue(val); + }, true); + option("mode", null, function(cm, val) { + cm.doc.modeOption = val; + loadMode(cm); + }, true); + + option("indentUnit", 2, loadMode, true); + option("indentWithTabs", false); + option("smartIndent", true); + option("tabSize", 4, function(cm) { + loadMode(cm); + clearCaches(cm); + regChange(cm); + }, true); + option("electricChars", true); + option("rtlMoveVisually", !windows); + + option("theme", "default", function(cm) { + themeChanged(cm); + guttersChanged(cm); + }, true); + option("keyMap", "default", keyMapChanged); + option("extraKeys", null); + + option("onKeyEvent", null); + option("onDragEvent", null); + + option("lineWrapping", false, wrappingChanged, true); + option("gutters", [], function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("fixedGutter", true, function(cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; + cm.refresh(); + }, true); + option("coverGutterNextToScrollbar", false, updateScrollbars, true); + option("lineNumbers", false, function(cm) { + setGuttersForLineNumbers(cm.options); + guttersChanged(cm); + }, true); + option("firstLineNumber", 1, guttersChanged, true); + option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); + option("showCursorWhenSelecting", false, updateSelection, true); + + option("readOnly", false, function(cm, val) { + if (val == "nocursor") {onBlur(cm); cm.display.input.blur();} + else if (!val) resetInput(cm, true); + }); + option("dragDrop", true); + + option("cursorBlinkRate", 530); + option("cursorScrollMargin", 0); + option("cursorHeight", 1); + option("workTime", 100); + option("workDelay", 100); + option("flattenSpans", true); + option("pollInterval", 100); + option("undoDepth", 40, function(cm, val){cm.doc.history.undoDepth = val;}); + option("historyEventDelay", 500); + option("viewportMargin", 10, function(cm){cm.refresh();}, true); + option("maxHighlightLength", 10000, function(cm){loadMode(cm); cm.refresh();}, true); + option("moveInputWithCursor", true, function(cm, val) { + if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0; + }); + + option("tabindex", null, function(cm, val) { + cm.display.input.tabIndex = val || ""; + }); + option("autofocus", null); + + // MODE DEFINITION AND QUERYING + + // Known modes, by name and by MIME + var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; + + CodeMirror.defineMode = function(name, mode) { + if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; + if (arguments.length > 2) { + mode.dependencies = []; + for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]); + } + modes[name] = mode; + }; + + CodeMirror.defineMIME = function(mime, spec) { + mimeModes[mime] = spec; + }; + + CodeMirror.resolveMode = function(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec]; + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name]; + spec = createObj(found, spec); + spec.name = found.name; + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return CodeMirror.resolveMode("application/xml"); + } + if (typeof spec == "string") return {name: spec}; + else return spec || {name: "null"}; + }; + + CodeMirror.getMode = function(options, spec) { + spec = CodeMirror.resolveMode(spec); + var mfactory = modes[spec.name]; + if (!mfactory) return CodeMirror.getMode(options, "text/plain"); + var modeObj = mfactory(options, spec); + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name]; + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) continue; + if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; + modeObj[prop] = exts[prop]; + } + } + modeObj.name = spec.name; + return modeObj; + }; + + CodeMirror.defineMode("null", function() { + return {token: function(stream) {stream.skipToEnd();}}; + }); + CodeMirror.defineMIME("text/plain", "null"); + + var modeExtensions = CodeMirror.modeExtensions = {}; + CodeMirror.extendMode = function(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); + copyObj(properties, exts); + }; + + // EXTENSIONS + + CodeMirror.defineExtension = function(name, func) { + CodeMirror.prototype[name] = func; + }; + CodeMirror.defineDocExtension = function(name, func) { + Doc.prototype[name] = func; + }; + CodeMirror.defineOption = option; + + var initHooks = []; + CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; + + // MODE STATE HANDLING + + // Utility functions for working with state. Exported because modes + // sometimes need to do this. + function copyState(mode, state) { + if (state === true) return state; + if (mode.copyState) return mode.copyState(state); + var nstate = {}; + for (var n in state) { + var val = state[n]; + if (val instanceof Array) val = val.concat([]); + nstate[n] = val; + } + return nstate; + } + CodeMirror.copyState = copyState; + + function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true; + } + CodeMirror.startState = startState; + + CodeMirror.innerMode = function(mode, state) { + while (mode.innerMode) { + var info = mode.innerMode(state); + state = info.state; + mode = info.mode; + } + return info || {mode: mode, state: state}; + }; + + // STANDARD COMMANDS + + var commands = CodeMirror.commands = { + selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()));}, + killLine: function(cm) { + var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to); + if (!sel && cm.getLine(from.line).length == from.ch) + cm.replaceRange("", from, Pos(from.line + 1, 0), "+delete"); + else cm.replaceRange("", from, sel ? to : Pos(from.line), "+delete"); + }, + deleteLine: function(cm) { + var l = cm.getCursor().line; + cm.replaceRange("", Pos(l, 0), Pos(l), "+delete"); + }, + undo: function(cm) {cm.undo();}, + redo: function(cm) {cm.redo();}, + goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, + goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, + goLineStart: function(cm) { + cm.extendSelection(lineStart(cm, cm.getCursor().line)); + }, + goLineStartSmart: function(cm) { + var cur = cm.getCursor(), start = lineStart(cm, cur.line); + var line = cm.getLineHandle(start.line); + var order = getOrder(line); + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)); + var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch; + cm.extendSelection(Pos(start.line, inWS ? 0 : firstNonWS)); + } else cm.extendSelection(start); + }, + goLineEnd: function(cm) { + cm.extendSelection(lineEnd(cm, cm.getCursor().line)); + }, + goLineRight: function(cm) { + var top = cm.charCoords(cm.getCursor(), "div").top + 5; + cm.extendSelection(cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")); + }, + goLineLeft: function(cm) { + var top = cm.charCoords(cm.getCursor(), "div").top + 5; + cm.extendSelection(cm.coordsChar({left: 0, top: top}, "div")); + }, + goLineUp: function(cm) {cm.moveV(-1, "line");}, + goLineDown: function(cm) {cm.moveV(1, "line");}, + goPageUp: function(cm) {cm.moveV(-1, "page");}, + goPageDown: function(cm) {cm.moveV(1, "page");}, + goCharLeft: function(cm) {cm.moveH(-1, "char");}, + goCharRight: function(cm) {cm.moveH(1, "char");}, + goColumnLeft: function(cm) {cm.moveH(-1, "column");}, + goColumnRight: function(cm) {cm.moveH(1, "column");}, + goWordLeft: function(cm) {cm.moveH(-1, "word");}, + goGroupRight: function(cm) {cm.moveH(1, "group");}, + goGroupLeft: function(cm) {cm.moveH(-1, "group");}, + goWordRight: function(cm) {cm.moveH(1, "word");}, + delCharBefore: function(cm) {cm.deleteH(-1, "char");}, + delCharAfter: function(cm) {cm.deleteH(1, "char");}, + delWordBefore: function(cm) {cm.deleteH(-1, "word");}, + delWordAfter: function(cm) {cm.deleteH(1, "word");}, + delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, + delGroupAfter: function(cm) {cm.deleteH(1, "group");}, + indentAuto: function(cm) {cm.indentSelection("smart");}, + indentMore: function(cm) {cm.indentSelection("add");}, + indentLess: function(cm) {cm.indentSelection("subtract");}, + insertTab: function(cm) {cm.replaceSelection("\t", "end", "+input");}, + defaultTab: function(cm) { + if (cm.somethingSelected()) cm.indentSelection("add"); + else cm.replaceSelection("\t", "end", "+input"); + }, + transposeChars: function(cm) { + var cur = cm.getCursor(), line = cm.getLine(cur.line); + if (cur.ch > 0 && cur.ch < line.length - 1) + cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1), + Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); + }, + newlineAndIndent: function(cm) { + operation(cm, function() { + cm.replaceSelection("\n", "end", "+input"); + cm.indentLine(cm.getCursor().line, null, true); + })(); + }, + toggleOverwrite: function(cm) {cm.toggleOverwrite();} + }; + + // STANDARD KEYMAPS + + var keyMap = CodeMirror.keyMap = {}; + keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite" + }; + // Note that the save and find-related commands aren't defined by + // default. Unknown commands are simply ignored. + keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + fallthrough: "basic" + }; + keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", + fallthrough: ["basic", "emacsy"] + }; + keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; + keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" + }; + + // KEYMAP DISPATCH + + function getKeyMap(val) { + if (typeof val == "string") return keyMap[val]; + else return val; + } + + function lookupKey(name, maps, handle) { + function lookup(map) { + map = getKeyMap(map); + var found = map[name]; + if (found === false) return "stop"; + if (found != null && handle(found)) return true; + if (map.nofallthrough) return "stop"; + + var fallthrough = map.fallthrough; + if (fallthrough == null) return false; + if (Object.prototype.toString.call(fallthrough) != "[object Array]") + return lookup(fallthrough); + for (var i = 0, e = fallthrough.length; i < e; ++i) { + var done = lookup(fallthrough[i]); + if (done) return done; + } + return false; + } + + for (var i = 0; i < maps.length; ++i) { + var done = lookup(maps[i]); + if (done) return done; + } + } + function isModifierKey(event) { + var name = keyNames[event.keyCode]; + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; + } + function keyName(event, noShift) { + if (opera && event.keyCode == 34 && event["char"]) return false; + var name = keyNames[event.keyCode]; + if (name == null || event.altGraphKey) return false; + if (event.altKey) name = "Alt-" + name; + if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name; + if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name; + if (!noShift && event.shiftKey) name = "Shift-" + name; + return name; + } + CodeMirror.lookupKey = lookupKey; + CodeMirror.isModifierKey = isModifierKey; + CodeMirror.keyName = keyName; + + // FROMTEXTAREA + + CodeMirror.fromTextArea = function(textarea, options) { + if (!options) options = {}; + options.value = textarea.value; + if (!options.tabindex && textarea.tabindex) + options.tabindex = textarea.tabindex; + if (!options.placeholder && textarea.placeholder) + options.placeholder = textarea.placeholder; + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = document.body; + // doc.activeElement occasionally throws on IE + try { hasFocus = document.activeElement; } catch(e) {} + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body; + } + + function save() {textarea.value = cm.getValue();} + if (textarea.form) { + on(textarea.form, "submit", save); + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form, realSubmit = form.submit; + try { + var wrappedSubmit = form.submit = function() { + save(); + form.submit = realSubmit; + form.submit(); + form.submit = wrappedSubmit; + }; + } catch(e) {} + } + } + + textarea.style.display = "none"; + var cm = CodeMirror(function(node) { + textarea.parentNode.insertBefore(node, textarea.nextSibling); + }, options); + cm.save = save; + cm.getTextArea = function() { return textarea; }; + cm.toTextArea = function() { + save(); + textarea.parentNode.removeChild(cm.getWrapperElement()); + textarea.style.display = ""; + if (textarea.form) { + off(textarea.form, "submit", save); + if (typeof textarea.form.submit == "function") + textarea.form.submit = realSubmit; + } + }; + return cm; + }; + + // STRING STREAM + + // Fed to the mode parsers, provides helper functions to make + // parsers more succinct. + + // The character stream used by a mode's parser. + function StringStream(string, tabSize) { + this.pos = this.start = 0; + this.string = string; + this.tabSize = tabSize || 8; + this.lastColumnPos = this.lastColumnValue = 0; + } + + StringStream.prototype = { + eol: function() {return this.pos >= this.string.length;}, + sol: function() {return this.pos == 0;}, + peek: function() {return this.string.charAt(this.pos) || undefined;}, + next: function() { + if (this.pos < this.string.length) + return this.string.charAt(this.pos++); + }, + eat: function(match) { + var ch = this.string.charAt(this.pos); + if (typeof match == "string") var ok = ch == match; + else var ok = ch && (match.test ? match.test(ch) : match(ch)); + if (ok) {++this.pos; return ch;} + }, + eatWhile: function(match) { + var start = this.pos; + while (this.eat(match)){} + return this.pos > start; + }, + eatSpace: function() { + var start = this.pos; + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; + return this.pos > start; + }, + skipToEnd: function() {this.pos = this.string.length;}, + skipTo: function(ch) { + var found = this.string.indexOf(ch, this.pos); + if (found > -1) {this.pos = found; return true;} + }, + backUp: function(n) {this.pos -= n;}, + column: function() { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); + this.lastColumnPos = this.start; + } + return this.lastColumnValue; + }, + indentation: function() {return countColumn(this.string, null, this.tabSize);}, + match: function(pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; + var substr = this.string.substr(this.pos, pattern.length); + if (cased(substr) == cased(pattern)) { + if (consume !== false) this.pos += pattern.length; + return true; + } + } else { + var match = this.string.slice(this.pos).match(pattern); + if (match && match.index > 0) return null; + if (match && consume !== false) this.pos += match[0].length; + return match; + } + }, + current: function(){return this.string.slice(this.start, this.pos);} + }; + CodeMirror.StringStream = StringStream; + + // TEXTMARKERS + + function TextMarker(doc, type) { + this.lines = []; + this.type = type; + this.doc = doc; + } + CodeMirror.TextMarker = TextMarker; + + TextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + var cm = this.doc.cm, withOp = cm && !cm.curOp; + if (withOp) startOperation(cm); + var min = null, max = null; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.to != null) max = lineNo(line); + line.markedSpans = removeMarkedSpan(line.markedSpans, span); + if (span.from != null) + min = lineNo(line); + else if (this.collapsed && !lineIsHidden(this.doc, line) && cm) + updateLineHeight(line, textHeight(cm.display)); + } + if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { + var visual = visualLine(cm.doc, this.lines[i]), len = lineLength(cm.doc, visual); + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual; + cm.display.maxLineLength = len; + cm.display.maxLineChanged = true; + } + } + + if (min != null && cm) regChange(cm, min, max + 1); + this.lines.length = 0; + this.explicitlyCleared = true; + if (this.collapsed && this.doc.cantEdit) { + this.doc.cantEdit = false; + if (cm) reCheckSelection(cm); + } + if (withOp) endOperation(cm); + signalLater(this, "clear"); + }; + + TextMarker.prototype.find = function() { + var from, to; + for (var i = 0; i < this.lines.length; ++i) { + var line = this.lines[i]; + var span = getMarkedSpanFor(line.markedSpans, this); + if (span.from != null || span.to != null) { + var found = lineNo(line); + if (span.from != null) from = Pos(found, span.from); + if (span.to != null) to = Pos(found, span.to); + } + } + if (this.type == "bookmark") return from; + return from && {from: from, to: to}; + }; + + TextMarker.prototype.changed = function() { + var pos = this.find(), cm = this.doc.cm; + if (!pos || !cm) return; + var line = getLine(this.doc, pos.from.line); + clearCachedMeasurement(cm, line); + if (pos.from.line >= cm.display.showingFrom && pos.from.line < cm.display.showingTo) { + for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) { + if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight); + break; + } + runInOp(cm, function() { cm.curOp.selectionChanged = true; }); + } + }; + + TextMarker.prototype.attachLine = function(line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); + } + this.lines.push(line); + }; + TextMarker.prototype.detachLine = function(line) { + this.lines.splice(indexOf(this.lines, line), 1); + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp; + (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); + } + }; + + function markText(doc, from, to, options, type) { + if (options && options.shared) return markTextShared(doc, from, to, options, type); + if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); + + var marker = new TextMarker(doc, type); + if (type == "range" && !posLess(from, to)) return marker; + if (options) copyObj(options, marker); + if (marker.replacedWith) { + marker.collapsed = true; + marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget"); + } + if (marker.collapsed) sawCollapsedSpans = true; + + if (marker.addToHistory) + addToHistory(doc, {from: from, to: to, origin: "markText"}, + {head: doc.sel.head, anchor: doc.sel.anchor}, NaN); + + var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd, cm = doc.cm, updateMaxLine; + doc.iter(curLine, to.line + 1, function(line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine) + updateMaxLine = true; + var span = {from: null, to: null, marker: marker}; + size += line.text.length; + if (curLine == from.line) {span.from = from.ch; size -= from.ch;} + if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;} + if (marker.collapsed) { + if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch); + if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch); + else updateLineHeight(line, 0); + } + addMarkedSpan(line, span); + ++curLine; + }); + if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { + if (lineIsHidden(doc, line)) updateLineHeight(line, 0); + }); + + if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); + + if (marker.readOnly) { + sawReadOnlySpans = true; + if (doc.history.done.length || doc.history.undone.length) + doc.clearHistory(); + } + if (marker.collapsed) { + if (collapsedAtStart != collapsedAtEnd) + throw new Error("Inserting collapsed marker overlapping an existing one"); + marker.size = size; + marker.atomic = true; + } + if (cm) { + if (updateMaxLine) cm.curOp.updateMaxLine = true; + if (marker.className || marker.startStyle || marker.endStyle || marker.collapsed) + regChange(cm, from.line, to.line + 1); + if (marker.atomic) reCheckSelection(cm); + } + return marker; + } + + // SHARED TEXTMARKERS + + function SharedTextMarker(markers, primary) { + this.markers = markers; + this.primary = primary; + for (var i = 0, me = this; i < markers.length; ++i) { + markers[i].parent = this; + on(markers[i], "clear", function(){me.clear();}); + } + } + CodeMirror.SharedTextMarker = SharedTextMarker; + + SharedTextMarker.prototype.clear = function() { + if (this.explicitlyCleared) return; + this.explicitlyCleared = true; + for (var i = 0; i < this.markers.length; ++i) + this.markers[i].clear(); + signalLater(this, "clear"); + }; + SharedTextMarker.prototype.find = function() { + return this.primary.find(); + }; + + function markTextShared(doc, from, to, options, type) { + options = copyObj(options); + options.shared = false; + var markers = [markText(doc, from, to, options, type)], primary = markers[0]; + var widget = options.replacedWith; + linkedDocs(doc, function(doc) { + if (widget) options.replacedWith = widget.cloneNode(true); + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); + for (var i = 0; i < doc.linked.length; ++i) + if (doc.linked[i].isParent) return; + primary = lst(markers); + }); + return new SharedTextMarker(markers, primary); + } + + // TEXTMARKER SPANS + + function getMarkedSpanFor(spans, marker) { + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if (span.marker == marker) return span; + } + } + function removeMarkedSpan(spans, span) { + for (var r, i = 0; i < spans.length; ++i) + if (spans[i] != span) (r || (r = [])).push(spans[i]); + return r; + } + function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; + span.marker.attachLine(line); + } + + function markedSpansBefore(old, startCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); + if (startsBefore || marker.type == "bookmark" && span.from == startCh && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); + (nw || (nw = [])).push({from: span.from, + to: endsAfter ? null : span.to, + marker: marker}); + } + } + return nw; + } + + function markedSpansAfter(old, endCh, isInsert) { + if (old) for (var i = 0, nw; i < old.length; ++i) { + var span = old[i], marker = span.marker; + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); + if (endsAfter || marker.type == "bookmark" && span.from == endCh && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); + (nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh, + to: span.to == null ? null : span.to - endCh, + marker: marker}); + } + } + return nw; + } + + function stretchSpansOverChange(doc, change) { + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; + if (!oldFirst && !oldLast) return null; + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = posEq(change.from, change.to); + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert); + var last = markedSpansAfter(oldLast, endCh, isInsert); + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i]; + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker); + if (!found) span.to = startCh; + else if (sameLine) span.to = found.to == null ? null : found.to + offset; + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i = 0; i < last.length; ++i) { + var span = last[i]; + if (span.to != null) span.to += offset; + if (span.from == null) { + var found = getMarkedSpanFor(first, span.marker); + if (!found) { + span.from = offset; + if (sameLine) (first || (first = [])).push(span); + } + } else { + span.from += offset; + if (sameLine) (first || (first = [])).push(span); + } + } + } + + var newMarkers = [first]; + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers; + if (gap > 0 && first) + for (var i = 0; i < first.length; ++i) + if (first[i].to == null) + (gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker}); + for (var i = 0; i < gap; ++i) + newMarkers.push(gapMarkers); + newMarkers.push(last); + } + return newMarkers; + } + + function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change); + var stretched = stretchSpansOverChange(doc, change); + if (!old) return stretched; + if (!stretched) return old; + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i]; + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j]; + for (var k = 0; k < oldCur.length; ++k) + if (oldCur[k].marker == span.marker) continue spans; + oldCur.push(span); + } + } else if (stretchCur) { + old[i] = stretchCur; + } + } + return old; + } + + function removeReadOnlyRanges(doc, from, to) { + var markers = null; + doc.iter(from.line, to.line + 1, function(line) { + if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker; + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + (markers || (markers = [])).push(mark); + } + }); + if (!markers) return null; + var parts = [{from: from, to: to}]; + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(); + for (var j = 0; j < parts.length; ++j) { + var p = parts[j]; + if (posLess(p.to, m.from) || posLess(m.to, p.from)) continue; + var newParts = [j, 1]; + if (posLess(p.from, m.from) || !mk.inclusiveLeft && posEq(p.from, m.from)) + newParts.push({from: p.from, to: m.from}); + if (posLess(m.to, p.to) || !mk.inclusiveRight && posEq(p.to, m.to)) + newParts.push({from: m.to, to: p.to}); + parts.splice.apply(parts, newParts); + j += newParts.length - 1; + } + } + return parts; + } + + function collapsedSpanAt(line, ch) { + var sps = sawCollapsedSpans && line.markedSpans, found; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if ((sp.from == null || sp.from < ch) && + (sp.to == null || sp.to > ch) && + (!found || found.width < sp.marker.width)) + found = sp.marker; + } + return found; + } + function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); } + function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); } + + function visualLine(doc, line) { + var merged; + while (merged = collapsedSpanAtStart(line)) + line = getLine(doc, merged.find().from.line); + return line; + } + + function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans; + if (sps) for (var sp, i = 0; i < sps.length; ++i) { + sp = sps[i]; + if (!sp.marker.collapsed) continue; + if (sp.from == null) return true; + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + return true; + } + } + function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find().to, endLine = getLine(doc, end.line); + return lineIsHiddenInner(doc, endLine, getMarkedSpanFor(endLine.markedSpans, span.marker)); + } + if (span.marker.inclusiveRight && span.to == line.text.length) + return true; + for (var sp, i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i]; + if (sp.marker.collapsed && sp.from == span.to && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) return true; + } + } + + function detachMarkedSpans(line) { + var spans = line.markedSpans; + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.detachLine(line); + line.markedSpans = null; + } + + function attachMarkedSpans(line, spans) { + if (!spans) return; + for (var i = 0; i < spans.length; ++i) + spans[i].marker.attachLine(line); + line.markedSpans = spans; + } + + // LINE WIDGETS + + var LineWidget = CodeMirror.LineWidget = function(cm, node, options) { + for (var opt in options) if (options.hasOwnProperty(opt)) + this[opt] = options[opt]; + this.cm = cm; + this.node = node; + }; + function widgetOperation(f) { + return function() { + var withOp = !this.cm.curOp; + if (withOp) startOperation(this.cm); + try {var result = f.apply(this, arguments);} + finally {if (withOp) endOperation(this.cm);} + return result; + }; + } + LineWidget.prototype.clear = widgetOperation(function() { + var ws = this.line.widgets, no = lineNo(this.line); + if (no == null || !ws) return; + for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); + if (!ws.length) this.line.widgets = null; + updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this))); + regChange(this.cm, no, no + 1); + }); + LineWidget.prototype.changed = widgetOperation(function() { + var oldH = this.height; + this.height = null; + var diff = widgetHeight(this) - oldH; + if (!diff) return; + updateLineHeight(this.line, this.line.height + diff); + var no = lineNo(this.line); + regChange(this.cm, no, no + 1); + }); + + function widgetHeight(widget) { + if (widget.height != null) return widget.height; + if (!widget.node.parentNode || widget.node.parentNode.nodeType != 1) + removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative")); + return widget.height = widget.node.offsetHeight; + } + + function addLineWidget(cm, handle, node, options) { + var widget = new LineWidget(cm, node, options); + if (widget.noHScroll) cm.display.alignWidgets = true; + changeLine(cm, handle, function(line) { + (line.widgets || (line.widgets = [])).push(widget); + widget.line = line; + if (!lineIsHidden(cm.doc, line) || widget.showIfHidden) { + var aboveVisible = heightAtLine(cm, line) < cm.display.scroller.scrollTop; + updateLineHeight(line, line.height + widgetHeight(widget)); + if (aboveVisible) addToScrollPos(cm, 0, widget.height); + } + return true; + }); + return widget; + } + + // LINE DATA STRUCTURE + + // Line objects. These hold state related to a line, including + // highlighting info (the styles array). + function makeLine(text, markedSpans, estimateHeight) { + var line = {text: text}; + attachMarkedSpans(line, markedSpans); + line.height = estimateHeight ? estimateHeight(line) : 1; + return line; + } + + function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text; + if (line.stateAfter) line.stateAfter = null; + if (line.styles) line.styles = null; + if (line.order != null) line.order = null; + detachMarkedSpans(line); + attachMarkedSpans(line, markedSpans); + var estHeight = estimateHeight ? estimateHeight(line) : 1; + if (estHeight != line.height) updateLineHeight(line, estHeight); + } + + function cleanUpLine(line) { + line.parent = null; + detachMarkedSpans(line); + } + + // Run the given mode's parser over a line, update the styles + // array, which contains alternating fragments of text and CSS + // classes. + function runMode(cm, text, mode, state, f) { + var flattenSpans = mode.flattenSpans; + if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; + var curText = "", curStyle = null; + var stream = new StringStream(text, cm.options.tabSize), style; + if (text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false; + // Webkit seems to refuse to render text nodes longer than 57444 characters + stream.pos = Math.min(text.length, stream.start + 50000); + style = null; + } else { + style = mode.token(stream, state); + } + var substr = stream.current(); + stream.start = stream.pos; + if (!flattenSpans || curStyle != style) { + if (curText) f(curText, curStyle); + curText = substr; curStyle = style; + } else curText = curText + substr; + } + if (curText) f(curText, curStyle); + } + + function highlightLine(cm, line, state) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen]; + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function(txt, style) {st.push(txt, style);}); + + // Run overlays, adjust style array. + for (var o = 0; o < cm.state.overlays.length; ++o) { + var overlay = cm.state.overlays[o], i = 1; + runMode(cm, line.text, overlay.mode, true, function(txt, style) { + var start = i, len = txt.length; + // Ensure there's a token end at the current position, and that i points at it + while (len) { + var cur = st[i], len_ = cur.length; + if (len_ <= len) { + len -= len_; + } else { + st.splice(i, 1, cur.slice(0, len), st[i+1], cur.slice(len)); + len = 0; + } + i += 2; + } + if (!style) return; + if (overlay.opaque) { + st.splice(start, i - start, txt, style); + i = start + 2; + } else { + for (; start < i; start += 2) { + var cur = st[start+1]; + st[start+1] = cur ? cur + " " + style : style; + } + } + }); + } + + return st; + } + + function getLineStyles(cm, line) { + if (!line.styles || line.styles[0] != cm.state.modeGen) + line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); + return line.styles; + } + + // Lightweight form of highlight -- proceed over this line and + // update state, but don't save a style array. + function processLine(cm, line, state) { + var mode = cm.doc.mode; + var stream = new StringStream(line.text, cm.options.tabSize); + if (line.text == "" && mode.blankLine) mode.blankLine(state); + while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { + mode.token(stream, state); + stream.start = stream.pos; + } + } + + var styleToClassCache = {}; + function styleToClass(style) { + if (!style) return null; + return styleToClassCache[style] || + (styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-")); + } + + function lineContent(cm, realLine, measure) { + var merged, line = realLine, lineBefore, sawBefore, simple = true; + while (merged = collapsedSpanAtStart(line)) { + simple = false; + line = getLine(cm.doc, merged.find().from.line); + if (!lineBefore) lineBefore = line; + } + + var builder = {pre: elt("pre"), col: 0, pos: 0, display: !measure, + measure: null, addedOne: false, cm: cm}; + if (line.textClass) builder.pre.className = line.textClass; + + do { + builder.measure = line == realLine && measure; + builder.pos = 0; + builder.addToken = builder.measure ? buildTokenMeasure : buildToken; + if ((ie || webkit) && cm.getOption("lineWrapping")) + builder.addToken = buildTokenSplitSpaces(builder.addToken); + if (measure && sawBefore && line != realLine && !builder.addedOne) { + measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure)); + builder.addedOne = true; + } + var next = insertLineContent(line, builder, getLineStyles(cm, line)); + sawBefore = line == lineBefore; + if (next) { + line = getLine(cm.doc, next.to.line); + simple = false; + } + } while (next); + + if (measure && !builder.addedOne) + measure[0] = builder.pre.appendChild(simple ? elt("span", "\u00a0") : zeroWidthElement(cm.display.measure)); + if (!builder.pre.firstChild && !lineIsHidden(cm.doc, realLine)) + builder.pre.appendChild(document.createTextNode("\u00a0")); + + var order; + // Work around problem with the reported dimensions of single-char + // direction spans on IE (issue #1129). See also the comment in + // cursorCoords. + if (measure && ie && (order = getOrder(line))) { + var l = order.length - 1; + if (order[l].from == order[l].to) --l; + var last = order[l], prev = order[l - 1]; + if (last.from + 1 == last.to && prev && last.level < prev.level) { + var span = measure[builder.pos - 1]; + if (span) span.parentNode.insertBefore(span.measureRight = zeroWidthElement(cm.display.measure), + span.nextSibling); + } + } + + signal(cm, "renderLine", cm, realLine, builder.pre); + return builder.pre; + } + + var tokenSpecialChars = /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g; + function buildToken(builder, text, style, startStyle, endStyle) { + if (!text) return; + if (!tokenSpecialChars.test(text)) { + builder.col += text.length; + var content = document.createTextNode(text); + } else { + var content = document.createDocumentFragment(), pos = 0; + while (true) { + tokenSpecialChars.lastIndex = pos; + var m = tokenSpecialChars.exec(text); + var skipped = m ? m.index - pos : text.length - pos; + if (skipped) { + content.appendChild(document.createTextNode(text.slice(pos, pos + skipped))); + builder.col += skipped; + } + if (!m) break; + pos += skipped + 1; + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; + content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); + builder.col += tabWidth; + } else { + var token = elt("span", "\u2022", "cm-invalidchar"); + token.title = "\\u" + m[0].charCodeAt(0).toString(16); + content.appendChild(token); + builder.col += 1; + } + } + } + if (style || startStyle || endStyle || builder.measure) { + var fullStyle = style || ""; + if (startStyle) fullStyle += startStyle; + if (endStyle) fullStyle += endStyle; + return builder.pre.appendChild(elt("span", [content], fullStyle)); + } + builder.pre.appendChild(content); + } + + function buildTokenMeasure(builder, text, style, startStyle, endStyle) { + var wrapping = builder.cm.options.lineWrapping; + for (var i = 0; i < text.length; ++i) { + var ch = text.charAt(i), start = i == 0; + if (ch >= "\ud800" && ch < "\udbff" && i < text.length - 1) { + ch = text.slice(i, i + 2); + ++i; + } else if (i && wrapping && spanAffectsWrapping(text, i)) { + builder.pre.appendChild(elt("wbr")); + } + var span = builder.measure[builder.pos] = + buildToken(builder, ch, style, + start && startStyle, i == text.length - 1 && endStyle); + // In IE single-space nodes wrap differently than spaces + // embedded in larger text nodes, except when set to + // white-space: normal (issue #1268). + if (ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) && + i < text.length - 1 && !/\s/.test(text.charAt(i + 1))) + span.style.whiteSpace = "normal"; + builder.pos += ch.length; + } + if (text.length) builder.addedOne = true; + } + + function buildTokenSplitSpaces(inner) { + function split(old) { + var out = " "; + for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; + out += " "; + return out; + } + return function(builder, text, style, startStyle, endStyle) { + return inner(builder, text.replace(/ {3,}/, split), style, startStyle, endStyle); + }; + } + + function buildCollapsedSpan(builder, size, widget) { + if (widget) { + if (!builder.display) widget = widget.cloneNode(true); + builder.pre.appendChild(widget); + if (builder.measure && size) { + builder.measure[builder.pos] = widget; + builder.addedOne = true; + } + } + builder.pos += size; + } + + // Outputs a number of spans to make up a line, taking highlighting + // and marked text into account. + function insertLineContent(line, builder, styles) { + var spans = line.markedSpans; + if (!spans) { + for (var i = 1; i < styles.length; i+=2) + builder.addToken(builder, styles[i], styleToClass(styles[i+1])); + return; + } + + var allText = line.text, len = allText.length; + var pos = 0, i = 1, text = "", style; + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed; + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = ""; + collapsed = null; nextChange = Infinity; + var foundBookmark = null; + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker; + if (sp.from <= pos && (sp.to == null || sp.to > pos)) { + if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } + if (m.className) spanStyle += " " + m.className; + if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; + if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; + if (m.collapsed && (!collapsed || collapsed.marker.width < m.width)) + collapsed = sp; + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from; + } + if (m.type == "bookmark" && sp.from == pos && m.replacedWith) + foundBookmark = m.replacedWith; + } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos, + collapsed.from != null && collapsed.marker.replacedWith); + if (collapsed.to == null) return collapsed.marker.find(); + } + if (foundBookmark && !collapsed) buildCollapsedSpan(builder, 0, foundBookmark); + } + if (pos >= len) break; + + var upto = Math.min(len, nextChange); + while (true) { + if (text) { + var end = pos + text.length; + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text; + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : ""); + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} + pos = end; + spanStartStyle = ""; + } + text = styles[i++]; style = styleToClass(styles[i++]); + } + } + } + + // DOCUMENT DATA STRUCTURE + + function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null;} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight); + signalLater(line, "change", line, change); + } + + var from = change.from, to = change.to, text = change.text; + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; + + // First adjust the line structure + if (from.ch == 0 && to.ch == 0 && lastText == "") { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + for (var i = 0, e = text.length - 1, added = []; i < e; ++i) + added.push(makeLine(text[i], spansFor(i), estimateHeight)); + update(lastLine, lastLine.text, lastSpans); + if (nlines) doc.remove(from.line, nlines); + if (added.length) doc.insert(from.line, added); + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); + } else { + for (var added = [], i = 1, e = text.length - 1; i < e; ++i) + added.push(makeLine(text[i], spansFor(i), estimateHeight)); + added.push(makeLine(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + doc.insert(from.line + 1, added); + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); + doc.remove(from.line + 1, nlines); + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); + for (var i = 1, e = text.length - 1, added = []; i < e; ++i) + added.push(makeLine(text[i], spansFor(i), estimateHeight)); + if (nlines > 1) doc.remove(from.line + 1, nlines - 1); + doc.insert(from.line + 1, added); + } + + signalLater(doc, "change", doc, change); + setSelection(doc, selAfter.anchor, selAfter.head, null, true); + } + + function LeafChunk(lines) { + this.lines = lines; + this.parent = null; + for (var i = 0, e = lines.length, height = 0; i < e; ++i) { + lines[i].parent = this; + height += lines[i].height; + } + this.height = height; + } + + LeafChunk.prototype = { + chunkSize: function() { return this.lines.length; }, + removeInner: function(at, n) { + for (var i = at, e = at + n; i < e; ++i) { + var line = this.lines[i]; + this.height -= line.height; + cleanUpLine(line); + signalLater(line, "delete"); + } + this.lines.splice(at, n); + }, + collapse: function(lines) { + lines.splice.apply(lines, [lines.length, 0].concat(this.lines)); + }, + insertInner: function(at, lines, height) { + this.height += height; + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); + for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this; + }, + iterN: function(at, n, op) { + for (var e = at + n; at < e; ++at) + if (op(this.lines[at])) return true; + } + }; + + function BranchChunk(children) { + this.children = children; + var size = 0, height = 0; + for (var i = 0, e = children.length; i < e; ++i) { + var ch = children[i]; + size += ch.chunkSize(); height += ch.height; + ch.parent = this; + } + this.size = size; + this.height = height; + this.parent = null; + } + + BranchChunk.prototype = { + chunkSize: function() { return this.size; }, + removeInner: function(at, n) { + this.size -= n; + for (var i = 0; i < this.children.length; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height; + child.removeInner(at, rm); + this.height -= oldHeight - child.height; + if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } + if ((n -= rm) == 0) break; + at = 0; + } else at -= sz; + } + if (this.size - n < 25) { + var lines = []; + this.collapse(lines); + this.children = [new LeafChunk(lines)]; + this.children[0].parent = this; + } + }, + collapse: function(lines) { + for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines); + }, + insertInner: function(at, lines, height) { + this.size += lines.length; + this.height += height; + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at <= sz) { + child.insertInner(at, lines, height); + if (child.lines && child.lines.length > 50) { + while (child.lines.length > 50) { + var spilled = child.lines.splice(child.lines.length - 25, 25); + var newleaf = new LeafChunk(spilled); + child.height -= newleaf.height; + this.children.splice(i + 1, 0, newleaf); + newleaf.parent = this; + } + this.maybeSpill(); + } + break; + } + at -= sz; + } + }, + maybeSpill: function() { + if (this.children.length <= 10) return; + var me = this; + do { + var spilled = me.children.splice(me.children.length - 5, 5); + var sibling = new BranchChunk(spilled); + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children); + copy.parent = me; + me.children = [copy, sibling]; + me = copy; + } else { + me.size -= sibling.size; + me.height -= sibling.height; + var myIndex = indexOf(me.parent.children, me); + me.parent.children.splice(myIndex + 1, 0, sibling); + } + sibling.parent = me.parent; + } while (me.children.length > 10); + me.parent.maybeSpill(); + }, + iterN: function(at, n, op) { + for (var i = 0, e = this.children.length; i < e; ++i) { + var child = this.children[i], sz = child.chunkSize(); + if (at < sz) { + var used = Math.min(n, sz - at); + if (child.iterN(at, used, op)) return true; + if ((n -= used) == 0) break; + at = 0; + } else at -= sz; + } + } + }; + + var nextDocId = 0; + var Doc = CodeMirror.Doc = function(text, mode, firstLine) { + if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); + if (firstLine == null) firstLine = 0; + + BranchChunk.call(this, [new LeafChunk([makeLine("", null)])]); + this.first = firstLine; + this.scrollTop = this.scrollLeft = 0; + this.cantEdit = false; + this.history = makeHistory(); + this.frontier = firstLine; + var start = Pos(firstLine, 0); + this.sel = {from: start, to: start, head: start, anchor: start, shift: false, extend: false, goalColumn: null}; + this.id = ++nextDocId; + this.modeOption = mode; + + if (typeof text == "string") text = splitLines(text); + updateDoc(this, {from: start, to: start, text: text}, null, {head: start, anchor: start}); + }; + + Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + iter: function(from, to, op) { + if (op) this.iterN(from - this.first, to - from, op); + else this.iterN(this.first, this.first + this.size, from); + }, + + insert: function(at, lines) { + var height = 0; + for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height; + this.insertInner(at - this.first, lines, height); + }, + remove: function(at, n) { this.removeInner(at - this.first, n); }, + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + setValue: function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1; + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: splitLines(code), origin: "setValue"}, + {head: top, anchor: top}, true); + }, + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from); + to = to ? clipPos(this, to) : from; + replaceRange(this, code, from, to, origin); + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); + if (lineSep === false) return lines; + return lines.join(lineSep || "\n"); + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, + setLine: function(line, text) { + if (isLine(this, line)) + replaceRange(this, text, Pos(line, 0), clipPos(this, Pos(line))); + }, + removeLine: function(line) { + if (line) replaceRange(this, "", clipPos(this, Pos(line - 1)), clipPos(this, Pos(line))); + else replaceRange(this, "", Pos(0, 0), clipPos(this, Pos(1, 0))); + }, + + getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, + getLineNumber: function(line) {return lineNo(line);}, + + lineCount: function() {return this.size;}, + firstLine: function() {return this.first;}, + lastLine: function() {return this.first + this.size - 1;}, + + clipPos: function(pos) {return clipPos(this, pos);}, + + getCursor: function(start) { + var sel = this.sel, pos; + if (start == null || start == "head") pos = sel.head; + else if (start == "anchor") pos = sel.anchor; + else if (start == "end" || start === false) pos = sel.to; + else pos = sel.from; + return copyPos(pos); + }, + somethingSelected: function() {return !posEq(this.sel.head, this.sel.anchor);}, + + setCursor: docOperation(function(line, ch, extend) { + var pos = clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line); + if (extend) extendSelection(this, pos); + else setSelection(this, pos, pos); + }), + setSelection: docOperation(function(anchor, head) { + setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor)); + }), + extendSelection: docOperation(function(from, to) { + extendSelection(this, clipPos(this, from), to && clipPos(this, to)); + }), + + getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);}, + replaceSelection: function(code, collapse, origin) { + makeChange(this, {from: this.sel.from, to: this.sel.to, text: splitLines(code), origin: origin}, collapse || "around"); + }, + undo: docOperation(function() {makeChangeFromHistory(this, "undo");}), + redo: docOperation(function() {makeChangeFromHistory(this, "redo");}), + + setExtending: function(val) {this.sel.extend = val;}, + + historySize: function() { + var hist = this.history; + return {undo: hist.done.length, redo: hist.undone.length}; + }, + clearHistory: function() {this.history = makeHistory();}, + + markClean: function() { + this.history.dirtyCounter = 0; + this.history.lastOp = this.history.lastOrigin = null; + }, + isClean: function () {return this.history.dirtyCounter == 0;}, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)}; + }, + setHistory: function(histData) { + var hist = this.history = makeHistory(); + hist.done = histData.done.slice(0); + hist.undone = histData.undone.slice(0); + }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft}; + pos = clipPos(this, pos); + return markText(this, pos, pos, realOpts, "bookmark"); + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos); + var markers = [], spans = getLine(this, pos.line).markedSpans; + if (spans) for (var i = 0; i < spans.length; ++i) { + var span = spans[i]; + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + markers.push(span.marker.parent || span.marker); + } + return markers; + }, + getAllMarks: function() { + var markers = []; + this.iter(function(line) { + var sps = line.markedSpans; + if (sps) for (var i = 0; i < sps.length; ++i) + if (sps[i].from != null) markers.push(sps[i].marker); + }); + return markers; + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first; + this.iter(function(line) { + var sz = line.text.length + 1; + if (sz > off) { ch = off; return true; } + off -= sz; + ++lineNo; + }); + return clipPos(this, Pos(lineNo, ch)); + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords); + var index = coords.ch; + if (coords.line < this.first || coords.ch < 0) return 0; + this.iter(this.first, coords.line, function (line) { + index += line.text.length + 1; + }); + return index; + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; + doc.sel = {from: this.sel.from, to: this.sel.to, head: this.sel.head, anchor: this.sel.anchor, + shift: this.sel.shift, extend: false, goalColumn: this.sel.goalColumn}; + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth; + doc.setHistory(this.getHistory()); + } + return doc; + }, + + linkedDoc: function(options) { + if (!options) options = {}; + var from = this.first, to = this.first + this.size; + if (options.from != null && options.from > from) from = options.from; + if (options.to != null && options.to < to) to = options.to; + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); + if (options.sharedHist) copy.history = this.history; + (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; + return copy; + }, + unlinkDoc: function(other) { + if (other instanceof CodeMirror) other = other.doc; + if (this.linked) for (var i = 0; i < this.linked.length; ++i) { + var link = this.linked[i]; + if (link.doc != other) continue; + this.linked.splice(i, 1); + other.unlinkDoc(this); + break; + } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id]; + linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); + other.history = makeHistory(); + other.history.done = copyHistoryArray(this.history.done, splitIds); + other.history.undone = copyHistoryArray(this.history.undone, splitIds); + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f);}, + + getMode: function() {return this.mode;}, + getEditor: function() {return this.cm;} + }); + + Doc.prototype.eachLine = Doc.prototype.iter; + + // The Doc methods that should be available on CodeMirror instances + var dontDelegate = "iter insert remove copy getEditor".split(" "); + for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments);}; + })(Doc.prototype[prop]); + + function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i]; + if (rel.doc == skip) continue; + var shared = sharedHist && rel.sharedHist; + if (sharedHistOnly && !shared) continue; + f(rel.doc, shared); + propagate(rel.doc, doc, shared); + } + } + propagate(doc, null, true); + } + + function attachDoc(cm, doc) { + if (doc.cm) throw new Error("This document is already in use."); + cm.doc = doc; + doc.cm = cm; + estimateLineHeights(cm); + loadMode(cm); + if (!cm.options.lineWrapping) computeMaxLength(cm); + cm.options.mode = doc.modeOption; + regChange(cm); + } + + // LINE UTILITIES + + function getLine(chunk, n) { + n -= chunk.first; + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize(); + if (n < sz) { chunk = child; break; } + n -= sz; + } + } + return chunk.lines[n]; + } + + function getBetween(doc, start, end) { + var out = [], n = start.line; + doc.iter(start.line, end.line + 1, function(line) { + var text = line.text; + if (n == end.line) text = text.slice(0, end.ch); + if (n == start.line) text = text.slice(start.ch); + out.push(text); + ++n; + }); + return out; + } + function getLines(doc, from, to) { + var out = []; + doc.iter(from, to, function(line) { out.push(line.text); }); + return out; + } + + function updateLineHeight(line, height) { + var diff = height - line.height; + for (var n = line; n; n = n.parent) n.height += diff; + } + + function lineNo(line) { + if (line.parent == null) return null; + var cur = line.parent, no = indexOf(cur.lines, line); + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) break; + no += chunk.children[i].chunkSize(); + } + } + return no + cur.first; + } + + function lineAtHeight(chunk, h) { + var n = chunk.first; + outer: do { + for (var i = 0, e = chunk.children.length; i < e; ++i) { + var child = chunk.children[i], ch = child.height; + if (h < ch) { chunk = child; continue outer; } + h -= ch; + n += child.chunkSize(); + } + return n; + } while (!chunk.lines); + for (var i = 0, e = chunk.lines.length; i < e; ++i) { + var line = chunk.lines[i], lh = line.height; + if (h < lh) break; + h -= lh; + } + return n + i; + } + + function heightAtLine(cm, lineObj) { + lineObj = visualLine(cm.doc, lineObj); + + var h = 0, chunk = lineObj.parent; + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i]; + if (line == lineObj) break; + else h += line.height; + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i = 0; i < p.children.length; ++i) { + var cur = p.children[i]; + if (cur == chunk) break; + else h += cur.height; + } + } + return h; + } + + function getOrder(line) { + var order = line.order; + if (order == null) order = line.order = bidiOrdering(line.text); + return order; + } + + // HISTORY + + function makeHistory() { + return { + // Arrays of history events. Doing something adds an event to + // done and clears undo. Undoing moves events from done to + // undone, redoing moves them in the other direction. + done: [], undone: [], undoDepth: Infinity, + // Used to track when changes can be merged into a single undo + // event + lastTime: 0, lastOp: null, lastOrigin: null, + // Used by the isClean() method + dirtyCounter: 0 + }; + } + + function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0; + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { + if (line.markedSpans) + (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; + ++n; + }); + } + + function historyChangeFromChange(doc, change) { + var histChange = {from: change.from, to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); + linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); + return histChange; + } + + function addToHistory(doc, change, selAfter, opId) { + var hist = doc.history; + hist.undone.length = 0; + var time = +new Date, cur = lst(hist.done); + + if (cur && + (hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*"))) { + // Merge this change into the last event + var last = lst(cur.changes); + if (posEq(change.from, change.to) && posEq(change.from, last.to)) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change); + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)); + } + cur.anchorAfter = selAfter.anchor; cur.headAfter = selAfter.head; + } else { + // Can not be merged, start a new event. + cur = {changes: [historyChangeFromChange(doc, change)], + anchorBefore: doc.sel.anchor, headBefore: doc.sel.head, + anchorAfter: selAfter.anchor, headAfter: selAfter.head}; + hist.done.push(cur); + while (hist.done.length > hist.undoDepth) + hist.done.shift(); + if (hist.dirtyCounter < 0) + // The user has made a change after undoing past the last clean state. + // We can never get back to a clean state now until markClean() is called. + hist.dirtyCounter = NaN; + else + hist.dirtyCounter++; + } + hist.lastTime = time; + hist.lastOp = opId; + hist.lastOrigin = change.origin; + } + + function removeClearedSpans(spans) { + if (!spans) return null; + for (var i = 0, out; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } + else if (out) out.push(spans[i]); + } + return !out ? spans : out.length ? out : null; + } + + function getOldSpans(doc, change) { + var found = change["spans_" + doc.id]; + if (!found) return null; + for (var i = 0, nw = []; i < change.text.length; ++i) + nw.push(removeClearedSpans(found[i])); + return nw; + } + + // Used both to provide a JSON-safe object in .getHistory, and, when + // detaching a document, to split the history in two + function copyHistoryArray(events, newGroup) { + for (var i = 0, copy = []; i < events.length; ++i) { + var event = events[i], changes = event.changes, newChanges = []; + copy.push({changes: newChanges, anchorBefore: event.anchorBefore, headBefore: event.headBefore, + anchorAfter: event.anchorAfter, headAfter: event.headAfter}); + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m; + newChanges.push({from: change.from, to: change.to, text: change.text}); + if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop]; + delete change[prop]; + } + } + } + } + return copy; + } + + // Rebasing/resetting history to deal with externally-sourced changes + + function rebaseHistSel(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff; + } else if (from < pos.line) { + pos.line = from; + pos.ch = 0; + } + } + + // Tries to rebase an array of history events given a change in the + // document. If the change touches the same lines as the event, the + // event, and everything 'behind' it, is discarded. If the change is + // before the event, the event's positions are updated. Uses a + // copy-on-write scheme for the positions, to avoid having to + // reallocate them all on every rebase, but also avoid problems with + // shared position objects being unsafely updated. + function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true; + for (var j = 0; j < sub.changes.length; ++j) { + var cur = sub.changes[j]; + if (!sub.copied) { cur.from = copyPos(cur.from); cur.to = copyPos(cur.to); } + if (to < cur.from.line) { + cur.from.line += diff; + cur.to.line += diff; + } else if (from <= cur.to.line) { + ok = false; + break; + } + } + if (!sub.copied) { + sub.anchorBefore = copyPos(sub.anchorBefore); sub.headBefore = copyPos(sub.headBefore); + sub.anchorAfter = copyPos(sub.anchorAfter); sub.readAfter = copyPos(sub.headAfter); + sub.copied = true; + } + if (!ok) { + array.splice(0, i + 1); + i = 0; + } else { + rebaseHistSel(sub.anchorBefore); rebaseHistSel(sub.headBefore); + rebaseHistSel(sub.anchorAfter); rebaseHistSel(sub.headAfter); + } + } + } + + function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; + rebaseHistArray(hist.done, from, to, diff); + rebaseHistArray(hist.undone, from, to, diff); + } + + // EVENT OPERATORS + + function stopMethod() {e_stop(this);} + // Ensure an event has a stop method. + function addStop(event) { + if (!event.stop) event.stop = stopMethod; + return event; + } + + function e_preventDefault(e) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + function e_stopPropagation(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.cancelBubble = true; + } + function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} + CodeMirror.e_stop = e_stop; + CodeMirror.e_preventDefault = e_preventDefault; + CodeMirror.e_stopPropagation = e_stopPropagation; + + function e_target(e) {return e.target || e.srcElement;} + function e_button(e) { + var b = e.which; + if (b == null) { + if (e.button & 1) b = 1; + else if (e.button & 2) b = 3; + else if (e.button & 4) b = 2; + } + if (mac && e.ctrlKey && b == 1) b = 3; + return b; + } + + // EVENT HANDLING + + function on(emitter, type, f) { + if (emitter.addEventListener) + emitter.addEventListener(type, f, false); + else if (emitter.attachEvent) + emitter.attachEvent("on" + type, f); + else { + var map = emitter._handlers || (emitter._handlers = {}); + var arr = map[type] || (map[type] = []); + arr.push(f); + } + } + + function off(emitter, type, f) { + if (emitter.removeEventListener) + emitter.removeEventListener(type, f, false); + else if (emitter.detachEvent) + emitter.detachEvent("on" + type, f); + else { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + for (var i = 0; i < arr.length; ++i) + if (arr[i] == f) { arr.splice(i, 1); break; } + } + } + + function signal(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); + } + + var delayedCallbacks, delayedCallbackDepth = 0; + function signalLater(emitter, type /*, values...*/) { + var arr = emitter._handlers && emitter._handlers[type]; + if (!arr) return; + var args = Array.prototype.slice.call(arguments, 2); + if (!delayedCallbacks) { + ++delayedCallbackDepth; + delayedCallbacks = []; + setTimeout(fireDelayed, 0); + } + function bnd(f) {return function(){f.apply(null, args);};}; + for (var i = 0; i < arr.length; ++i) + delayedCallbacks.push(bnd(arr[i])); + } + + function fireDelayed() { + --delayedCallbackDepth; + var delayed = delayedCallbacks; + delayedCallbacks = null; + for (var i = 0; i < delayed.length; ++i) delayed[i](); + } + + function hasHandler(emitter, type) { + var arr = emitter._handlers && emitter._handlers[type]; + return arr && arr.length > 0; + } + + CodeMirror.on = on; CodeMirror.off = off; CodeMirror.signal = signal; + + // MISC UTILITIES + + // Number of pixels added to scroller and sizer to hide scrollbar + var scrollerCutOff = 30; + + // Returned or thrown by various protocols to signal 'I'm not + // handling this'. + var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; + + function Delayed() {this.id = null;} + Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}}; + + // Counts the column offset in a string, taking tabs into account. + // Used mostly to find indentation. + function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/); + if (end == -1) end = string.length; + } + for (var i = startIndex || 0, n = startValue || 0; i < end; ++i) { + if (string.charAt(i) == "\t") n += tabSize - (n % tabSize); + else ++n; + } + return n; + } + CodeMirror.countColumn = countColumn; + + var spaceStrs = [""]; + function spaceStr(n) { + while (spaceStrs.length <= n) + spaceStrs.push(lst(spaceStrs) + " "); + return spaceStrs[n]; + } + + function lst(arr) { return arr[arr.length-1]; } + + function selectInput(node) { + if (ios) { // Mobile Safari apparently has a bug where select() is broken. + node.selectionStart = 0; + node.selectionEnd = node.value.length; + } else node.select(); + } + + function indexOf(collection, elt) { + if (collection.indexOf) return collection.indexOf(elt); + for (var i = 0, e = collection.length; i < e; ++i) + if (collection[i] == elt) return i; + return -1; + } + + function createObj(base, props) { + function Obj() {} + Obj.prototype = base; + var inst = new Obj(); + if (props) copyObj(props, inst); + return inst; + } + + function copyObj(obj, target) { + if (!target) target = {}; + for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; + return target; + } + + function emptyArray(size) { + for (var a = [], i = 0; i < size; ++i) a.push(undefined); + return a; + } + + function bind(f) { + var args = Array.prototype.slice.call(arguments, 1); + return function(){return f.apply(null, args);}; + } + + var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; + function isWordChar(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); + } + + function isEmpty(obj) { + for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; + return true; + } + + var isExtendingChar = /[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/; + + // DOM UTILITIES + + function elt(tag, content, className, style) { + var e = document.createElement(tag); + if (className) e.className = className; + if (style) e.style.cssText = style; + if (typeof content == "string") setTextContent(e, content); + else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); + return e; + } + + function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + e.removeChild(e.firstChild); + return e; + } + + function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e); + } + + function setTextContent(e, str) { + if (ie_lt9) { + e.innerHTML = ""; + e.appendChild(document.createTextNode(str)); + } else e.textContent = str; + } + + function getRect(node) { + return node.getBoundingClientRect(); + } + CodeMirror.replaceGetRect = function(f) { getRect = f; }; + + // FEATURE DETECTION + + // Detect drag-and-drop + var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie_lt9) return false; + var div = elt('div'); + return "draggable" in div || "dragDrop" in div; + }(); + + // For a reason I have yet to figure out, some browsers disallow + // word wrapping between certain characters *only* if a new inline + // element is started between them. This makes it hard to reliably + // measure the position of things, since that requires inserting an + // extra span. This terribly fragile set of tests matches the + // character combinations that suffer from this phenomenon on the + // various browsers. + function spanAffectsWrapping() { return false; } + if (gecko) // Only for "$'" + spanAffectsWrapping = function(str, i) { + return str.charCodeAt(i - 1) == 36 && str.charCodeAt(i) == 39; + }; + else if (safari && !/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent)) + spanAffectsWrapping = function(str, i) { + return /\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(str.slice(i - 1, i + 1)); + }; + else if (webkit) + spanAffectsWrapping = function(str, i) { + if (i > 1 && str.charCodeAt(i - 1) == 45 && /\w/.test(str.charAt(i - 2)) && /[^\-?\.]/.test(str.charAt(i))) + return true; + return /[~!#%&*)=+}\]|\"\.>,:;][({[<]|\?[\w~`@#$%\^&*(_=+{[|><]/.test(str.slice(i - 1, i + 1)); + }; + + var knownScrollbarWidth; + function scrollbarWidth(measure) { + if (knownScrollbarWidth != null) return knownScrollbarWidth; + var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll"); + removeChildrenAndAdd(measure, test); + if (test.offsetWidth) + knownScrollbarWidth = test.offsetHeight - test.clientHeight; + return knownScrollbarWidth || 0; + } + + var zwspSupported; + function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b"); + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); + if (measure.firstChild.offsetHeight != 0) + zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_lt8; + } + if (zwspSupported) return elt("span", "\u200b"); + else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); + } + + // See if "".split is the broken IE version, if so, provide an + // alternative way to split lines. + var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { + var pos = 0, result = [], l = string.length; + while (pos <= l) { + var nl = string.indexOf("\n", pos); + if (nl == -1) nl = string.length; + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); + var rt = line.indexOf("\r"); + if (rt != -1) { + result.push(line.slice(0, rt)); + pos += rt + 1; + } else { + result.push(line); + pos = nl + 1; + } + } + return result; + } : function(string){return string.split(/\r\n?|\n/);}; + CodeMirror.splitLines = splitLines; + + var hasSelection = window.getSelection ? function(te) { + try { return te.selectionStart != te.selectionEnd; } + catch(e) { return false; } + } : function(te) { + try {var range = te.ownerDocument.selection.createRange();} + catch(e) {} + if (!range || range.parentElement() != te) return false; + return range.compareEndPoints("StartToEnd", range) != 0; + }; + + var hasCopyEvent = (function() { + var e = elt("div"); + if ("oncopy" in e) return true; + e.setAttribute("oncopy", "return;"); + return typeof e.oncopy == 'function'; + })(); + + // KEY NAMING + + var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete", + 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home", + 63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"}; + CodeMirror.keyNames = keyNames; + (function() { + // Number keys + for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i); + // Alphabetic keys + for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); + // Function keys + for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; + })(); + + // BIDI HELPERS + + function iterateBidiSections(order, from, to, f) { + if (!order) return f(from, to, "ltr"); + for (var i = 0; i < order.length; ++i) { + var part = order[i]; + if (part.from < to && part.to > from || from == to && part.to == from) + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); + } + } + + function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } + function bidiRight(part) { return part.level % 2 ? part.from : part.to; } + + function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } + function lineRight(line) { + var order = getOrder(line); + if (!order) return line.text.length; + return bidiRight(lst(order)); + } + + function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN); + var visual = visualLine(cm.doc, line); + if (visual != line) lineN = lineNo(visual); + var order = getOrder(visual); + var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); + return Pos(lineN, ch); + } + function lineEnd(cm, lineN) { + var merged, line; + while (merged = collapsedSpanAtEnd(line = getLine(cm.doc, lineN))) + lineN = merged.find().to.line; + var order = getOrder(line); + var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); + return Pos(lineN, ch); + } + + function compareBidiLevel(order, a, b) { + var linedir = order[0].level; + if (a == linedir) return true; + if (b == linedir) return false; + return a < b; + } + var bidiOther; + function getBidiPartAt(order, pos) { + for (var i = 0, found; i < order.length; ++i) { + var cur = order[i]; + if (cur.from < pos && cur.to > pos) { bidiOther = null; return i; } + if (cur.from == pos || cur.to == pos) { + if (found == null) { + found = i; + } else if (compareBidiLevel(order, cur.level, order[found].level)) { + bidiOther = found; + return i; + } else { + bidiOther = i; + return found; + } + } + } + bidiOther = null; + return found; + } + + function moveInLine(line, pos, dir, byUnit) { + if (!byUnit) return pos + dir; + do pos += dir; + while (pos > 0 && isExtendingChar.test(line.text.charAt(pos))); + return pos; + } + + // This is somewhat involved. It is needed in order to move + // 'visually' through bi-directional text -- i.e., pressing left + // should make the cursor go left, even when in RTL text. The + // tricky part is the 'jumps', where RTL and LTR text touch each + // other. This often requires the cursor offset to move more than + // one unit, in order to visually move one unit. + function moveVisually(line, start, dir, byUnit) { + var bidi = getOrder(line); + if (!bidi) return moveLogically(line, start, dir, byUnit); + var pos = getBidiPartAt(bidi, start), part = bidi[pos]; + var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); + + for (;;) { + if (target > part.from && target < part.to) return target; + if (target == part.from || target == part.to) { + if (getBidiPartAt(bidi, target) == pos) return target; + part = bidi[pos += dir]; + return (dir > 0) == part.level % 2 ? part.to : part.from; + } else { + part = bidi[pos += dir]; + if (!part) return null; + if ((dir > 0) == part.level % 2) + target = moveInLine(line, part.to, -1, byUnit); + else + target = moveInLine(line, part.from, 1, byUnit); + } + } + } + + function moveLogically(line, start, dir, byUnit) { + var target = start + dir; + if (byUnit) while (target > 0 && isExtendingChar.test(line.text.charAt(target))) target += dir; + return target < 0 || target > line.text.length ? null : target; + } + + // Bidirectional ordering algorithm + // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm + // that this (partially) implements. + + // One-char codes used for character types: + // L (L): Left-to-Right + // R (R): Right-to-Left + // r (AL): Right-to-Left Arabic + // 1 (EN): European Number + // + (ES): European Number Separator + // % (ET): European Number Terminator + // n (AN): Arabic Number + // , (CS): Common Number Separator + // m (NSM): Non-Spacing Mark + // b (BN): Boundary Neutral + // s (B): Paragraph Separator + // t (S): Segment Separator + // w (WS): Whitespace + // N (ON): Other Neutrals + + // Returns null if characters are ordered as they appear + // (left-to-right), or an array of sections ({from, to, level} + // objects) in the order in which they occur visually. + var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL"; + // Character types for codepoints 0x600 to 0x6ff + var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr"; + function charType(code) { + if (code <= 0xff) return lowTypes.charAt(code); + else if (0x590 <= code && code <= 0x5f4) return "R"; + else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600); + else if (0x700 <= code && code <= 0x8ac) return "r"; + else return "L"; + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; + // Browsers seem to always treat the boundaries of block elements as being L. + var outerType = "L"; + + return function(str) { + if (!bidiRE.test(str)) return false; + var len = str.length, types = []; + for (var i = 0, type; i < len; ++i) + types.push(type = charType(str.charCodeAt(i))); + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i = 0, prev = outerType; i < len; ++i) { + var type = types[i]; + if (type == "m") types[i] = prev; + else prev = type; + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (type == "1" && cur == "r") types[i] = "n"; + else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i = 1, prev = types[0]; i < len - 1; ++i) { + var type = types[i]; + if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; + else if (type == "," && prev == types[i+1] && + (prev == "1" || prev == "n")) types[i] = prev; + prev = type; + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i = 0; i < len; ++i) { + var type = types[i]; + if (type == ",") types[i] = "N"; + else if (type == "%") { + for (var end = i + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i && types[i-1] == "!") || (end < len - 1 && types[end] == "1") ? "1" : "N"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i = 0, cur = outerType; i < len; ++i) { + var type = types[i]; + if (cur == "L" && type == "1") types[i] = "L"; + else if (isStrong.test(type)) cur = type; + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i = 0; i < len; ++i) { + if (isNeutral.test(types[i])) { + for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} + var before = (i ? types[i-1] : outerType) == "L"; + var after = (end < len - 1 ? types[end] : outerType) == "L"; + var replace = before || after ? "L" : "R"; + for (var j = i; j < end; ++j) types[j] = replace; + i = end - 1; + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m; + for (var i = 0; i < len;) { + if (countsAsLeft.test(types[i])) { + var start = i; + for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} + order.push({from: start, to: i, level: 0}); + } else { + var pos = i, at = order.length; + for (++i; i < len && types[i] != "L"; ++i) {} + for (var j = pos; j < i;) { + if (countsAsNum.test(types[j])) { + if (pos < j) order.splice(at, 0, {from: pos, to: j, level: 1}); + var nstart = j; + for (++j; j < i && countsAsNum.test(types[j]); ++j) {} + order.splice(at, 0, {from: nstart, to: j, level: 2}); + pos = j; + } else ++j; + } + if (pos < i) order.splice(at, 0, {from: pos, to: i, level: 1}); + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length; + order.unshift({from: 0, to: m[0].length, level: 0}); + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length; + order.push({from: len - m[0].length, to: len, level: 0}); + } + if (order[0].level != lst(order).level) + order.push({from: len, to: len, level: order[0].level}); + + return order; + }; + })(); + + // THE END + + CodeMirror.version = "3.13"; + + return CodeMirror; +})(); diff --git a/smartsnippets/static/admin/js/codemirror/css.js b/smartsnippets/static/admin/js/codemirror/css.js new file mode 100644 index 0000000..27c97f3 --- /dev/null +++ b/smartsnippets/static/admin/js/codemirror/css.js @@ -0,0 +1,606 @@ +CodeMirror.defineMode("css", function(config) { + return CodeMirror.getMode(config, "text/css"); +}); + +CodeMirror.defineMode("css-base", function(config, parserConfig) { + "use strict"; + + var indentUnit = config.indentUnit, + hooks = parserConfig.hooks || {}, + atMediaTypes = parserConfig.atMediaTypes || {}, + atMediaFeatures = parserConfig.atMediaFeatures || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = !!parserConfig.allowNested, + type = null; + + function ret(style, tp) { type = tp; return style; } + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + // result[0] is style and result[1] is type + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current());} + else if (ch == "=") ret(null, "compare"); + else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); + else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } + else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } + else if (/\d/.test(ch)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } + else if (ch === "-") { + if (/\d/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^[^-]+-/)) { + return ret("meta", "meta"); + } + } + else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } + else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } + else if (ch == ":") { + return ret("operator", ch); + } + else if (/[;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } + else if (ch == "u" && stream.match("rl(")) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "variable"); + } + else { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "variable"); + } + } + + function tokenString(quote, nonInclusive) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) + break; + escaped = !escaped && ch == "\\"; + } + if (!escaped) { + if (nonInclusive) stream.backUp(1); + state.tokenize = tokenBase; + } + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\']/, false)) + state.tokenize = tokenString(")", true); + else + state.tokenize = tokenBase; + return ret(null, "("); + } + + return { + startState: function(base) { + return {tokenize: tokenBase, + baseIndent: base || 0, + stack: []}; + }, + + token: function(stream, state) { + + // Use these terms when applicable (see http://www.xanthir.com/blog/b4E50) + // + // rule** or **ruleset: + // A selector + braces combo, or an at-rule. + // + // declaration block: + // A sequence of declarations. + // + // declaration: + // A property + colon + value combo. + // + // property value: + // The entire value of a property. + // + // component value: + // A single piece of a property value. Like the 5px in + // text-shadow: 0 0 5px blue;. Can also refer to things that are + // multiple terms, like the 1-4 terms that make up the background-size + // portion of the background shorthand. + // + // term: + // The basic unit of author-facing CSS, like a single number (5), + // dimension (5px), string ("foo"), or function. Officially defined + // by the CSS 2.1 grammar (look for the 'term' production) + // + // + // simple selector: + // A single atomic selector, like a type selector, an attr selector, a + // class selector, etc. + // + // compound selector: + // One or more simple selectors without a combinator. div.example is + // compound, div > .example is not. + // + // complex selector: + // One or more compound selectors chained with combinators. + // + // combinator: + // The parts of selectors that express relationships. There are four + // currently - the space (descendant combinator), the greater-than + // bracket (child combinator), the plus sign (next sibling combinator), + // and the tilda (following sibling combinator). + // + // sequence of selectors: + // One or more of the named type of selector chained with commas. + + state.tokenize = state.tokenize || tokenBase; + if (state.tokenize == tokenBase && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (style && typeof style != "string") style = ret(style[0], style[1]); + + // Changing style returned based on context + var context = state.stack[state.stack.length-1]; + if (style == "variable") { + if (type == "variable-definition") state.stack.push("propertyValue"); + return "variable-2"; + } else if (style == "property") { + var word = stream.current().toLowerCase(); + if (context == "propertyValue") { + if (valueKeywords.hasOwnProperty(word)) { + style = "string-2"; + } else if (colorKeywords.hasOwnProperty(word)) { + style = "keyword"; + } else { + style = "variable-2"; + } + } else if (context == "rule") { + if (!propertyKeywords.hasOwnProperty(word)) { + style += " error"; + } + } else if (context == "block") { + // if a value is present in both property, value, or color, the order + // of preference is property -> color -> value + if (propertyKeywords.hasOwnProperty(word)) { + style = "property"; + } else if (colorKeywords.hasOwnProperty(word)) { + style = "keyword"; + } else if (valueKeywords.hasOwnProperty(word)) { + style = "string-2"; + } else { + style = "tag"; + } + } else if (!context || context == "@media{") { + style = "tag"; + } else if (context == "@media") { + if (atMediaTypes[stream.current()]) { + style = "attribute"; // Known attribute + } else if (/^(only|not)$/.test(word)) { + style = "keyword"; + } else if (word == "and") { + style = "error"; // "and" is only allowed in @mediaType + } else if (atMediaFeatures.hasOwnProperty(word)) { + style = "error"; // Known property, should be in @mediaType( + } else { + // Unknown, expecting keyword or attribute, assuming attribute + style = "attribute error"; + } + } else if (context == "@mediaType") { + if (atMediaTypes.hasOwnProperty(word)) { + style = "attribute"; + } else if (word == "and") { + style = "operator"; + } else if (/^(only|not)$/.test(word)) { + style = "error"; // Only allowed in @media + } else { + // Unknown attribute or property, but expecting property (preceded + // by "and"). Should be in parentheses + style = "error"; + } + } else if (context == "@mediaType(") { + if (propertyKeywords.hasOwnProperty(word)) { + // do nothing, remains "property" + } else if (atMediaTypes.hasOwnProperty(word)) { + style = "error"; // Known property, should be in parentheses + } else if (word == "and") { + style = "operator"; + } else if (/^(only|not)$/.test(word)) { + style = "error"; // Only allowed in @media + } else { + style += " error"; + } + } else if (context == "@import") { + style = "tag"; + } else { + style = "error"; + } + } else if (style == "atom") { + if(!context || context == "@media{" || context == "block") { + style = "builtin"; + } else if (context == "propertyValue") { + if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { + style += " error"; + } + } else { + style = "error"; + } + } else if (context == "@media" && type == "{") { + style = "error"; + } + + // Push/pop context stack + if (type == "{") { + if (context == "@media" || context == "@mediaType") { + state.stack.pop(); + state.stack[state.stack.length-1] = "@media{"; + } + else { + var newContext = allowNested ? "block" : "rule"; + state.stack.push(newContext); + } + } + else if (type == "}") { + var lastState = state.stack[state.stack.length - 1]; + if (lastState == "interpolation") style = "operator"; + state.stack.pop(); + if (context == "propertyValue") state.stack.pop(); + } + else if (type == "interpolation") state.stack.push("interpolation"); + else if (type == "@media") state.stack.push("@media"); + else if (type == "@import") state.stack.push("@import"); + else if (context == "@media" && /\b(keyword|attribute)\b/.test(style)) + state.stack.push("@mediaType"); + else if (context == "@mediaType" && stream.current() == ",") state.stack.pop(); + else if (context == "@mediaType" && type == "(") state.stack.push("@mediaType("); + else if (context == "@mediaType(" && type == ")") state.stack.pop(); + else if ((context == "rule" || context == "block") && type == ":") state.stack.push("propertyValue"); + else if (context == "propertyValue" && type == ";") state.stack.pop(); + else if (context == "@import" && type == ";") state.stack.pop(); + return style; + }, + + indent: function(state, textAfter) { + var n = state.stack.length; + if (/^\}/.test(textAfter)) + n -= state.stack[state.stack.length-1] == "propertyValue" ? 2 : 1; + return state.baseIndent + n * indentUnit; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/" + }; +}); + +(function() { + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i]] = true; + } + return keys; + } + + var atMediaTypes = keySet([ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ]); + + var atMediaFeatures = keySet([ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid" + ]); + + var propertyKeywords = keySet([ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-iteration-count", + "animation-name", "animation-play-state", "animation-timing-function", + "appearance", "azimuth", "backface-visibility", "background", + "background-attachment", "background-clip", "background-color", + "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "font", "font-feature-settings", "font-family", + "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid-cell", "grid-column", "grid-column-align", + "grid-column-sizing", "grid-column-span", "grid-columns", "grid-flow", + "grid-row", "grid-row-align", "grid-row-sizing", "grid-row-span", + "grid-rows", "grid-template", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marker-offset", "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "rendering-intent", + "resize", "rest", "rest-after", "rest-before", "richness", "right", + "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-shadow", + "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "word-break", + "word-spacing", "word-wrap", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", "color-profile", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "kerning", "text-anchor", "writing-mode" + ]); + + var colorKeywords = keySet([ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", + "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ]); + + var valueKeywords = keySet([ + "above", "absolute", "activeborder", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background", + "backwards", "baseline", "below", "bidi-override", "binary", "bengali", + "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break-all", "break-word", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "compact", "condensed", "contain", "content", + "content-box", "context-menu", "continuous", "copy", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", + "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted", + "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", + "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer", + "landscape", "lao", "large", "larger", "left", "level", "lighter", + "line-through", "linear", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "malayalam", "match", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "overlay", "overline", "padding", "padding-box", "painted", + "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait", + "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", + "radio", "read-only", "read-write", "read-write-plaintext-only", "relative", + "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", + "ridge", "right", "round", "row-resize", "rtl", "run-in", "running", + "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "single", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", + "sub", "subpixel-antialiased", "super", "sw-resize", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ]); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + atMediaTypes: atMediaTypes, + atMediaFeatures: atMediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + hooks: { + "<": function(stream, state) { + function tokenSGMLComment(stream, state) { + var dashes = 0, ch; + while ((ch = stream.next()) != null) { + if (dashes >= 2 && ch == ">") { + state.tokenize = null; + break; + } + dashes = (ch == "-") ? dashes + 1 : 0; + } + return ["comment", "comment"]; + } + if (stream.eat("!")) { + state.tokenize = tokenSGMLComment; + return tokenSGMLComment(stream, state); + } + }, + "/": function(stream, state) { + if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + return false; + } + }, + name: "css-base" + }); + + CodeMirror.defineMIME("text/x-scss", { + atMediaTypes: atMediaTypes, + atMediaFeatures: atMediaFeatures, + propertyKeywords: propertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + allowNested: true, + hooks: { + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.peek() == ":") { + return ["variable", "variable-definition"]; + } + return ["variable", "variable"]; + }, + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "#": function(stream) { + if (stream.eat("{")) { + return ["operator", "interpolation"]; + } else { + stream.eatWhile(/[\w\\\-]/); + return ["atom", "hash"]; + } + } + }, + name: "css-base" + }); +})(); diff --git a/smartsnippets/static/admin/js/codemirror/htmlmixed.js b/smartsnippets/static/admin/js/codemirror/htmlmixed.js new file mode 100644 index 0000000..ec0c21d --- /dev/null +++ b/smartsnippets/static/admin/js/codemirror/htmlmixed.js @@ -0,0 +1,104 @@ +CodeMirror.defineMode("htmlmixed", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true}); + var cssMode = CodeMirror.getMode(config, "css"); + + var scriptTypes = [], scriptTypesConf = parserConfig && parserConfig.scriptTypes; + scriptTypes.push({matches: /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, + mode: CodeMirror.getMode(config, "javascript")}); + if (scriptTypesConf) for (var i = 0; i < scriptTypesConf.length; ++i) { + var conf = scriptTypesConf[i]; + scriptTypes.push({matches: conf.matches, mode: conf.mode && CodeMirror.getMode(config, conf.mode)}); + } + scriptTypes.push({matches: /./, + mode: CodeMirror.getMode(config, "text/plain")}); + + function html(stream, state) { + var tagName = state.htmlState.tagName; + var style = htmlMode.token(stream, state.htmlState); + if (tagName == "script" && /\btag\b/.test(style) && stream.current() == ">") { + // Script block: mode to change to depends on type attribute + var scriptType = stream.string.slice(Math.max(0, stream.pos - 100), stream.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i); + scriptType = scriptType ? scriptType[1] : ""; + if (scriptType && /[\"\']/.test(scriptType.charAt(0))) scriptType = scriptType.slice(1, scriptType.length - 1); + for (var i = 0; i < scriptTypes.length; ++i) { + var tp = scriptTypes[i]; + if (typeof tp.matches == "string" ? scriptType == tp.matches : tp.matches.test(scriptType)) { + if (tp.mode) { + state.token = script; + state.localMode = tp.mode; + state.localState = tp.mode.startState && tp.mode.startState(htmlMode.indent(state.htmlState, "")); + } + break; + } + } + } else if (tagName == "style" && /\btag\b/.test(style) && stream.current() == ">") { + state.token = css; + state.localMode = cssMode; + state.localState = cssMode.startState(htmlMode.indent(state.htmlState, "")); + } + return style; + } + function maybeBackup(stream, pat, style) { + var cur = stream.current(); + var close = cur.search(pat), m; + if (close > -1) stream.backUp(cur.length - close); + else if (m = cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur[0]); + } + return style; + } + function script(stream, state) { + if (stream.match(/^<\/\s*script\s*>/i, false)) { + state.token = html; + state.localState = state.localMode = null; + return html(stream, state); + } + return maybeBackup(stream, /<\/\s*script\s*>/, + state.localMode.token(stream, state.localState)); + } + function css(stream, state) { + if (stream.match(/^<\/\s*style\s*>/i, false)) { + state.token = html; + state.localState = state.localMode = null; + return html(stream, state); + } + return maybeBackup(stream, /<\/\s*style\s*>/, + cssMode.token(stream, state.localState)); + } + + return { + startState: function() { + var state = htmlMode.startState(); + return {token: html, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function(state) { + if (state.localState) + var local = CodeMirror.copyState(state.localMode, state.localState); + return {token: state.token, localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function(stream, state) { + return state.token(stream, state); + }, + + indent: function(state, textAfter) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter); + else + return CodeMirror.Pass; + }, + + electricChars: "/{}:", + + innerMode: function(state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; +}, "xml", "javascript", "css"); + +CodeMirror.defineMIME("text/html", "htmlmixed"); diff --git a/smartsnippets/static/admin/js/codemirror/javascript.js b/smartsnippets/static/admin/js/codemirror/javascript.js new file mode 100644 index 0000000..fabe1c4 --- /dev/null +++ b/smartsnippets/static/admin/js/codemirror/javascript.js @@ -0,0 +1,471 @@ +// TODO actually recognize syntax of TypeScript constructs + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var jsonMode = parserConfig.json; + var isTS = parserConfig.typescript; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + var jsKeywords = { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, + "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this") + }; + + // Extend the 'normal' keywords with the TypeScript language extensions + if (isTS) { + var type = {type: "variable", style: "variable-3"}; + var tsKeywords = { + // object-like things + "interface": kw("interface"), + "class": kw("class"), + "extends": kw("extends"), + "constructor": kw("constructor"), + + // scope modifiers + "public": kw("public"), + "private": kw("private"), + "protected": kw("protected"), + "static": kw("static"), + + "super": kw("super"), + + // types + "string": type, "number": type, "bool": type, "any": type + }; + + for (var attr in tsKeywords) { + jsKeywords[attr] = tsKeywords[attr]; + } + } + + return jsKeywords; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^]/; + + function chain(stream, state, f) { + state.tokenize = f; + return f(stream, state); + } + + function nextUntilUnescaped(stream, end) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (next == end && !escaped) + return false; + escaped = !escaped && next == "\\"; + } + return escaped; + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + + function jsTokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") + return chain(stream, state, jsTokenString(ch)); + else if (/[\[\]{}\(\),;\:\.]/.test(ch)) + return ret(ch); + else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } + else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } + else if (ch == "/") { + if (stream.eat("*")) { + return chain(stream, state, jsTokenComment); + } + else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } + else if (state.lastType == "operator" || state.lastType == "keyword c" || + /^[\[{}\(,;:]$/.test(state.lastType)) { + nextUntilUnescaped(stream, "/"); + stream.eatWhile(/[gimy]/); // 'y' is "sticky" option in Mozilla + return ret("regexp", "string-2"); + } + else { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + } + else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } + else if (isOperatorChar.test(ch)) { + stream.eatWhile(isOperatorChar); + return ret("operator", null, stream.current()); + } + else { + stream.eatWhile(/[\w\$_]/); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.lastType != ".") ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + + function jsTokenString(quote) { + return function(stream, state) { + if (!nextUntilUnescaped(stream, quote)) + state.tokenize = jsTokenBase; + return ret("string", "string"); + }; + } + + function jsTokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = jsTokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } + var state = cx.state; + if (state.context) { + cx.marked = "def"; + if (inList(state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: {name: "arguments"}}; + function pushcontext() { + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + cx.state.localVars = defaultVars; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state; + state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + return function(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(arguments.callee); + }; + } + + function statement(type) { + if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), block, poplex); + if (type == ";") return cont(); + if (type == "if") return cont(pushlex("form"), expression, statement, poplex, maybeelse(cx.state.indented)); + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), + poplex, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + return expressionInner(type, maybeoperatorComma); + } + function expressionNoComma(type) { + return expressionInner(type, maybeoperatorNoComma); + } + function expressionInner(type, maybeop) { + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef); + if (type == "keyword c") return cont(maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator") return cont(expression); + if (type == "[") return cont(pushlex("]"), commasep(expressionNoComma, "]"), poplex, maybeop); + if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeop); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return pass(); + return maybeoperatorNoComma(type, value, maybeoperatorComma); + } + function maybeoperatorNoComma(type, value, me) { + if (!me) me = maybeoperatorNoComma; + if (type == "operator") { + if (/\+\+|--/.test(value)) return cont(me); + if (value == "?") return cont(expression, expect(":"), expression); + return cont(expression); + } + if (type == ";") return; + if (type == "(") return cont(pushlex(")", "call"), commasep(expressionNoComma, ")"), poplex, me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, me); + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "variable") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + } else if (type == "number" || type == "string") { + cx.marked = type + " property"; + } + if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expressionNoComma); + } + function getterSetter(type) { + if (type == ":") return cont(expression); + if (type != "variable") return cont(expect(":"), expression); + cx.marked = "property"; + return cont(functiondef); + } + function commasep(what, end) { + function proceed(type) { + if (type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(what, proceed); + } + if (type == end) return cont(); + return cont(expect(end)); + } + return function(type) { + if (type == end) return cont(); + else return pass(what, proceed); + }; + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type) { + if (type == ":") return cont(typedef); + return pass(); + } + function typedef(type) { + if (type == "variable"){cx.marked = "variable-3"; return cont();} + return pass(); + } + function vardef1(type, value) { + if (type == "variable") { + register(value); + return isTS ? cont(maybetype, vardef2) : cont(vardef2); + } + return pass(); + } + function vardef2(type, value) { + if (value == "=") return cont(expressionNoComma, vardef2); + if (type == ",") return cont(vardef1); + } + function maybeelse(indent) { + return function(type, value) { + if (type == "keyword b" && value == "else") { + cx.state.lexical = new JSLexical(indent, 0, "form", null, cx.state.lexical); + return cont(statement, poplex); + } + return pass(); + }; + } + function forspec1(type) { + if (type == "var") return cont(vardef1, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybein); + return pass(expression, expect(";"), forspec2); + } + function formaybein(_type, value) { + if (value == "in") return cont(expression); + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in") return cont(expression); + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, statement, popcontext); + } + function funarg(type, value) { + if (type == "variable") {register(value); return isTS ? cont(maybetype) : cont();} + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: jsTokenBase, + lastType: null, + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + globalVars: parserConfig.globalVars, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: 0 + }; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + } + if (state.tokenize != jsTokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == jsTokenComment) return CodeMirror.Pass; + if (state.tokenize != jsTokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; + if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + if (parserConfig.statementIndent != null) { + if (type == ")" && lexical.prev && lexical.prev.type == "stat") lexical = lexical.prev; + if (lexical.type == "stat") return lexical.indented + parserConfig.statementIndent; + } + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? 4 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? indentUnit : 0); + else if (lexical.info == "switch" && !closing) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricChars: ":{}", + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + lineComment: jsonMode ? null : "//", + + jsonMode: jsonMode + }; +}); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); diff --git a/smartsnippets/static/admin/js/codemirror/xml.js b/smartsnippets/static/admin/js/codemirror/xml.js new file mode 100644 index 0000000..b04248c --- /dev/null +++ b/smartsnippets/static/admin/js/codemirror/xml.js @@ -0,0 +1,330 @@ +CodeMirror.defineMode("xml", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1; + + var Kludges = parserConfig.htmlMode ? { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true + } : { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false + }; + var alignCDATA = parserConfig.alignCDATA; + + // Return variables for tokenizers + var tagName, type; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } + else if (stream.match("--")) return chain(inBlock("comment", "-->")); + else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } + else return null; + } + else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } + else { + var isClose = stream.eat("/"); + tagName = ""; + var c; + while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; + if (!tagName) return "error"; + type = isClose ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag"; + } + } + else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } + else { + stream.eatWhile(/[^&<]/); + return null; + } + } + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag"; + } + else if (ch == "=") { + type = "equals"; + return null; + } + else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + return state.tokenize(stream, state); + } + else { + stream.eatWhile(/[^\s\u00a0=<>\"\']/); + return "word"; + } + } + + function inAttribute(quote) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + }; + } + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + var curState, curStream, setStyle; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + + function pushContext(tagName, startOfLine) { + var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent); + curState.context = { + prev: curState.context, + tagName: tagName, + indent: curState.indented, + startOfLine: startOfLine, + noIndent: noIndent + }; + } + function popContext() { + if (curState.context) curState.context = curState.context.prev; + } + + function element(type) { + if (type == "openTag") { + curState.tagName = tagName; + curState.tagStart = curStream.column(); + return cont(attributes, endtag(curState.startOfLine)); + } else if (type == "closeTag") { + var err = false; + if (curState.context) { + if (curState.context.tagName != tagName) { + if (Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())) { + popContext(); + } + err = !curState.context || curState.context.tagName != tagName; + } + } else { + err = true; + } + if (err) setStyle = "error"; + return cont(endclosetag(err)); + } + return cont(); + } + function endtag(startOfLine) { + return function(type) { + var tagName = curState.tagName; + curState.tagName = curState.tagStart = null; + if (type == "selfcloseTag" || + (type == "endTag" && Kludges.autoSelfClosers.hasOwnProperty(tagName.toLowerCase()))) { + maybePopContext(tagName.toLowerCase()); + return cont(); + } + if (type == "endTag") { + maybePopContext(tagName.toLowerCase()); + pushContext(tagName, startOfLine); + return cont(); + } + return cont(); + }; + } + function endclosetag(err) { + return function(type) { + if (err) setStyle = "error"; + if (type == "endTag") { popContext(); return cont(); } + setStyle = "error"; + return cont(arguments.callee); + }; + } + function maybePopContext(nextTagName) { + var parentTagName; + while (true) { + if (!curState.context) { + return; + } + parentTagName = curState.context.tagName.toLowerCase(); + if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) || + !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(); + } + } + + function attributes(type) { + if (type == "word") {setStyle = "attribute"; return cont(attribute, attributes);} + if (type == "endTag" || type == "selfcloseTag") return pass(); + setStyle = "error"; + return cont(attributes); + } + function attribute(type) { + if (type == "equals") return cont(attvalue, attributes); + if (!Kludges.allowMissing) setStyle = "error"; + else if (type == "word") setStyle = "attribute"; + return (type == "endTag" || type == "selfcloseTag") ? pass() : cont(); + } + function attvalue(type) { + if (type == "string") return cont(attvaluemaybe); + if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return cont();} + setStyle = "error"; + return (type == "endTag" || type == "selfCloseTag") ? pass() : cont(); + } + function attvaluemaybe(type) { + if (type == "string") return cont(attvaluemaybe); + else return pass(); + } + + return { + startState: function() { + return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, tagStart: null, context: null}; + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) { + state.startOfLine = true; + state.indented = stream.indentation(); + } + if (stream.eatSpace()) return null; + + setStyle = type = tagName = null; + var style = state.tokenize(stream, state); + state.type = type; + if ((style || type) && style != "comment") { + curState = state; curStream = stream; + while (true) { + var comb = state.cc.pop() || element; + if (comb(type || style)) break; + } + } + state.startOfLine = false; + return setStyle || style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + if ((state.tokenize != inTag && state.tokenize != inText) || + context && context.noIndent) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + if (state.tagName) return state.tagStart + indentUnit * multilineTagIndentFactor; + if (alignCDATA && /", + + configuration: parserConfig.htmlMode ? "html" : "xml" + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); diff --git a/smartsnippets/static/admin/js/custom.js b/smartsnippets/static/admin/js/custom.js new file mode 100644 index 0000000..c6de327 --- /dev/null +++ b/smartsnippets/static/admin/js/custom.js @@ -0,0 +1,3 @@ +(function($) { + window.hasAceTheme = true; +})(jQuery || django.jQuery); \ No newline at end of file diff --git a/smartsnippets/static/admin/js/default.jQuery.init.js b/smartsnippets/static/admin/js/default.jQuery.init.js new file mode 100644 index 0000000..50d9d4b --- /dev/null +++ b/smartsnippets/static/admin/js/default.jQuery.init.js @@ -0,0 +1 @@ +jQuery = jQuery || django.jQuery; diff --git a/smartsnippets/static/admin/js/snippet_plugin_default.js b/smartsnippets/static/admin/js/snippet_plugin_default.js new file mode 100644 index 0000000..d26c1f7 --- /dev/null +++ b/smartsnippets/static/admin/js/snippet_plugin_default.js @@ -0,0 +1,5 @@ +(function($) { + $(document).ready(function(){ + $(".plugin-help-tooltip").tipTip({maxWidth: "250px", delay: 100}); + }); +})(jQuery || django.jQuery); diff --git a/smartsnippets/static/css/tipTip.css b/smartsnippets/static/css/tipTip.css new file mode 100644 index 0000000..4fb95d3 --- /dev/null +++ b/smartsnippets/static/css/tipTip.css @@ -0,0 +1,113 @@ +/* TipTip CSS - Version 1.2 */ + +#tiptip_holder { + display: none; + position: absolute; + top: 0; + left: 0; + z-index: 99999; +} + +#tiptip_holder.tip_top { + padding-bottom: 5px; +} + +#tiptip_holder.tip_bottom { + padding-top: 5px; +} + +#tiptip_holder.tip_right { + padding-left: 5px; +} + +#tiptip_holder.tip_left { + padding-right: 5px; +} + +#tiptip_content { + font-size: 11px; + color: #fff; + text-shadow: 0 0 2px #000; + padding: 4px 8px; + border: 1px solid rgba(255,255,255,0.25); + background-color: rgb(25,25,25); + background-color: rgba(25,25,25,0.92); + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000)); + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + box-shadow: 0 0 3px #555; + -webkit-box-shadow: 0 0 3px #555; + -moz-box-shadow: 0 0 3px #555; +} + +#tiptip_arrow, #tiptip_arrow_inner { + position: absolute; + border-color: transparent; + border-style: solid; + border-width: 6px; + height: 0; + width: 0; +} + +#tiptip_holder.tip_top #tiptip_arrow { + border-top-color: #fff; + border-top-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_bottom #tiptip_arrow { + border-bottom-color: #fff; + border-bottom-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_right #tiptip_arrow { + border-right-color: #fff; + border-right-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_left #tiptip_arrow { + border-left-color: #fff; + border-left-color: rgba(255,255,255,0.35); +} + +#tiptip_holder.tip_top #tiptip_arrow_inner { + margin-top: -7px; + margin-left: -6px; + border-top-color: rgb(25,25,25); + border-top-color: rgba(25,25,25,0.92); +} + +#tiptip_holder.tip_bottom #tiptip_arrow_inner { + margin-top: -5px; + margin-left: -6px; + border-bottom-color: rgb(25,25,25); + border-bottom-color: rgba(25,25,25,0.92); +} + +#tiptip_holder.tip_right #tiptip_arrow_inner { + margin-top: -6px; + margin-left: -5px; + border-right-color: rgb(25,25,25); + border-right-color: rgba(25,25,25,0.92); +} + +#tiptip_holder.tip_left #tiptip_arrow_inner { + margin-top: -6px; + margin-left: -7px; + border-left-color: rgb(25,25,25); + border-left-color: rgba(25,25,25,0.92); +} + +/* Webkit Hacks */ +@media screen and (-webkit-min-device-pixel-ratio:0) { + #tiptip_content { + padding: 4px 8px 5px 8px; + background-color: rgba(45,45,45,0.88); + } + #tiptip_holder.tip_bottom #tiptip_arrow_inner { + border-bottom-color: rgba(45,45,45,0.88); + } + #tiptip_holder.tip_top #tiptip_arrow_inner { + border-top-color: rgba(20,20,20,0.92); + } +} \ No newline at end of file diff --git a/smartsnippets/static/images/drag.gif b/smartsnippets/static/images/drag.gif new file mode 100644 index 0000000..daf29b7 Binary files /dev/null and b/smartsnippets/static/images/drag.gif differ diff --git a/smartsnippets/static/images/help.png b/smartsnippets/static/images/help.png new file mode 100644 index 0000000..3cbe60e Binary files /dev/null and b/smartsnippets/static/images/help.png differ diff --git a/smartsnippets/static/images/snippet.png b/smartsnippets/static/images/snippet.png new file mode 100644 index 0000000..feb7201 Binary files /dev/null and b/smartsnippets/static/images/snippet.png differ diff --git a/smartsnippets/static/js/jquery.tipTip.minified.js b/smartsnippets/static/js/jquery.tipTip.minified.js new file mode 100644 index 0000000..cdf3a89 --- /dev/null +++ b/smartsnippets/static/js/jquery.tipTip.minified.js @@ -0,0 +1,21 @@ + /* + * TipTip + * Copyright 2010 Drew Wilson + * www.drewwilson.com + * code.drewwilson.com/entry/tiptip-jquery-plugin + * + * Version 1.3 - Updated: Mar. 23, 2010 + * + * This Plug-In will create a custom tooltip to replace the default + * browser tooltip. It is extremely lightweight and very smart in + * that it detects the edges of the browser window and will make sure + * the tooltip stays within the current window size. As a result the + * tooltip will adjust itself to be displayed above, below, to the left + * or to the right depending on what is necessary to stay within the + * browser window. It is completely customizable as well via CSS. + * + * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +(function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('
');var tiptip_content=$('
');var tiptip_arrow=$('
');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('
')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content}else{var org_title=org_elem.attr(opts.attribute)}if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute)}var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip()},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip()}).blur(function(){deactive_tiptip()})}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else if(opts.defaultPosition=="top"){t_class="_top"}else if(opts.defaultPosition=="left"){t_class="_left"}else if(opts.defaultPosition=="right"){t_class="_right"}var right_compare=(w_compare+left)parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay)}function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut)}}})}})(jQuery); \ No newline at end of file diff --git a/smartsnippets/static/libs/ace/css/ace.min.css b/smartsnippets/static/libs/ace/css/ace.min.css new file mode 100644 index 0000000..8e14cdf --- /dev/null +++ b/smartsnippets/static/libs/ace/css/ace.min.css @@ -0,0 +1,2 @@ +/* Ace theme v1.3.1 */ +html{min-height:100%;position:relative}body{background-color:#e4e6e9;min-height:100%;padding-bottom:0;font-family:'Open Sans';font-size:13px;color:#393939;line-height:1.5}.main-container:before{display:block;content:"";position:absolute;z-index:-2;width:100%;max-width:inherit;bottom:0;top:0;background-color:#FFF}.main-container.container,.rtl .main-container.container{padding-left:0;padding-right:0}.main-container.container:before{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);width:inherit}@media (max-width:767px){.main-container.container:before{-webkit-box-shadow:none;box-shadow:none;width:100%}}.main-content{margin-left:0;min-height:100%;padding:0}.sidebar+.main-content{margin-left:190px}.page-content{background-color:#fff;position:relative;margin:0;padding:8px 20px 24px}.page-header{margin:0 0 12px;border-bottom:1px dotted #e2e2e2;padding-bottom:16px;padding-top:7px}.page-header h1{padding:0;margin:0 8px;font-size:24px;font-weight:lighter;color:#2679b5}.page-header h1 small{margin:0 6px;font-size:14px;font-weight:400;color:#8089a0}.ace-icon{text-align:center}a:active,a:focus{text-decoration:none}h1{font-size:32px;font-weight:400;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}h1.smaller{font-size:31px}h1.bigger{font-size:33px}h1.block{margin-bottom:16px}h2{font-size:26px;font-weight:400;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}h2.smaller{font-size:25px}h2.bigger{font-size:27px}h2.block{margin-bottom:16px}h3{font-size:22px;font-weight:400;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}h3.smaller{font-size:21px}h3.bigger{font-size:23px}h3.block{margin-bottom:16px}h4{font-size:18px;font-weight:400;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}h4.smaller{font-size:17px}h4.bigger{font-size:19px}h4.block{margin-bottom:16px}h5{font-size:15px;font-weight:400;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}h5.smaller{font-size:14px}h5.bigger{font-size:16px}h5.block{margin-bottom:16px}h6{font-size:13px;font-weight:400;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}h6.smaller{font-size:12px}h6.bigger{font-size:14px}h6.block{margin-bottom:16px}ol,ul{margin:0 0 10px 25px;padding:0}ol.margin-5,ul.margin-5{margin-left:5px}ol.margin-10,ul.margin-10{margin-left:10px}ol.margin-15,ul.margin-15{margin-left:15px}ol.margin-20,ul.margin-20{margin-left:20px}li>ol,li>ul{margin-left:18px}.list-inline,.list-unstyled{margin-left:0}.list-inline>li>.ace-icon:first-child,.list-unstyled>li>.ace-icon:first-child{width:18px;text-align:center}.spaced>li{margin-top:9px;margin-bottom:9px}.spaced2>li{margin-top:15px;margin-bottom:15px}li.divider{margin-top:3px;margin-bottom:3px;height:0;font-size:0}.spaced>li.divider{margin-top:5px;margin-bottom:5px}.spaced2>li.divider{margin-top:8px;margin-bottom:8px}li.divider:before{content:"";display:inline-block}.blockquote-reverse,blockquote,blockquote.pull-right{border-color:#e5eaf1}pre.prettyprint{white-space:pre-wrap}.modal-content{border-radius:0;-webkit-box-shadow:none;box-shadow:none}.modal-footer{padding-top:12px;padding-bottom:14px;border-top-color:#e4e9ee;-webkit-box-shadow:none;box-shadow:none;background-color:#eff3f8}.modal-header .close{font-size:32px}.well{border-radius:0}.well h1,.well h2,.well h3,.well h4,.well h5,.well h6{margin-top:0}.well h1,.well h2,.well h3{line-height:36px}.alert{font-size:14px;border-radius:0}.alert .close{font-size:16px}.alert-block p+p{margin-top:10px}.pager>li>span,.pagination>li>span{border-width:1px;border-radius:0!important}.pager>li>a,.pagination>li>a{border-width:1px;border-color:#d4dfe3;border-radius:0!important;color:#2283c5;background-color:#fafafa;margin:0 -1px 0 0;position:relative;z-index:auto}.pager>li>a:hover,.pagination>li>a:hover{color:#1c6ca2;background-color:#eaeff2;border-color:#c1d1d7;z-index:1}.pager>li>a:focus,.pagination>li>a:focus{background-color:#eaeef2}.pager>li.disabled>a,.pager>li.disabled>a:hover,.pagination>li.disabled>a,.pagination>li.disabled>a:hover{background-color:#f9f9f9;border-color:#d9d9d9;z-index:auto}.pagination>li.active>a,.pagination>li.active>a:hover{background-color:#6faed9;border-color:#6faed9;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);z-index:2}.list-group-item{border-radius:0!important}.lighter{font-weight:lighter}.bolder{font-weight:bolder}.inline{display:inline-block!important}.block{display:block!important}.align-center,.center{text-align:center!important}.align-left{text-align:left!important}.align-right{text-align:right!important}.middle{vertical-align:middle}.align-middle{vertical-align:middle!important}.align-top{vertical-align:top!important}.align-bottom{vertical-align:bottom!important}.pos-rel,.position-relative{position:relative}.pos-abs,.position-absolute{position:absolute}.no-float{float:none!important}.line-height-normal{line-height:normal!important}.line-height-0{line-height:0!important}.line-height-1{line-height:1!important}.line-height-125{line-height:1.25!important}.line-height-150{line-height:1.5!important}.dark{color:#333!important}.white{color:#fff!important}.red{color:#dd5a43!important}.red2{color:#e08374!important}.light-red{color:#f77!important}.blue{color:#478fca!important}.light-blue{color:#93cbf9!important}.green{color:#69aa46!important}.light-green{color:#b0d877!important}.orange{color:#ff892a!important}.orange2{color:#feb902!important}.light-orange{color:#fcac6f!important}.purple{color:#a069c3!important}.pink{color:#c6699f!important}.pink2{color:#d6487e!important}.brown{color:brown!important}.grey{color:#777!important}.light-grey{color:#bbb!important}.bigger-110{font-size:110%!important}.bigger-120{font-size:120%!important}.bigger-130{font-size:130%!important}.bigger-140{font-size:140%!important}.bigger-150{font-size:150%!important}.bigger-160{font-size:160%!important}.bigger-170{font-size:170%!important}.bigger-180{font-size:180%!important}.bigger-190{font-size:190%!important}.bigger-200{font-size:200%!important}.bigger-210{font-size:210%!important}.bigger-220{font-size:220%!important}.bigger-230{font-size:230%!important}.bigger-240{font-size:240%!important}.bigger-250{font-size:250%!important}.bigger-260{font-size:260%!important}.bigger-270{font-size:270%!important}.bigger-280{font-size:280%!important}.bigger-290{font-size:290%!important}.bigger-300{font-size:300%!important}.bigger-115{font-size:115%!important}.bigger-125{font-size:125%!important}.bigger-175{font-size:175%!important}.bigger-225{font-size:225%!important}.bigger-275{font-size:275%!important}.smaller-90{font-size:90%!important}.smaller-80{font-size:80%!important}.smaller-70{font-size:70%!important}.smaller-60{font-size:60%!important}.smaller-50{font-size:50%!important}.smaller-40{font-size:40%!important}.smaller-30{font-size:30%!important}.smaller-20{font-size:20%!important}.smaller-75{font-size:75%!important}.width-20{width:20%!important}.width-30{width:30%!important}.width-35{width:35%!important}.width-40{width:40%!important}.width-45{width:45%!important}.width-50{width:50%!important}.width-55{width:55%!important}.width-60{width:60%!important}.width-65{width:65%!important}.width-70{width:70%!important}.width-80{width:80%!important}.width-85{width:85%!important}.width-90{width:90%!important}.width-95{width:95%!important}.width-100{width:100%!important}.width-75{width:75%!important}.width-25{width:25%!important}.width-auto{width:auto!important}.height-auto{height:auto!important}.no-padding{padding:0!important}.no-padding-bottom{padding-bottom:0!important}.no-padding-top{padding-top:0!important}.no-padding-left{padding-left:0!important}.no-padding-right{padding-right:0!important}.no-margin{margin:0!important}.no-margin-bottom{margin-bottom:0!important}.no-margin-top{margin-top:0!important}.no-margin-left{margin-left:0!important}.no-margin-right{margin-right:0!important}.no-border{border-width:0}.no-border-bottom{border-bottom-width:0}.no-border-top{border-top-width:0}.no-border-left{border-left-width:0}.no-border-right{border-right-width:0}.no-radius{border-radius:0!important}.no-text-shadow{text-shadow:none!important}.hr{display:block;height:0;overflow:hidden;font-size:0;border-width:1px 0 0;border-top:1px solid #E3E3E3;margin:12px 0;border-top-color:rgba(0,0,0,.11)}.hr-double{height:3px;border-top:1px solid #E3E3E3;border-bottom:1px solid #E3E3E3;border-top-color:rgba(0,0,0,.11);border-bottom-color:rgba(0,0,0,.11)}.hr-dotted,.hr.dotted{border-style:dotted}.hr-32,.hr32{margin:32px 0}.hr-30,.hr30{margin:30px 0}.hr-28,.hr28{margin:28px 0}.hr-26,.hr26{margin:26px 0}.hr-24,.hr24{margin:24px 0}.hr-22,.hr22{margin:22px 0}.hr-20,.hr20{margin:20px 0}.hr-18,.hr18{margin:18px 0}.hr-16,.hr16{margin:16px 0}.hr-14,.hr14{margin:14px 0}.hr-12,.hr12{margin:12px 0}.hr-10,.hr10{margin:10px 0}.hr-8,.hr8{margin:8px 0}.hr-6,.hr6{margin:6px 0}.hr-4,.hr4{margin:4px 0}.hr-2,.hr2{margin:2px 0}.space{max-height:1px;min-height:1px;overflow:hidden;margin:12px 0}[class*=vspace-]{display:none}.space-32,[class*=vspace-32]{max-height:1px;min-height:1px;overflow:hidden;margin:32px 0 31px}.space-30,[class*=vspace-30]{max-height:1px;min-height:1px;overflow:hidden;margin:30px 0 29px}.space-28,[class*=vspace-28]{max-height:1px;min-height:1px;overflow:hidden;margin:28px 0 27px}.space-26,[class*=vspace-26]{max-height:1px;min-height:1px;overflow:hidden;margin:26px 0 25px}.space-24,[class*=vspace-24]{max-height:1px;min-height:1px;overflow:hidden;margin:24px 0 23px}.space-22,[class*=vspace-22]{max-height:1px;min-height:1px;overflow:hidden;margin:22px 0 21px}.space-20,[class*=vspace-20]{max-height:1px;min-height:1px;overflow:hidden;margin:20px 0 19px}.space-18,[class*=vspace-18]{max-height:1px;min-height:1px;overflow:hidden;margin:18px 0 17px}.space-16,[class*=vspace-16]{max-height:1px;min-height:1px;overflow:hidden;margin:16px 0 15px}.space-14,[class*=vspace-14]{max-height:1px;min-height:1px;overflow:hidden;margin:14px 0 13px}.space-12,[class*=vspace-12]{max-height:1px;min-height:1px;overflow:hidden;margin:12px 0 11px}.space-10,[class*=vspace-10]{max-height:1px;min-height:1px;overflow:hidden;margin:10px 0 9px}.space-8,[class*=vspace-8]{max-height:1px;min-height:1px;overflow:hidden;margin:8px 0 7px}.space-6,[class*=vspace-6]{max-height:1px;min-height:1px;overflow:hidden;margin:6px 0 5px}.space-4,[class*=vspace-4]{max-height:1px;min-height:1px;overflow:hidden;margin:4px 0 3px}.space-2,[class*=vspace-2]{max-height:1px;min-height:1px;overflow:hidden;margin:2px 0 1px}.space-0,[class*=vspace-0]{max-height:1px;min-height:1px;overflow:hidden;margin:0}@media only screen and (max-width:479px){[class*=vspace-][class*="-xs"]{display:block}}@media only screen and (max-width:767px){[class*=vspace-][class*="-sm"]{display:block}}@media only screen and (max-width:991px){[class*=vspace-][class*="-md"]{display:block}}@media only screen and (max-width:1199px){[class*=vspace-][class*="-lg"]{display:block}}.header{line-height:28px;margin-bottom:16px;margin-top:18px;padding-bottom:4px;border-bottom:1px solid #CCC}.header.blue{border-bottom-color:#d5e3ef}.header.green{border-bottom-color:#cce2c1}.header.purple{border-bottom-color:#e0d1ea}.header.orange{border-bottom-color:#fdd0ac}.header.orange2{border-bottom-color:#fbd36b}.header.red{border-bottom-color:#f3cdc6}.header.grey{border-bottom-color:#c3c3c3}.header.pink{border-bottom-color:#f2e0eb}.header.pink2{border-bottom-color:#e69eb9}.header.light-blue{border-bottom-color:#dceefc}.header.light-red{border-bottom-color:#fec5c5}.header.light-green{border-bottom-color:#d2e7b5}.header.brown{border-bottom-color:#df9393}.header>.ace-icon{margin-right:2px}.action-buttons a{margin:0 3px;display:inline-block;opacity:.85;-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.action-buttons a:hover{text-decoration:none;opacity:1;-moz-transform:scale(1.2);-webkit-transform:scale(1.2);-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.navbar{margin:0;padding-left:0;padding-right:0;border-width:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;min-height:45px;background:#438eb9}.navbar .navbar-link,.navbar .navbar-text{color:#fff}.navbar .navbar-brand{color:#fff;font-size:24px;text-shadow:none;padding-top:10px;padding-bottom:10px;height:auto}.navbar .navbar-brand:focus,.navbar .navbar-brand:hover{color:#fff}@media only screen and (min-width:992px){.navbar-container{padding-left:10px;padding-right:10px}}.navbar-container.container{padding-left:0;padding-right:0}.ace-nav{height:100%;margin:0!important}.ace-nav>li{line-height:45px;height:45px;border-left:1px solid #E1E1E1;padding:0;position:relative;float:left}.ace-nav>li:first-child{border-left-width:0}.ace-nav>li>a{background-color:#2e6589;color:#FFF;display:block;line-height:inherit;text-align:center;height:100%;width:auto;min-width:50px;padding:0 8px;position:relative}.ace-nav>li>a>.ace-icon{display:inline-block;font-size:16px;color:#FFF;text-align:center;width:20px}.ace-nav>li>a>.badge{position:relative;top:-4px;left:2px;padding-right:5px;padding-left:5px}.ace-nav>li.open>a,.ace-nav>li>a:focus,.ace-nav>li>a:hover{background-color:#2c5976;color:#FFF}.ace-nav>li.grey>a{background-color:#555}.ace-nav>li.grey>a:focus,.ace-nav>li.grey>a:hover,.ace-nav>li.open.grey>a{background-color:#4b4b4b}.ace-nav>li.purple>a{background-color:#892e65}.ace-nav>li.open.purple>a,.ace-nav>li.purple>a:focus,.ace-nav>li.purple>a:hover{background-color:#762c59}.ace-nav>li.green>a{background-color:#2e8965}.ace-nav>li.green>a:focus,.ace-nav>li.green>a:hover,.ace-nav>li.open.green>a{background-color:#2c7659}.ace-nav>li.light-blue>a{background-color:#62a8d1}.ace-nav>li.light-blue>a:focus,.ace-nav>li.light-blue>a:hover,.ace-nav>li.open.light-blue>a{background-color:#579ec8}.ace-nav>li.light-blue2>a{background-color:#42a8e1}.ace-nav>li.light-blue2>a:focus,.ace-nav>li.light-blue2>a:hover,.ace-nav>li.open.light-blue2>a{background-color:#359fd9}.ace-nav>li.red>a{background-color:#b74635}.ace-nav>li.open.red>a,.ace-nav>li.red>a:focus,.ace-nav>li.red>a:hover{background-color:#a34335}.ace-nav>li.light-green>a{background-color:#9abc32}.ace-nav>li.light-green>a:focus,.ace-nav>li.light-green>a:hover,.ace-nav>li.open.light-green>a{background-color:#8ba832}.ace-nav>li.light-purple>a{background-color:#cb6fd7}.ace-nav>li.light-purple>a:focus,.ace-nav>li.light-purple>a:hover,.ace-nav>li.open.light-purple>a{background-color:#c263ce}.ace-nav>li.light-orange>a{background-color:#f79263}.ace-nav>li.light-orange>a:focus,.ace-nav>li.light-orange>a:hover,.ace-nav>li.open.light-orange>a{background-color:#f28653}.ace-nav>li.light-pink>a{background-color:#f4dae5}.ace-nav>li.light-pink>a:focus,.ace-nav>li.light-pink>a:hover,.ace-nav>li.open.light-pink>a{background-color:#eeccda}.ace-nav>li.dark>a{background-color:#404040}.ace-nav>li.dark>a:focus,.ace-nav>li.dark>a:hover,.ace-nav>li.open.dark>a{background-color:#363636}.ace-nav>li.white-opaque>a{background-color:rgba(255,255,255,.8)}.ace-nav>li.open.white-opaque>a,.ace-nav>li.white-opaque>a:focus,.ace-nav>li.white-opaque>a:hover{background-color:rgba(245,245,245,.8)}.ace-nav>li.dark-opaque>a,.ace-nav>li.dark-opaque>a:focus,.ace-nav>li.dark-opaque>a:hover,.ace-nav>li.open.dark-opaque>a{background-color:rgba(0,0,0,.2)}.ace-nav>li.transparent>a{background-color:transparent}.ace-nav>li.open.transparent>a,.ace-nav>li.transparent>a:focus,.ace-nav>li.transparent>a:hover{background-color:rgba(0,0,0,.1)}.ace-nav>li.light-10>a{background-color:rgba(255,255,255,.1)}.ace-nav>li.light-10>a:focus,.ace-nav>li.light-10>a:hover,.ace-nav>li.open.light-10>a{background-color:rgba(255,255,255,.2)}.ace-nav>li.dark-10>a{background-color:rgba(0,0,0,.1)}.ace-nav>li.dark-10>a:focus,.ace-nav>li.dark-10>a:hover,.ace-nav>li.open.dark-10>a{background-color:rgba(0,0,0,.2)}.ace-nav>li.margin-4{margin-left:4px}.ace-nav>li.margin-3{margin-left:3px}.ace-nav>li.margin-2{margin-left:2px}.ace-nav>li.margin-1{margin-left:1px}.ace-nav>li.no-border{border-width:0!important}.ace-nav>li .dropdown-menu{z-index:1031}.ace-nav .nav-user-photo{margin:-4px 8px 0 0;border-radius:100%;border:2px solid #FFF;max-width:40px}.ace-nav li.dropdown-footer a .ace-icon{display:inline-block;width:1.25em;text-align:center}@media only screen and (max-width:767px){.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right{right:-100px}.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right:before{right:120px}.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right{right:-80px}.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right:before{right:100px}.user-menu.dropdown-close.dropdown-menu-right{right:0!important}}@media only screen and (min-width:480px) and (max-width:767px){.navbar.navbar-collapse .ace-nav>li:nth-last-child(2):nth-child(1)>.dropdown-menu.dropdown-menu-right,.navbar.navbar-collapse .ace-nav>li:nth-last-child(2):nth-child(2)>.dropdown-menu.dropdown-menu-right{left:auto;right:-60px}.navbar.navbar-collapse .ace-nav>li:nth-last-child(2):nth-child(1)>.dropdown-menu.dropdown-menu-right:after,.navbar.navbar-collapse .ace-nav>li:nth-last-child(2):nth-child(1)>.dropdown-menu.dropdown-menu-right:before,.navbar.navbar-collapse .ace-nav>li:nth-last-child(2):nth-child(2)>.dropdown-menu.dropdown-menu-right:after,.navbar.navbar-collapse .ace-nav>li:nth-last-child(2):nth-child(2)>.dropdown-menu.dropdown-menu-right:before{right:80px;left:auto}}@media only screen and (max-width:480px){.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right{right:-120px}.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right:before{right:140px}.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right{right:-90px}.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right:before{right:110px}.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right{right:-50px}.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right:before{right:70px}}@media only screen and (max-width:479px){.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right{left:-10px;right:auto}.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(4)>.dropdown-menu.dropdown-menu-right:before{right:auto;left:30px}.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right{left:-50px;right:auto}.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(3)>.dropdown-menu.dropdown-menu-right:before{left:75px;right:auto}.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right{left:-70px;right:auto}.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right:before{left:90px;right:auto}}@media only screen and (max-width:319px){.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right{left:-110px;right:auto}.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-last-child(2)>.dropdown-menu.dropdown-menu-right:before{left:130px;right:auto}.ace-nav>li:nth-child(2):nth-last-child(2)>.dropdown-menu.dropdown-menu-right{left:-85px;right:auto}.ace-nav>li:nth-child(2):nth-last-child(2)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-child(2):nth-last-child(2)>.dropdown-menu.dropdown-menu-right:before{left:105px;right:auto}.ace-nav>li:nth-child(1):nth-last-child(3)>.dropdown-menu.dropdown-menu-right{left:-35px;right:auto}.ace-nav>li:nth-child(1):nth-last-child(3)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-child(1):nth-last-child(3)>.dropdown-menu.dropdown-menu-right:before{left:55px;right:auto}.ace-nav>li:nth-child(1):nth-last-child(2)>.dropdown-menu.dropdown-menu-right{left:-60px;right:auto}.ace-nav>li:nth-child(1):nth-last-child(2)>.dropdown-menu.dropdown-menu-right:after,.ace-nav>li:nth-child(1):nth-last-child(2)>.dropdown-menu.dropdown-menu-right:before{left:75px;right:auto}}@media only screen and (max-width:479px){.navbar:not(.navbar-collapse) .navbar-header{float:none!important;display:block}.navbar:not(.navbar-collapse) .ace-nav{display:block;float:none!important;text-align:center;background-color:rgba(0,0,0,.15);border:1px solid rgba(0,0,0,.1);border-width:1px 0 0;letter-spacing:-3px}.navbar:not(.navbar-collapse) .ace-nav>li{display:inline-block;float:none!important;text-align:left;letter-spacing:normal}.navbar:not(.navbar-collapse) .ace-nav>li:first-child{border-left:1px solid rgba(255,255,255,.4)}.navbar:not(.navbar-collapse) .ace-nav>li:last-child{border-right:1px solid rgba(255,255,255,.4)}}@media only screen and (max-width:319px){.ace-nav>li>a{padding:0 5px!important}}.user-menu>li>a{padding:4px 12px}.user-menu>li>a>.ace-icon{margin-right:6px;font-size:120%}.user-info{max-width:100px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;vertical-align:top;line-height:15px;position:relative;top:6px}.user-info small{display:block}@media (min-width:480px) and (max-width:540px),(max-width:360px){.navbar:not(.navbar-collapse) .navbar-buttons .user-menu{padding-top:42px!important}.navbar:not(.navbar-collapse) .navbar-buttons .nav-user-photo{margin-right:0}.navbar:not(.navbar-collapse) .navbar-buttons .user-info{position:absolute!important;margin-top:40px;margin-left:1px;right:2px;z-index:1032;color:#777;font-size:14px;width:156px;max-width:156px;padding-left:8px;padding-right:8px;height:32px;line-height:26px!important;display:none;border-bottom:1px solid #E5E5E5;text-align:center;vertical-align:none;cursor:text}.navbar:not(.navbar-collapse) .navbar-buttons .user-info>small{display:inline;opacity:1}li.open .user-info{display:inline-block!important}}@media (max-width:360px){.navbar.navbar-collapse .navbar-buttons .user-menu{padding-top:42px!important}.navbar.navbar-collapse .navbar-buttons .nav-user-photo{margin-right:0}.navbar.navbar-collapse .navbar-buttons .user-info{position:absolute!important;margin-top:40px;margin-left:1px;right:2px;z-index:1032;color:#777;font-size:14px;width:156px;max-width:156px;padding-left:8px;padding-right:8px;height:32px;line-height:26px!important;display:none;border-bottom:1px solid #E5E5E5;text-align:center;vertical-align:none;cursor:text}.navbar.navbar-collapse .navbar-buttons .user-info>small{display:inline;opacity:1}li.open .user-info{display:inline-block!important;right:2px}}@media (min-width:992px){.user-min .user-menu{padding-top:42px!important}.user-min .nav-user-photo{margin-right:0}.user-min .user-info{position:absolute!important;margin-top:40px;margin-left:1px;z-index:1032;color:#777;font-size:14px;width:156px;max-width:156px;padding-left:8px;padding-right:8px;height:32px;line-height:26px!important;display:none;border-bottom:1px solid #E5E5E5;text-align:center;vertical-align:none;cursor:text}.user-min .user-info>small{display:inline;opacity:1}.user-min .user-info{right:-3px}.user-min.open .user-info{display:inline-block!important}}@media only screen and (max-width:991px){.navbar.navbar-collapse{max-height:none}.navbar .navbar-collapse,.navbar .navbar-header{margin-left:0!important;margin-right:0!important}.navbar.navbar-collapse .navbar-header{float:none!important;min-height:45px}.navbar.navbar-collapse .navbar-buttons{min-height:0;padding-left:0;padding-right:0;border:1px solid rgba(255,255,255,.4);border-width:1px 0 0;width:100%}.navbar.navbar-collapse .navbar-buttons.in{overflow:visible!important}.navbar.navbar-collapse .navbar-buttons>.ace-nav{display:block;float:none!important;text-align:center;background-color:transparent!important;border-width:0;letter-spacing:-3px}.navbar.navbar-collapse .navbar-buttons>.ace-nav>li{display:inline-block;float:none!important;text-align:left;letter-spacing:normal}.navbar.navbar-collapse .navbar-buttons>.ace-nav>li:first-child{border-left:1px solid rgba(255,255,255,.4)}.navbar.navbar-collapse .navbar-buttons>.ace-nav>li:last-child{border-right:1px solid rgba(255,255,255,.4)}}.container-fluid>.navbar-buttons,.container>.navbar-buttons{padding-right:0!important}@media only screen and (max-height:400px){.navbar-fixed-top .navbar-collapse{max-height:280px}}@media only screen and (max-height:360px){.navbar-fixed-top .navbar-collapse{max-height:240px}}@media only screen and (max-height:320px){.navbar-fixed-top .navbar-collapse{max-height:200px}}@media only screen and (max-height:280px){.navbar-fixed-top .navbar-collapse{max-height:160px}}@media only screen and (max-height:240px){.navbar-fixed-top .navbar-collapse{max-height:120px}}.navbar .navbar-nav>li{border:1px solid rgba(0,0,0,.2);border-width:0 1px 0 0}.navbar .navbar-nav>li:first-child{border-width:0 1px}.navbar .navbar-nav>li>a{padding-top:12px;padding-bottom:11px;height:45px;background-color:transparent;font-size:13px;color:#fff;text-shadow:0 1px 0 rgba(0,0,0,.25)}.navbar .navbar-nav>li.open>a,.navbar .navbar-nav>li>a:focus,.navbar .navbar-nav>li>a:hover{background-color:rgba(0,0,0,.1)!important;color:#fff!important}.navbar .navbar-nav>li>.dropdown-menu>li>a{line-height:2}.navbar-nav .dropdown-menu>li>a>.ace-icon{display:inline-block;width:20px}.navbar-nav>li>.dropdown-menu{z-index:1033}@media only screen and (max-width:991px){.navbar.navbar-collapse .navbar-menu{float:none!important;clear:both}.navbar.navbar-collapse .navbar-menu .dropdown-menu:after,.navbar.navbar-collapse .navbar-menu .dropdown-menu:before{display:none!important}.navbar .navbar-nav{margin:0 -6px}.navbar .navbar-nav>li,.navbar .navbar-nav>li:first-child{border-width:1px 0 0}.navbar .navbar-nav .dropdown-menu{float:none;position:relative;background-color:transparent;box-shadow:none;border-width:0}.navbar .navbar-nav .dropdown-menu>li>a{color:#FFF!important}.navbar .navbar-nav .dropdown-menu>li>a:hover{background-color:rgba(0,0,0,.07)!important}.navbar .navbar-nav .dropdown-menu>li>a>.ace-icon{color:#FFF!important}.navbar .navbar-nav .dropdown-hover>.dropdown-menu{left:32px!important;right:auto!important;top:auto!important;width:80%!important;width:calc(100% - 32px)}}.navbar-form.form-search{margin-top:9px;margin-bottom:0}.navbar-form.form-search .form-group{margin-bottom:0}.navbar-form.form-search input[type=text]{width:100px}.navbar-form input[type=text]{font-size:13px;line-height:1.4;padding-top:4px;padding-bottom:4px;border-width:0}@media only screen and (max-width:991px){.navbar-form .form-group{display:inline-block;width:50%;margin-bottom:0;vertical-align:middle}.navbar-form.form-search input[type=text]{width:100%}.navbar-nav+.navbar-form{margin-top:0}.navbar .navbar-collapse,.navbar .navbar-form{border-color:rgba(255,255,255,.4)}.navbar .navbar-nav>li:first-child{border-top-width:0}}@media only screen and (max-width:480px){.navbar-form .form-group{width:80%}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:12px;padding-right:12px}@media only screen and (min-width:768px) and (max-width:991px){.navbar.navbar-collapse{background-color:transparent}.navbar.navbar-collapse:before{background:#438eb9;content:"";display:block;position:absolute;min-height:inherit;left:0;right:0;top:0;z-index:-1;border-radius:inherit}.navbar.navbar-collapse .navbar-container{background-color:#438eb9}}.navbar .navbar-toggle{border:1px solid transparent;width:40px;height:35px;line-height:0;padding:0 0 1px;text-align:center}.navbar .navbar-toggle.pull-right{margin:5px 6px 4px 0}.navbar .navbar-toggle.pull-left{margin:5px 0 4px 6px}.navbar .navbar-toggle:active{top:1px}.navbar .navbar-toggle.navbar-toggle-img{width:auto;height:auto;overflow:hidden;padding:0;border-width:0}.navbar .navbar-toggle.navbar-toggle-img>img{border-radius:inherit;max-height:35px;border-width:0}.navbar .navbar-toggle .icon-bar{background-color:#FFF;border-radius:0;width:24px;margin-left:7px}.sidebar{width:190px;float:left;position:static;padding-left:0;padding-right:0}.sidebar:before{content:"";display:block;width:inherit;position:absolute;top:0;bottom:0;z-index:-1;background-color:inherit;border-style:inherit;border-color:inherit;border-width:inherit}.nav-list{margin:0;padding:0;list-style:none}.nav-list .nav-header,.nav-list>li,.nav-list>li>a{margin:0}.nav-list li>a:focus{outline:0}.nav-list>li{display:block;position:relative;float:none;padding:0;border-style:solid;border-width:1px 0 0}.nav-list>li:last-child{border-bottom-width:1px}.nav-list>li.active>a{font-weight:700}.nav-list>li>a{display:block;height:39px;line-height:17px;padding-left:7px;text-shadow:none!important;font-size:13px;text-decoration:none}.nav-list>li>a>.menu-icon{display:inline-block;min-width:30px;margin-right:2px;vertical-align:sub;text-align:center;font-size:18px;font-weight:400}.nav-list>li:before{display:none;content:"";position:absolute;top:-1px;left:0;z-index:1;height:41px;width:3px;max-width:3px;overflow:hidden;background-color:#629cc9}@media only screen and (min-width:992px){.main-container.container .sidebar:not(.h-sidebar) .nav-list>li:before{left:-2px}}.nav-list>li:hover:before{display:block}.nav-list>li a>.arrow{display:block;width:14px!important;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:12px;padding:0;text-align:center}.nav-list>li.separator{height:3px;background-color:transparent;position:static;margin:1px 0;-webkit-box-shadow:none;box-shadow:none}.nav-list>li.active .submenu{display:block}.nav-list>li .submenu{display:none;list-style:none;margin:0;padding:0;line-height:1.5;position:relative}.nav-list>li .submenu>li{margin-left:0;position:relative}.nav-list>li .submenu>li>a{display:block;position:relative;padding:7px 0 9px 37px;margin:0;border-top-width:1px;border-top-style:dotted}.nav-list>li .submenu>li>a:hover{text-decoration:none}.nav-list>li .submenu>li a>.menu-icon{display:none;font-size:12px;font-weight:400;width:18px;height:auto;line-height:12px;text-align:center;position:absolute;left:10px;top:11px;z-index:1;background-color:inherit}.nav-list>li .submenu>li.active>a>.menu-icon,.nav-list>li .submenu>li:hover>a>.menu-icon{display:inline-block}.nav-list>li>.submenu{border-top:1px solid}.nav-list>li>.submenu>li:before{content:"";display:block;width:7px;position:absolute;z-index:1;left:20px;top:17px;border:1px dotted;border-width:1px 0 0}.nav-list>li>.submenu:before{content:"";display:block;position:absolute;z-index:1;left:18px;top:0;bottom:0;border:1px dotted;border-width:0 0 0 1px}.nav-list li.active>a>.arrow,.nav-list li.open>a>.arrow,.nav-list li:hover>a>.arrow{color:inherit}.nav-list>li>a>.menu-icon,no_such_element:-o-prefocus{vertical-align:middle}.nav-list>li>.submenu li>.submenu{display:none}.nav-list>li>.submenu li.active>.submenu{display:block}.nav-list>li>.submenu a>.arrow{right:10px;top:10px;font-size:16px}.nav-list>li>.submenu>li:first-child>a{border-top-width:0}.nav-list>li>.submenu li>.submenu>li{line-height:18px}.nav-list>li>.submenu li>.submenu>li:before{display:none}.nav-list>li>.submenu li>.submenu>li>a{margin-left:20px;padding-left:22px}.nav-list>li>.submenu li>.submenu>li>.submenu>li>a{margin-left:20px;padding-left:38px}.nav-list>li>.submenu li>.submenu>li a>.menu-icon{display:inline-block;width:auto;position:static;background-color:transparent;margin-right:4px;color:inherit}.nav-list>li>.submenu li>.submenu>li a .arrow,.nav-list>li>.submenu li>.submenu>li a .menu-icon{color:inherit}.nav-list>li>.submenu li.open:not(.hover)>a>.menu-icon{display:inline-block}.nav-list a .badge,.nav-list a .label{position:absolute;top:9px;right:10px;opacity:.88;font-size:12px;padding-left:6px;padding-right:6px}.nav-list a .badge .ace-icon,.nav-list a .label .ace-icon{vertical-align:middle;margin:0}.nav-list a.dropdown-toggle .badge,.nav-list a.dropdown-toggle .label{right:26px}.nav-list li:hover>a .badge,.nav-list li:hover>a .label{opacity:1}.nav-list .submenu .submenu a .badge,.nav-list .submenu .submenu a .label{top:6px}.sidebar.sidebar-fixed{position:fixed;top:auto;float:none!important;z-index:1027}.sidebar.sidebar-fixed:before{height:5000px;top:auto;bottom:auto}body.mob-safari .sidebar.sidebar-fixed{top:45px}@media (max-width:479px){body.mob-safari .navbar-fixed-top:not(.navbar-collapse)+.main-container .sidebar-fixed{top:90px}}@media (max-width:991px){body.mob-safari .navbar-fixed-top+.main-container .sidebar.responsive{top:45px}}@media (max-width:479px){body.mob-safari .navbar-fixed-top+.main-container .sidebar.responsive{top:90px}}@media only screen and (max-width:991px){.responsive.sidebar-fixed{left:auto;margin-left:auto}.navbar-fixed-top+.main-container>.responsive{position:fixed;left:auto;margin-left:auto;-moz-backface-visibility:hidden}.navbar-fixed-top+.main-container>.menu-toggler+.responsive{position:absolute;left:190px;margin-left:-190px;-moz-backface-visibility:visible}.navbar-fixed-top+.main-container>.menu-toggler+.responsive.sidebar-fixed{position:fixed;left:auto;margin-left:auto;-moz-backface-visibility:hidden}}@media only screen and (max-width:991px){.sidebar.responsive.sidebar-fixed{position:fixed;left:auto;margin-left:auto}.main-container .menu-toggler.fixed{position:fixed;left:auto;z-index:1026;-moz-backface-visibility:hidden}.sidebar.sidebar-fixed.responsive-max{position:fixed;left:auto;margin-left:auto}}.sidebar .sidebar-toggle{border-style:solid;border-width:0 0 1px;text-align:center;padding:3px 0;position:relative}.sidebar .sidebar-toggle>.ace-icon{padding:0 5px;line-height:18px;cursor:pointer;font-size:14px;border-radius:100%;border:1px solid;position:relative}.sidebar .sidebar-toggle:before{content:"";display:block;height:0;border-top:1px solid;border-color:inherit;position:absolute;left:15px;right:15px;top:13px}.sidebar .sidebar-shortcuts{text-align:center;min-height:40px;margin-bottom:0;overflow:hidden;position:relative;border:0 solid}.sidebar .sidebar-shortcuts-large{line-height:37px}.sidebar .sidebar-shortcuts-large>.btn{text-align:center;width:41px;line-height:24px;padding:0;border-width:4px}.sidebar .sidebar-shortcuts-large>.btn>.ace-icon{margin:0}.sidebar .sidebar-shortcuts-mini{display:none;font-size:0;width:42px;padding-top:2px;padding-bottom:2px}.sidebar .sidebar-shortcuts-mini>.btn{border-width:0!important;font-size:0;line-height:0;padding:8px!important;margin:1px;border-radius:0!important;opacity:.85;filter:alpha(opacity=85)}@media screen and (-webkit-min-device-pixel-ratio:0){.sidebar .sidebar-shortcuts-mini>.btn,.sidebar ::safari-only{margin:0}}.nav-list li.active>a:after{display:block;content:"";position:absolute;right:0;top:4px;border:8px solid transparent;border-width:14px 10px}.nav-list li.open>a:after{display:none}.nav-list li.active.no-active-child>a:after{display:block}.nav-list>li li.active>a:after{top:2px;border-width:14px 8px}.nav-list li.active:not(.open) li.active>a:after{display:none!important}@media (min-width:992px){.sidebar.compact,.sidebar.compact.navbar-collapse{width:105px}.sidebar.compact .sidebar-shortcuts{max-height:40px}.sidebar.compact .nav-list>li:before{height:auto;bottom:-1px}.sidebar.compact .nav-list>li>a{height:auto;line-height:16px;padding:2px 0 8px;text-align:center}.sidebar.compact .nav-list>li>a>.menu-icon{display:block;margin:0;vertical-align:inherit;line-height:32px;height:32px;font-size:20px}.sidebar.compact .nav-list>li>a>.arrow{display:none}.sidebar.compact .nav-list a .badge,.sidebar.compact .nav-list a .label{right:12px}.sidebar.compact .nav-list>li.active>.submenu,.sidebar.compact .nav-list>li.open>.submenu{display:none}.sidebar.compact+.main-content{margin-left:105px}}@media (min-width:992px) and (max-width:991px){.sidebar.compact+.main-content{margin-left:0}.sidebar.navbar-collapse.compact .nav-list>li>a{text-align:left;height:39px;line-height:37px;padding:0 16px 0 7px}.sidebar.navbar-collapse.compact .nav-list>li>a>.menu-icon{display:inline-block;vertical-align:sub;height:auto;line-height:inherit;margin:0 2px 0 0;font-size:18px}.sidebar.navbar-collapse.compact .nav-list>li>a>.arrow,.sidebar.navbar-collapse.compact .nav-list>li>a>.menu-text{display:inline}.sidebar.navbar-collapse.compact+.main-content{margin-left:0}}@media only screen and (min-width:992px){.nav-list li.hover>.submenu{position:absolute;left:100%;margin-left:-2px;top:-10px;bottom:auto;z-index:1026;width:190px;border:1px solid;display:none!important}.nav-list li.hover:hover>.submenu{display:block!important}.nav-list li.hover>.submenu:before,.nav-list li.hover>.submenu>li:before{display:none}.nav-list li.hover.active>a:after{display:block}.nav-list li.hover.active:hover>a.dropdown-toggle:after{display:none}.nav-list li.hover .submenu>li.active>a:after{display:none!important}.nav-list li.hover>.submenu.bottom{top:auto;bottom:-10px}.nav-list li.hover>.submenu.bottom:after,.nav-list li.hover>.submenu.bottom:before{top:auto;bottom:18px}.nav-list li.hover>.submenu{padding:0 2px}.nav-list li.hover>.submenu>li>a{margin-top:2px;margin-bottom:2px;padding-left:18px;border-top-width:0}.nav-list>li.hover>.submenu>li.active>a{font-weight:700}.nav-list>li>.submenu li.hover>.submenu>li>a{padding-left:12px!important;margin-left:auto!important}.nav-list>li>.submenu li.hover>.submenu>li>a>.menu-icon{margin-right:2px}.nav-list>li .submenu>li.hover>a{padding-left:22px}.nav-list>li .submenu>li.hover>a>.menu-icon{left:4px}}@media (min-width:992px) and (max-width:991px){.sidebar.navbar-collapse .nav-list li.hover>.submenu{position:relative;left:auto;top:auto;z-index:auto;margin:auto;padding:0;width:auto;-webkit-box-shadow:none;box-shadow:none;border-width:0}.sidebar.navbar-collapse .nav-list li.hover>.submenu:before,.sidebar.navbar-collapse .nav-list li.hover>.submenu>li:before{display:block}.sidebar.navbar-collapse .nav-list li.hover>.submenu li>a{padding-left:37px}.sidebar.navbar-collapse .nav-list>li.hover>.submenu{border-top-width:1px}.sidebar.navbar-collapse .nav-list li.hover>.submenu>li>a>.menu-icon{background-color:inherit;margin-right:auto;width:18px;position:absolute}.sidebar.navbar-collapse .nav-list>li .submenu>li.hover>a>.menu-icon{left:10px}.sidebar.navbar-collapse .nav-list li.hover>.submenu>li.active>a{font-weight:400}.sidebar.navbar-collapse .nav-list li.hover>.submenu>li.active>a>.menu-icon,.sidebar.navbar-collapse .nav-list li.hover>.submenu>li:hover>a>.menu-icon{display:inline-block}.sidebar.navbar-collapse .nav-list>li>.submenu li.hover>.submenu{padding-left:0;padding-right:0}.sidebar.navbar-collapse .nav-list>li>.submenu li.hover>.submenu>li>a{padding-left:22px!important;margin-left:20px!important}.sidebar.navbar-collapse .nav-list>li>.submenu li.hover>.submenu>li>a>.menu-icon{display:inline-block;width:auto;position:static;background-color:transparent;margin-right:4px}.sidebar.navbar-collapse .nav-list>li>.submenu li>.submenu>li.hover>.submenu>li>a{margin-left:20px!important;padding-left:38px!important}.sidebar.navbar-collapse .nav-list li.hover>.submenu>li>a{border-top-width:1px;margin-top:0;margin-bottom:0}.sidebar.navbar-collapse .nav-list>li.hover>.submenu>li:first-child>a{border-top-width:0}.sidebar.navbar-collapse .nav-list li.hover:hover>.submenu,.sidebar.navbar-collapse .nav-list li.hover>.arrow,.sidebar.navbar-collapse .nav-list li.hover>.submenu{display:none!important}.sidebar.navbar-collapse .nav-list li.hover.active>.submenu{display:block!important}.sidebar.navbar-collapse .nav-list li.hover>.submenu.nav-hide{display:none!important}.sidebar.navbar-collapse .nav-list li.hover>.submenu.nav-show{display:block!important}}@media (min-width:992px) and (max-width:991px){.sidebar.navbar-collapse.compact .nav-list>li.hover.active>a:after{display:none}}.nav-list li>.arrow{display:none;position:absolute;top:8px;right:1px;z-index:1027}.nav-list li>.arrow:after,.nav-list li>.arrow:before{border:1px solid transparent;display:block;height:0;width:0;position:absolute;left:-20px;top:0;right:auto;bottom:auto;content:"";border-width:10px}.nav-list li>.arrow:before{z-index:1;left:-21px}.nav-list li>.arrow:after{z-index:2}.nav-list li:hover>a+.arrow{display:none}@media only screen and (min-width:992px){.nav-list li.hover:hover>a.dropdown-toggle+.arrow{display:block}}.sidebar.menu-min,.sidebar.menu-min.compact,.sidebar.menu-min.navbar-collapse{width:43px}.sidebar.menu-min+.main-content{margin-left:43px}.sidebar.menu-min .nav-list a .badge,.sidebar.menu-min .nav-list a .label{position:relative;top:-1px;right:auto;left:4px}.sidebar.menu-min .nav-list .submenu .submenu a .badge,.sidebar.menu-min .nav-list .submenu .submenu a .label{top:0}.sidebar.menu-min .nav-list>li>a{position:relative;height:39px;line-height:37px;padding:0}.sidebar.menu-min .nav-list>li>a>.menu-icon{font-size:18px;height:auto;line-height:inherit;display:inline-block;vertical-align:sub;margin-right:0;width:44px}.sidebar.menu-min .nav-list>li>a>.menu-text{display:none;text-align:left;position:absolute;top:-1px;left:42px;z-index:1025;width:176px;height:41px;line-height:38px;padding-left:12px;border:1px solid}.sidebar.menu-min .nav-list>li>a.dropdown-toggle>.menu-text{top:-1px;border-width:1px 1px 0}.sidebar.menu-min .nav-list>li>a .arrow{display:none}.sidebar.menu-min .nav-list>li:hover>a>.menu-text{display:block}.sidebar.menu-min .nav-list>li.active>a:after{border-width:10px 6px;top:8px}.sidebar.menu-min .nav-list>li.active.open>a:after{display:block}.sidebar.menu-min .nav-list>li.active.open li.active>a:after{display:none}.sidebar.menu-min .nav-list>li>.submenu{position:absolute;z-index:1028;left:42px;top:-1px;margin-top:40px;padding-bottom:2px;width:176px;display:none!important}.sidebar.menu-min .nav-list>li>.submenu:before{display:none}.sidebar.menu-min .nav-list>li>.submenu:after{content:"";display:block;height:1px;width:1px;position:absolute;right:-1px;top:-1px;border-right:1px solid;border-right-color:inherit}.sidebar.menu-min .nav-list>li>.submenu li:before{display:none}.sidebar.menu-min .nav-list>li>.submenu li>a{margin-left:0;padding-left:22px}.sidebar.menu-min .nav-list>li>.submenu li>a>.menu-icon{left:4px}.sidebar.menu-min .nav-list>li.hover>.submenu{padding-bottom:0}.sidebar.menu-min .nav-list>li.open>.submenu{display:none}.sidebar.menu-min .nav-list>li:hover>.submenu{display:block!important}.sidebar.menu-min .nav-list>li>.arrow{top:10px}.sidebar.menu-min .nav-list>li>.arrow:after,.sidebar.menu-min .nav-list>li>.arrow:before{border-width:8px;left:-16px}.sidebar.menu-min .nav-list>li>.arrow:before{left:-17px}.sidebar.menu-min .nav-list li>.arrow{right:-1px}.sidebar.menu-min .nav-list>li:hover>.arrow{display:block}.sidebar.menu-min .nav-list>li.pull_up>.arrow{z-index:1029}.sidebar.menu-min .nav-list>li.pull_up>.arrow:after,.sidebar.menu-min .nav-list>li.pull_up>.arrow:before{border-width:10px;left:-20px}.sidebar.menu-min .nav-list>li.pull_up>.arrow:before{left:-21px}.sidebar.menu-min .sidebar-shortcuts{position:relative;overflow:visible;z-index:1}.sidebar.menu-min .sidebar-shortcuts-mini{display:block}.sidebar.menu-min .sidebar-shortcuts-large{display:none;position:absolute;top:0;left:42px;width:182px;padding:0 2px 3px;border:1px solid;border-top-width:0}.sidebar.menu-min .sidebar-shortcuts:hover .sidebar-shortcuts-large{display:block}.sidebar.menu-min .sidebar-toggle:before{left:5px;right:5px}.sidebar.menu-min .sidebar-toggle>.ace-icon{font-size:13px;padding:0 4px;line-height:15px;border-width:1px}.sidebar.menu-min .nav-list>li>.submenu li>.submenu>li>a{margin-left:2px!important;padding-left:30px}.sidebar.menu-min .nav-list>li>.submenu li>.submenu>li>.submenu>li>a{margin-left:2px!important;padding-left:45px}.sidebar.menu-min .nav-list li.active.open>.submenu>li.active>a:after,.sidebar.menu-min .nav-list>li.active.open:hover>a:after,.sidebar.menu-min .nav-list>li.active:hover:after,.sidebar.menu-min .nav-list>li.active:hover>a:after,.sidebar.menu-min .nav-list>li>.submenu li.active>a:after{display:none}@media only screen and (min-width:992px){.sidebar.menu-min .nav-list li.hover>.submenu{margin-left:0}.sidebar.menu-min .nav-list>li>.submenu li.hover>.submenu>li>a,.sidebar.menu-min .nav-list>li>.submenu li>.submenu>li.hover>.submenu>li>a{margin-left:0!important}}@media (min-width:992px){.sidebar.menu-min.compact .nav-list>li>a{height:39px;line-height:37px;padding:0 16px 0 7px;position:relative}.sidebar.menu-min.compact .nav-list>li>a>.menu-icon{font-size:18px;height:auto;line-height:inherit;display:inline-block;vertical-align:sub;width:auto}}@media only screen and (min-width:992px){.navbar.h-navbar{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.25);box-shadow:0 2px 4px 0 rgba(0,0,0,.25)}.sidebar.h-sidebar{position:relative;float:none!important;width:auto!important;margin-top:17px;border-width:0!important;box-shadow:none}.sidebar.h-sidebar.sidebar-fixed{position:fixed}.sidebar.h-sidebar:before{display:block;position:absolute;z-index:-1;left:0!important;right:0!important;top:-17px;bottom:auto;height:17px;width:auto;border-width:0;border-bottom:1px solid;border-bottom-color:inherit}.sidebar.h-sidebar.hide-before .nav-list>li:before{top:0}.sidebar.h-sidebar .nav-list{border-width:0;border-bottom:2px solid #79b0ce}.sidebar.h-sidebar .nav-list>li{float:left;border-width:0 1px;margin-left:-1px}.sidebar.h-sidebar .nav-list>li:before{left:-1px;right:-1px;bottom:auto;top:-2px;max-width:none;width:auto;height:2px;border-width:0}.sidebar.h-sidebar .nav-list>li.active:before{display:block}.sidebar.h-sidebar .nav-list>li.active:after{display:none}.sidebar.h-sidebar .nav-list>li:hover{z-index:1026}.sidebar.h-sidebar .nav-list>li.active{z-index:1027}.sidebar.h-sidebar .nav-list>li:first-child{border-left-width:0;margin-left:0}.sidebar.h-sidebar .sidebar-shortcuts+.nav-list>li:first-child{border-left-width:1px;margin-left:-1px}.sidebar.h-sidebar .nav-list>li>a{line-height:22px!important;height:auto!important;padding:10px 14px!important}.sidebar.h-sidebar .nav-list>li>a>.menu-icon{display:block!important;margin:1px 0 4px;line-height:inherit;width:auto}.sidebar.h-sidebar .nav-list>li>a>.arrow{display:none}.sidebar.h-sidebar .nav-list>li.hover.pull_right{float:none!important}.sidebar.h-sidebar .nav-list>li.hover>.submenu{top:100%;left:1px;margin-top:auto;margin-left:-2px;width:190px;z-index:1026}.sidebar.h-sidebar .nav-list>li.hover.pull_right>.submenu{left:auto;right:1px}.sidebar.h-sidebar .nav-list>li.hover>.arrow{right:auto;top:auto;left:24px;bottom:7px}.sidebar.h-sidebar .nav-list>li.hover.pull_right>.arrow{left:auto;right:24px}.sidebar.h-sidebar .nav-list>li.hover>.arrow:after,.sidebar.h-sidebar .nav-list>li.hover>.arrow:before{border-width:0 8px 8px!important}.sidebar.h-sidebar .nav-list>li.hover>.arrow:after{border-color:transparent;border-left-color:transparent!important;border-right-color:transparent!important;-moz-border-right-colors:none!important;-moz-border-left-colors:none!important;-moz-border-top-colors:none;-moz-border-bottom-colors:none;left:-10px!important;right:auto!important}.sidebar.h-sidebar .nav-list>li.hover>.arrow:before{border-color:transparent;border-left-color:transparent!important;border-right-color:transparent!important;-moz-border-right-colors:none!important;-moz-border-left-colors:none!important;-moz-border-top-colors:none;-moz-border-bottom-colors:none;right:auto!important;left:-10px!important;top:-1px!important}.sidebar.h-sidebar .nav-list>li.hover:hover>a~.arrow{display:none}.sidebar.h-sidebar .nav-list>li.hover:hover>a.dropdown-toggle~.arrow{display:block}.sidebar.h-sidebar .sidebar-shortcuts-large:after,.sidebar.h-sidebar .sidebar-shortcuts-large:before{display:block;content:"";position:absolute;left:50%;margin-left:-8px;border:1px solid transparent;border-width:0 8px 8px}.sidebar.h-sidebar .sidebar-shortcuts-large:after{border-right-color:transparent;-moz-border-right-colors:none;top:-8px}.sidebar.h-sidebar .sidebar-shortcuts-large:before{-moz-border-bottom-colors:#CCC;border-bottom-color:#CCC;top:-9px}.sidebar.h-sidebar .sidebar-toggle{display:none}.sidebar.h-sidebar .sidebar-shortcuts{float:left;display:block;overflow:visible;position:relative;margin:0;padding:12px 8px 9px;max-height:none!important;background-color:transparent}.sidebar.h-sidebar .sidebar-shortcuts:hover .sidebar-shortcuts-large{display:block}.sidebar.h-sidebar .sidebar-shortcuts-large{display:none;width:52px;height:auto;position:absolute;z-index:15;top:100%;margin-top:-5px;left:10px;padding:3px 2px;border:1px solid}.sidebar.h-sidebar .sidebar-shortcuts-mini{width:auto;max-width:52px;display:block;background-color:transparent;padding-top:3px;padding-bottom:5px}.sidebar.h-sidebar .sidebar-shortcuts-mini>.btn{margin:1px;padding:9px!important}.sidebar.h-sidebar .nav-list a .badge,.sidebar.h-sidebar .nav-list a .label{position:absolute;top:11px;right:auto!important;left:50%;margin-left:10px}.sidebar.h-sidebar+.main-content{margin-left:0}.sidebar.h-sidebar+.main-content .breadcrumbs{margin:6px 9px;border:1px solid;border-color:#E5E5E5}.h-sidebar.sidebar-fixed{top:auto;width:100%;left:0;right:0}.h-sidebar.sidebar-fixed:before{z-index:auto}.h-sidebar.sidebar-fixed,.h-sidebar.sidebar-fixed .nav-list{border-right-width:0;border-left-width:0}.h-sidebar.sidebar-fixed .sidebar-shortcuts{border-width:0}.h-sidebar.sidebar-fixed+.main-content{padding-top:88px}}@media only screen and (min-width:992px) and (max-width:991px){.sidebar.h-sidebar+.main-content .breadcrumbs{margin:0;border-width:0 0 1px}}.main-container.container .h-sidebar.sidebar-fixed.navbar-collapse{left:0!important;right:0!important;width:auto!important}@media (min-width:768px){.main-container.container .h-sidebar.sidebar-fixed.navbar-collapse{left:auto!important;right:auto!important;width:744px!important}}@media (min-width:992px){.main-container.container .h-sidebar.sidebar-fixed.navbar-collapse{width:964px!important}}@media (min-width:1200px){.main-container.container .h-sidebar.sidebar-fixed.navbar-collapse{width:1164px!important}}@media (min-width:992px){.sidebar.h-sidebar .nav-list>li>a>.menu-text{background-color:transparent!important;border-width:0!important;-webkit-box-shadow:none!important;box-shadow:none!important;display:inline!important;margin:auto!important;padding:0!important;position:static!important;font-size:inherit;line-height:inherit;text-align:inherit}.sidebar.h-sidebar .nav-list>li>a>.menu-icon{height:auto;font-size:18px}}.main-container .menu-toggler,.sidebar-toggle.sidebar-expand{display:none}@media only screen and (max-width:991px){.sidebar.responsive:before{display:none}.sidebar.responsive{-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.15);box-shadow:2px 1px 2px 0 rgba(0,0,0,.15);z-index:1027;overflow:hidden;max-height:0;-moz-transform:translateX(-200px);-webkit-transform:translateX(-200px);-o-transform:translateX(-200px);-ms-transform:translateX(-200px);transform:translateX(-200px);-webkit-transition:-webkit-transform .2s linear 0s,max-height 0s linear .2s;-moz-transition:-moz-transform .2s linear 0s,max-height 0s linear .2s;-o-transition:-o-transform .2s linear 0s,max-height 0s linear .2s;transition:transform .2s linear 0s,max-height 0s linear .2s;position:relative;bottom:auto;left:190px;margin-left:-190px}}@media (min-width:992px) and (max-width:991px){.sidebar.responsive.compact{-moz-transform:translateX(-115px);-webkit-transform:translateX(-115px);-o-transform:translateX(-115px);-ms-transform:translateX(-115px);transform:translateX(-115px)}.navbar.navbar-fixed-top+.main-container .sidebar.responsive.compact.push_away.display~.footer .footer-inner,.sidebar.responsive.compact.push_away.display+.main-content{-moz-transform:translateX(105px);-webkit-transform:translateX(105px);-o-transform:translateX(105px);-ms-transform:translateX(105px);transform:translateX(105px)}}@media only screen and (max-width:991px){.sidebar.responsive.menu-min{-moz-transform:translateX(-53px);-webkit-transform:translateX(-53px);-o-transform:translateX(-53px);-ms-transform:translateX(-53px);transform:translateX(-53px)}.sidebar.responsive.display{-moz-transform:none!important;-webkit-transform:none!important;-o-transform:none!important;-ms-transform:none!important;transform:none!important;overflow:visible;max-height:2000px;-webkit-transition-delay:0s;-moz-transition-delay:0s;-o-transition-delay:0s;transition-delay:0s}.sidebar.responsive.push_away{-webkit-box-shadow:none!important;box-shadow:none!important}.sidebar.responsive.push_away:before{display:block!important}.sidebar.responsive.push_away+.main-content{-webkit-transition:-webkit-transform .2s linear 0s;-moz-transition:-moz-transform .2s linear 0s;-o-transition:-o-transform .2s linear 0s;transition:transform .2s linear 0s}.sidebar.responsive.push_away.display+.main-content{-moz-transform:translateX(190px);-webkit-transform:translateX(190px);-o-transform:translateX(190px);-ms-transform:translateX(190px);transform:translateX(190px)}.sidebar.responsive.push_away.display.menu-min+.main-content{-moz-transform:translateX(43px);-webkit-transform:translateX(43px);-o-transform:translateX(43px);-ms-transform:translateX(43px);transform:translateX(43px)}.navbar.navbar-fixed-top+.main-container .sidebar.responsive.push_away:before{height:5000px}.navbar.navbar-fixed-top+.main-container .sidebar.responsive.push_away~.footer .footer-inner{-webkit-transition:-webkit-transform .2s linear 0s;-moz-transition:-moz-transform .2s linear 0s;-o-transition:-o-transform .2s linear 0s;transition:transform .2s linear 0s}.navbar.navbar-fixed-top+.main-container .sidebar.responsive.push_away.display~.footer .footer-inner{-moz-transform:translateX(190px);-webkit-transform:translateX(190px);-o-transform:translateX(190px);-ms-transform:translateX(190px);transform:translateX(190px)}.navbar.navbar-fixed-top+.main-container .sidebar.responsive.push_away.display.menu-min~.footer .footer-inner{-moz-transform:translateX(43px);-webkit-transform:translateX(43px);-o-transform:translateX(43px);-ms-transform:translateX(43px);transform:translateX(43px)}.sidebar.responsive .nav-list>li.active:after{height:41px}.sidebar.responsive .nav-list li li.active>a:after{display:none}.sidebar.responsive.menu-min .nav-list>li.active:after{display:block}.sidebar.responsive+.main-content{margin-left:0!important}}@media only screen and (min-width:768px) and (max-width:991px){.main-container.container .sidebar.responsive{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;display:none}.main-container.container .sidebar.responsive.display{display:block}.main-container.container .sidebar.responsive.push_away+.main-content,.main-container.container .sidebar.responsive.push_away~.footer .footer-inner{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important;-moz-transform:none!important;-webkit-transform:none!important;-o-transform:none!important;-ms-transform:none!important;transform:none!important}}@media only screen and (max-width:991px){.responsive.sidebar-fixed{position:fixed}.main-container .menu-toggler.fixed{position:fixed;left:auto;z-index:1026;-moz-backface-visibility:hidden}}@media only screen and (max-width:991px){.menu-toggler+.sidebar.responsive{margin-top:40px}.main-container .menu-toggler{display:block;position:absolute;z-index:1026;width:52px;height:32px;margin-right:2px;line-height:normal;padding-left:33px;padding-top:7px;padding-bottom:1px;font-size:13px;font-weight:700;text-transform:uppercase;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.main-container .menu-toggler:hover{text-decoration:none}.main-container .menu-toggler:focus{outline:0}.main-container .menu-toggler:before{border-top:1px solid #87b87f;border-bottom:1px solid #6fb3e0;height:2px;width:24px;content:"";position:absolute;z-index:1;top:13px;left:4px;-webkit-transition:all .1s ease;transition:all .1s ease;-o-transition:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.main-container .menu-toggler:after{border-top:1px solid #ffa24d;border-bottom:1px solid #d15b47;content:"";height:2px;width:24px;position:absolute;top:19px;left:4px;-webkit-transition:all .1s ease;transition:all .1s ease;-o-transition:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.main-container .menu-toggler.display:before{height:4px;top:8px;border-width:2px}.main-container .menu-toggler.display:after{height:4px;top:20px;border-width:2px}.main-container .menu-toggler>.toggler-text{display:block;position:absolute;bottom:-9px;left:0;border:1px solid transparent;border-width:9px 42px 0;border-top-color:#444;-moz-border-top-colors:#444}.main-container .menu-toggler>.toggler-text:after{display:block;content:"MENU";color:#fff;position:absolute;left:-8px;top:-41px}.menu-toggler+.responsive.sidebar-scroll .nav-wrap{overflow:hidden}}@media only screen and (max-width:320px){.main-container .menu-toggler{width:0}.main-container .menu-toggler>.toggler-text{border-width:7px 16px;bottom:-14px}.main-container .menu-toggler>.toggler-text:after{font-size:9px;font-weight:400;color:#FFF;position:absolute;left:-13px;top:-42px}.main-container .menu-toggler:after,.main-container .menu-toggler:before{margin-top:8px}.main-container .menu-toggler.display:after,.main-container .menu-toggler.display:before{height:2px;border-width:1px}.main-container .menu-toggler.display:before{top:13px}.main-container .menu-toggler.display:after{top:19px}}@media (max-width:991px){.menu-toggler.invisible{position:fixed;z-index:-999;visibility:hidden;opacity:0;width:1px;height:1px}.sidebar.responsive-min,.sidebar.responsive-min.compact,.sidebar.responsive-min.navbar-collapse{width:43px}.sidebar.responsive-min+.main-content{margin-left:43px}.sidebar.responsive-min .nav-list a .badge,.sidebar.responsive-min .nav-list a .label{position:relative;top:-1px;right:auto;left:4px}.sidebar.responsive-min .nav-list .submenu .submenu a .badge,.sidebar.responsive-min .nav-list .submenu .submenu a .label{top:0}.sidebar.responsive-min .nav-list>li>a{position:relative;height:39px;line-height:37px;padding:0}.sidebar.responsive-min .nav-list>li>a>.menu-icon{font-size:18px;height:auto;line-height:inherit;display:inline-block;vertical-align:sub;margin-right:0;width:44px}.sidebar.responsive-min .nav-list>li>a>.menu-text{display:none;text-align:left;position:absolute;top:-1px;left:42px;z-index:1025;width:176px;height:41px;line-height:38px;padding-left:12px;border:1px solid}.sidebar.responsive-min .nav-list>li>a.dropdown-toggle>.menu-text{top:-1px;border-width:1px 1px 0}.sidebar.responsive-min .nav-list>li>a .arrow{display:none}.sidebar.responsive-min .nav-list>li:hover>a>.menu-text{display:block}.sidebar.responsive-min .nav-list>li.active>a:after{border-width:10px 6px;top:8px}.sidebar.responsive-min .nav-list>li.active.open>a:after{display:block}.sidebar.responsive-min .nav-list>li.active.open li.active>a:after{display:none}.sidebar.responsive-min .nav-list>li>.submenu{position:absolute;z-index:1028;left:42px;top:-1px;margin-top:40px;padding-bottom:2px;width:176px;display:none!important}.sidebar.responsive-min .nav-list>li>.submenu:before{display:none}.sidebar.responsive-min .nav-list>li>.submenu:after{content:"";display:block;height:1px;width:1px;position:absolute;right:-1px;top:-1px;border-right:1px solid;border-right-color:inherit}.sidebar.responsive-min .nav-list>li>.submenu li:before{display:none}.sidebar.responsive-min .nav-list>li>.submenu li>a{margin-left:0;padding-left:22px}.sidebar.responsive-min .nav-list>li>.submenu li>a>.menu-icon{left:4px}.sidebar.responsive-min .nav-list>li.hover>.submenu{padding-bottom:0}.sidebar.responsive-min .nav-list>li.open>.submenu{display:none}.sidebar.responsive-min .nav-list>li:hover>.submenu{display:block!important}.sidebar.responsive-min .nav-list>li>.arrow{top:10px}.sidebar.responsive-min .nav-list>li>.arrow:after,.sidebar.responsive-min .nav-list>li>.arrow:before{border-width:8px;left:-16px}.sidebar.responsive-min .nav-list>li>.arrow:before{left:-17px}.sidebar.responsive-min .nav-list li>.arrow{right:-1px}.sidebar.responsive-min .nav-list>li:hover>.arrow{display:block}.sidebar.responsive-min .nav-list>li.pull_up>.arrow{z-index:1029}.sidebar.responsive-min .nav-list>li.pull_up>.arrow:after,.sidebar.responsive-min .nav-list>li.pull_up>.arrow:before{border-width:10px;left:-20px}.sidebar.responsive-min .nav-list>li.pull_up>.arrow:before{left:-21px}.sidebar.responsive-min .sidebar-shortcuts{position:relative;overflow:visible;z-index:1}.sidebar.responsive-min .sidebar-shortcuts-mini{display:block}.sidebar.responsive-min .sidebar-shortcuts-large{display:none;position:absolute;top:0;left:42px;width:182px;padding:0 2px 3px;border:1px solid;border-top-width:0}.sidebar.responsive-min .sidebar-shortcuts:hover .sidebar-shortcuts-large{display:block}.sidebar.responsive-min .sidebar-toggle:before{left:5px;right:5px}.sidebar.responsive-min .sidebar-toggle>.ace-icon{font-size:13px;padding:0 4px;line-height:15px;border-width:1px}.sidebar.responsive-min .nav-list>li>.submenu li>.submenu>li>a{margin-left:2px!important;padding-left:30px}.sidebar.responsive-min .nav-list>li>.submenu li>.submenu>li>.submenu>li>a{margin-left:2px!important;padding-left:45px}.sidebar.responsive-min .nav-list li.active.open>.submenu>li.active>a:after,.sidebar.responsive-min .nav-list>li.active.open:hover>a:after,.sidebar.responsive-min .nav-list>li.active:hover:after,.sidebar.responsive-min .nav-list>li.active:hover>a:after,.sidebar.responsive-min .nav-list>li>.submenu li.active>a:after{display:none}.sidebar.responsive-min:before{display:block}.sidebar.responsive-min .sidebar-toggle.sidebar-collapse{display:none}.sidebar.responsive-min .sidebar-toggle.sidebar-expand{display:block}.sidebar.responsive-min+.main-content{margin-left:43px!important}.sidebar.responsive-min+.main-content .breadcrumb{margin-left:12px}.sidebar.responsive-max{display:block;position:relative;left:190px;margin-left:-190px;z-index:1027}.sidebar.responsive-max .sidebar-toggle.sidebar-collapse{display:none}.sidebar.responsive-max .sidebar-toggle.sidebar-expand{display:block}.sidebar.responsive-max+.main-content{margin-left:43px!important}.sidebar.responsive-max+.main-content .breadcrumb{margin-left:12px}}@media (max-width:991px) and only screen and (min-width:992px){.sidebar.responsive-min .nav-list li.hover>.submenu{margin-left:0}.sidebar.responsive-min .nav-list>li>.submenu li.hover>.submenu>li>a,.sidebar.responsive-min .nav-list>li>.submenu li>.submenu>li.hover>.submenu>li>a{margin-left:0!important}}@media (max-width:991px) and (min-width:992px){.sidebar.responsive-min.compact .nav-list>li>a{height:39px;line-height:37px;padding:0 16px 0 7px;position:relative}.sidebar.responsive-min.compact .nav-list>li>a>.menu-icon{font-size:18px;height:auto;line-height:inherit;display:inline-block;vertical-align:sub;width:auto}}@media only screen and (min-width:992px){.sidebar.navbar-collapse{max-height:none}}@media only screen and (max-width:991px){.sidebar.navbar-collapse{position:relative;float:none!important;margin-top:auto;z-index:1;width:100%!important;max-height:340px;margin-left:0;margin-right:0}.sidebar.navbar-collapse:before{display:none}.sidebar.navbar-collapse .nav-list>li:last-child{border-bottom-width:0}.sidebar.navbar-collapse .nav-list>li>a{padding-top:10px!important;padding-bottom:10px!important;line-height:20px!important;height:41px!important}.sidebar.navbar-collapse .nav-list>li:before{height:43px!important}.sidebar.navbar-collapse li>.arrow{display:none!important}.sidebar.navbar-collapse .nav-list li>.submenu{border-left-width:0!important}.sidebar.navbar-collapse .sidebar-toggle{display:none!important}.sidebar.navbar-collapse .sidebar-shortcuts{padding:3px 0 6px!important;max-height:none!important;border-bottom-width:0}.sidebar.navbar-collapse+.main-content{margin-left:0!important}.sidebar.navbar-collapse+.main-content .breadcrumb{margin-left:12px}.sidebar.navbar-collapse .nav-wrap+.ace-scroll{display:none}.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu{position:relative;left:auto;top:auto;width:auto;z-index:auto;margin-top:auto!important;padding-top:0;padding-bottom:0;border-width:1px 0 0;-webkit-box-shadow:none!important;box-shadow:none!important}.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu:before,.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu>li:before{display:block}.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu li>a{padding-left:37px!important}.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu li>a>.menu-icon{left:10px}.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu:after{display:none}.sidebar.navbar-collapse.menu-min .nav-list>li>a:hover:before{width:3px}.sidebar.navbar-collapse.menu-min .nav-list>li>a{text-align:left;padding-left:7px}.sidebar.navbar-collapse.menu-min .nav-list>li>a>.menu-icon{display:inline-block;width:auto;margin-right:2px}.sidebar.navbar-collapse.menu-min .nav-list>li>a>.menu-text{position:relative;display:inline!important;line-height:normal;padding-left:0;height:auto;top:auto;left:auto;z-index:auto;width:auto;border-width:0!important;background-color:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}.sidebar.navbar-collapse.menu-min .nav-list a>.arrow{display:block}.sidebar.navbar-collapse.menu-min .nav-list>li:hover>.submenu{display:none!important}.sidebar.navbar-collapse.menu-min .nav-list>li.active>.submenu,.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu.nav-show{display:block!important}.sidebar.navbar-collapse.menu-min .nav-list>li>.submenu.nav-hide{display:none!important}.sidebar.navbar-collapse.menu-min .sidebar-shortcuts-large{display:block;position:static;-webkit-box-shadow:none!important;box-shadow:none!important;border-width:0;background-color:transparent;width:auto;padding:0!important}.sidebar.navbar-collapse.menu-min .sidebar-shortcuts-mini{display:none}.sidebar.navbar-collapse .nav-list a .badge,.sidebar.navbar-collapse .nav-list a .label{position:relative;top:-1px;right:auto;left:4px}.sidebar.navbar-collapse .nav-list li.active>a:after,.sidebar.navbar-collapse .nav-list li.active>a:before,.sidebar.navbar-collapse .nav-list>li.active:after,.sidebar.navbar-collapse .nav-list>li.highlight.active>a:after,.sidebar.navbar-collapse .nav-list>li.highlight.active>a:before{display:none!important}}@media (min-width:992px) and (max-width:991px){.sidebar.navbar-collapse .nav-list>li>.submenu li.hover>.submenu>li>a,.sidebar.navbar-collapse .nav-list>li>.submenu li>.submenu>li.hover>.submenu>li>a{margin-left:20px!important}}@media (max-width:991px){.navbar-fixed-top+.main-container .sidebar.navbar-collapse{position:fixed;z-index:1027}}@media (min-width:768px) and (max-width:991px){.navbar-fixed-top+.main-container.container .sidebar.navbar-collapse{width:744px!important}}.sidebar-scroll .sidebar-shortcuts{min-height:41px;border-bottom:1px solid}.sidebar-scroll .sidebar-toggle{border-top:1px solid}.sidebar-scroll .nav-list>li:first-child{border-top-width:0}.sidebar-scroll .nav-list>li:last-child{border-bottom-width:0}.sidebar-scroll .nav-wrap .sidebar-shortcuts{min-height:40px;border-bottom-width:0}.sidebar-scroll .nav-wrap .sidebar-shortcuts+.nav-list>li:first-child{border-top-width:1px}.sidebar-scroll .nav-wrap-t .sidebar-toggle{border-top-width:0}.sidebar-scroll .nav-wrap-t .nav-list>li:last-child{border-bottom-width:1px}.sidebar .nav-wrap+.ace-scroll{position:absolute;right:0;top:0;z-index:1}.sidebar .nav-wrap+.scrollout{right:-8px}@media only screen and (min--moz-device-pixel-ratio:0){.navbar.navbar-fixed-top{border-radius:.05em}.navbar.navbar-fixed-top,.navbar.navbar-fixed-top .ace-nav>li .dropdown-menu,.navbar.navbar-fixed-top>.navbar-container,.sidebar.sidebar-fixed{-moz-backface-visibility:hidden}}.ace-scroll{overflow:hidden}.scroll-content{position:static;overflow:hidden}.scroll-track{position:absolute;top:auto;bottom:auto;right:0;height:auto;background-color:#E7E7E7;z-index:99;width:0;opacity:0}.scroll-bar{position:absolute;top:0;left:0;width:inherit;background:#bbd4e5}.scroll-hz .scroll-track{top:auto;left:auto;right:auto;bottom:0;height:8px;width:auto}.scroll-hz .scroll-bar{height:inherit;width:auto}.scroll-active .scroll-track{-webkit-transition:all .25s ease .6s;-o-transition:all .25s ease .6s;transition:all .25s ease .6s}.scroll-active .scroll-track.active,.scroll-active .scroll-track:active,.scroll-active:hover .scroll-track{width:8px;opacity:1;-webkit-transition-duration:.15s;transition-duration:.15s;-webkit-transition-delay:0s;transition-delay:0s}.scroll-track.active>.scroll-bar{transition-property:none!important;transition-duration:0s!important}.scroll-margin .scroll-track{right:1px}.scroll-left .scroll-track{right:auto;left:0}.scroll-margin.scroll-left .scroll-track{left:1px}.scroll-top .scroll-track{bottom:auto;top:0}.scroll-margin.scroll-top .scroll-track{top:1px}.scroll-dark .scroll-bar{background-color:rgba(0,0,0,.25)}.scroll-dark .scroll-track{background-color:rgba(0,0,0,.15)}.scroll-light .scroll-bar{background-color:rgba(0,0,0,.14)}.scroll-light .scroll-track{background-color:rgba(0,0,0,.07)}.no-track .scroll-track{background-color:transparent}.scroll-visible .scroll-track{opacity:1;width:8px}.scroll-visible.scroll-hz .scroll-track{height:8px;width:auto}.scroll-thin .scroll-track.active,.scroll-thin .scroll-track:active,.scroll-thin.scroll-visible .scroll-track,.scroll-thin:hover .scroll-track{width:6px}.scroll-thin.scroll-hz .scroll-track.active,.scroll-thin.scroll-hz .scroll-track:active,.scroll-thin.scroll-hz.scroll-visible .scroll-track,.scroll-thin.scroll-hz:hover .scroll-track{width:auto;height:6px}.scroll-chrome .scroll-bar{background-color:transparent;width:11px}.scroll-chrome .scroll-bar:before{display:block;content:"";position:absolute;top:1px;bottom:3px;left:1px;right:1px;background-color:#D9D9D9;border:1px solid #BBB;border-radius:1px}.scroll-chrome .scroll-track{width:12px!important;background-color:#F2F2F2;border:1px solid;border-width:1px 0 1px 1px;border-color:#E6E6E6 transparent #E6E6E6 #DBDBDB}.scroll-chrome .scroll-track:hover .scroll-bar:before{background-color:silver;border-color:#A6A6A6}.scroll-chrome .scroll-track.active .scroll-bar:before{background-color:#A9A9A9;border-color:#8B8B8B}.nav-wrap+.scroll-active .scroll-track{width:8px}.nav-scroll.scroll-active .scroll-track{width:8px;right:0}.nav-scroll.scroll-active:hover .scroll-track,.nav-wrap:hover+.scroll-active .scroll-track{width:8px;opacity:1;-webkit-transition-duration:.15s;transition-duration:.15s;-webkit-transition-delay:0s;transition-delay:0s}.nav-scroll.scroll-active:hover .scroll-track{width:8px}.nav-scroll.ace-scroll,.nav-scroll.ace-scroll .scroll-content{overflow:visible}.nav-scroll.ace-scroll.scroll-active,.nav-scroll.ace-scroll.scroll-active .scroll-content{overflow:hidden}.breadcrumbs{position:relative;z-index:auto;border-bottom:1px solid #e5e5e5;background-color:#f5f5f5;min-height:41px;line-height:40px;padding:0 12px 0 0}.breadcrumb{background-color:transparent;display:inline-block;line-height:20px;margin:6px 22px 0 12px;padding:0;font-size:13px;color:#333;border-radius:0}.breadcrumb>li,.breadcrumb>li.active{color:#555;padding:0 3px}.breadcrumb>li>a{display:inline-block;color:#4c8fbd}.breadcrumb>li+li:before{font-family:FontAwesome;font-size:14px;content:"\f105";color:#b2b6bf;padding:0;margin:0 8px 0 0;position:relative;top:1px}.breadcrumb .home-icon{font-size:20px;margin-left:2px;margin-right:2px;vertical-align:top}@media only screen and (max-width:480px){.breadcrumb>li>a{padding:0 1px}}@media only screen and (max-width:991px){.menu-toggler+.sidebar.responsive+.main-content .breadcrumb{margin-left:90px}}@media only screen and (max-width:320px){.breadcrumb{margin-left:8px}.menu-toggler+.sidebar.responsive+.main-content .breadcrumb{margin-left:36px}}@media (min-width:992px){.breadcrumbs-fixed{position:fixed;right:0;left:0;top:auto;z-index:1024}.breadcrumbs-fixed+.page-content{padding-top:49px}.sidebar+.main-content .breadcrumbs-fixed{left:190px}body.mob-safari .breadcrumbs-fixed{top:45px}}@media (min-width:992px){.sidebar.compact+.main-content .breadcrumbs-fixed{left:105px}}@media (min-width:992px){.sidebar.menu-min+.main-content .breadcrumbs-fixed{left:43px}}@media (min-width:992px) and (max-width:991px){.breadcrumbs-fixed,.sidebar.menu-min+.main-content .breadcrumbs-fixed{left:0}.sidebar.responsive-max+.main-content .breadcrumbs-fixed,.sidebar.responsive-min+.main-content .breadcrumbs-fixed{left:43px}}@media (min-width:992px){.container.main-container .sidebar.compact+.main-content .breadcrumbs-fixed{left:auto;right:auto;width:639px}}@media (min-width:992px){.container.main-container .breadcrumbs-fixed{left:auto;right:auto;width:744px}.container.main-container .sidebar+.main-content .breadcrumbs-fixed{left:auto;right:auto;width:554px}.container.main-container .sidebar.menu-min+.main-content .breadcrumbs-fixed{left:auto;right:auto;width:701px}}@media (min-width:992px){.container.main-container .sidebar.compact+.main-content .breadcrumbs-fixed{width:859px}}@media (min-width:992px){.container.main-container .breadcrumbs-fixed{width:964px}.container.main-container .sidebar+.main-content .breadcrumbs-fixed{width:774px}.container.main-container .sidebar.menu-min+.main-content .breadcrumbs-fixed{width:921px}}@media (min-width:992px){.container.main-container .sidebar.compact+.main-content .breadcrumbs-fixed{width:1059px}}@media (min-width:1200px){.container.main-container .breadcrumbs-fixed{width:1164px}.container.main-container .sidebar+.main-content .breadcrumbs-fixed{width:974px}.container.main-container .sidebar.menu-min+.main-content .breadcrumbs-fixed{width:1121px}}@media (min-width:992px) and (max-width:991px){.container.main-container .sidebar.compact+.main-content .breadcrumbs-fixed{width:744px}}@media (min-width:992px) and (max-width:991px){.container.main-container .breadcrumbs-fixed,.container.main-container .sidebar.menu-min+.main-content .breadcrumbs-fixed{width:744px}.container.main-container .sidebar.responsive-max+.main-content .breadcrumbs-fixed,.container.main-container .sidebar.responsive-min+.main-content .breadcrumbs-fixed{left:auto;right:auto;width:701px}}@media (min-width:992px){.h-sidebar+.main-content .breadcrumbs.breadcrumbs-fixed{position:relative!important;top:auto;left:auto;z-index:auto;width:auto!important}.h-sidebar+.main-content .page-content{padding-top:8px!important}}.nav-search{position:absolute;right:22px;line-height:24px}.breadcrumbs .nav-search{top:6px}.nav-search .form-search{margin-bottom:0}.nav-search .nav-search-input{border:1px solid #6fb3e0;width:152px;height:28px!important;padding-top:2px;padding-bottom:2px;border-radius:4px!important;font-size:13px;line-height:1.3;color:#666!important;z-index:11;-webkit-transition:width ease .15s;-o-transition:width ease .15s;transition:width ease .15s}.nav-search .nav-search-input+.dropdown-menu{min-width:0;left:0;right:0}.nav-search .nav-search-input:focus,.nav-search .nav-search-input:hover{border-color:#6fb3e0}.nav-search .nav-search-icon{color:#6fb3e0!important;font-size:14px!important;line-height:24px!important;background-color:transparent}.nav-search.minimized .nav-search-input{width:0;opacity:0;filter:alpha(opacity=0);max-width:0}.nav-search.minimized .nav-search-btn:active+.nav-search-input,.nav-search.minimized .nav-search-input:active,.nav-search.minimized .nav-search-input:focus,.nav-search.minimized .nav-search-input:hover,.nav-search.minimized:hover .nav-search-input{opacity:1;filter:alpha(opacity=100);width:152px;max-width:152px}.nav-search.minimized .nav-search-icon{border:1px solid;border-radius:100%;background-color:#FFF;padding:0 5px!important}.nav-search-icon,.nav-search.minimized .nav-search-input:active~.nav-search-icon,.nav-search.minimized .nav-search-input:focus~.nav-search-icon,.nav-search.minimized .nav-search-input:hover~.nav-search-icon,.nav-search.minimized:hover .nav-search-icon{border:none;border-radius:0;padding:0 3px!important}.sidebar>.nav-search{position:static;background-color:#FAFAFA;border-bottom:1px solid #DDD;text-align:center;height:35px;padding-top:6px}.sidebar>.nav-search .nav-search-input{width:162px!important;border-radius:0!important;max-width:162px!important;opacity:1!important;filter:alpha(opacity=100)!important}.sidebar>.nav-search .nav-search-input+.dropdown-menu{text-align:left}.sidebar.menu-min .nav-search .form-search{position:absolute;left:5px;z-index:14}.sidebar.menu-min .nav-search .nav-search-input{width:0!important;max-width:0!important;opacity:0!important;filter:alpha(opacity=0)!important}.sidebar.menu-min .nav-search .nav-search-input:active,.sidebar.menu-min .nav-search .nav-search-input:focus,.sidebar.menu-min .nav-search .nav-search-input:hover{width:162px!important;max-width:162px!important;opacity:1!important;filter:alpha(opacity=100)!important}.sidebar.menu-min .nav-search .nav-search-input:active~#nav-search-icon,.sidebar.menu-min .nav-search .nav-search-input:focus~#nav-search-icon,.sidebar.menu-min .nav-search .nav-search-input:hover~#nav-search-icon{border:none;border-radius:0;padding:0 3px!important}.sidebar.menu-min .nav-search:hover .nav-search-input{width:162px!important;max-width:162px!important;opacity:1!important;filter:alpha(opacity=100)!important}.sidebar.menu-min .nav-search:hover .nav-search-input~.nav-search-icon{border:none;border-radius:0;padding:0 3px!important}.sidebar.menu-min .nav-search .nav-search-icon{border:1px solid;border-radius:32px;background-color:#FFF;padding:0 5px!important}@media (max-width:991px){.sidebar.responsive-min .nav-search .form-search{position:absolute;left:5px;z-index:14}.sidebar.responsive-min .nav-search .nav-search-input{width:0!important;max-width:0!important;opacity:0!important;filter:alpha(opacity=0)!important}.sidebar.responsive-min .nav-search .nav-search-input:active,.sidebar.responsive-min .nav-search .nav-search-input:focus,.sidebar.responsive-min .nav-search .nav-search-input:hover{width:162px!important;max-width:162px!important;opacity:1!important;filter:alpha(opacity=100)!important}.sidebar.responsive-min .nav-search .nav-search-input:active~#nav-search-icon,.sidebar.responsive-min .nav-search .nav-search-input:focus~#nav-search-icon,.sidebar.responsive-min .nav-search .nav-search-input:hover~#nav-search-icon{border:none;border-radius:0;padding:0 3px!important}.sidebar.responsive-min .nav-search:hover .nav-search-input{width:162px!important;max-width:162px!important;opacity:1!important;filter:alpha(opacity=100)!important}.sidebar.responsive-min .nav-search:hover .nav-search-input~.nav-search-icon{border:none;border-radius:0;padding:0 3px!important}.sidebar.responsive-min .nav-search .nav-search-icon{border:1px solid;border-radius:32px;background-color:#FFF;padding:0 5px!important}}@media only screen and (max-width:991px){.nav-search{right:10px}.nav-search .nav-search-input{width:105px}.nav-search .nav-search-btn:active+.nav-search-input,.nav-search .nav-search-input:active,.nav-search .nav-search-input:focus,.nav-search .nav-search-input:hover,.nav-search:hover .nav-search-input{width:145px}}@media only screen and (max-width:767px){.nav-search .nav-search-input{width:0;opacity:0;filter:alpha(opacity=0);max-width:0}.nav-search .nav-search-btn:active+.nav-search-input,.nav-search .nav-search-input:active,.nav-search .nav-search-input:focus,.nav-search .nav-search-input:hover,.nav-search:hover .nav-search-input{opacity:1;filter:alpha(opacity=100);width:152px;max-width:152px}.nav-search .nav-search-icon{border:1px solid;border-radius:100%;background-color:#FFF;padding:0 5px!important}.nav-search .nav-search-input:active~.nav-search-icon,.nav-search .nav-search-input:focus~.nav-search-icon,.nav-search .nav-search-input:hover~.nav-search-icon,.nav-search:hover .nav-search-icon{border:none;border-radius:0;padding:0 3px!important}}.footer{padding-top:75px;height:0;width:0}.footer .footer-inner{text-align:center;position:absolute;z-index:auto;left:0;right:0;bottom:0}.sidebar~.footer .footer-inner{left:190px}@media (min-width:992px){.sidebar.compact~.footer .footer-inner{left:105px}}.sidebar.menu-min~.footer .footer-inner{left:43px}@media (min-width:992px){.sidebar.h-sidebar~.footer .footer-inner{left:0}}@media (max-width:991px){.footer .footer-inner,.sidebar.compact~.footer .footer-inner,.sidebar.menu-min~.footer .footer-inner,.sidebar~.footer .footer-inner{left:0}.sidebar.responsive-min~.footer .footer-inner{left:43px}}@media (min-width:768px) and (max-width:991px){.container.main-container .footer .footer-inner{left:auto!important;right:auto!important;margin-left:auto;width:744px}}@media (min-width:992px){.container.main-container .footer .footer-inner{left:auto!important;right:auto!important;width:964px}}@media (min-width:1200px){.container.main-container .footer .footer-inner{width:1164px}}@media (min-width:768px) and (max-width:991px){.container.main-container .sidebar~.footer .footer-inner{left:auto!important;right:auto!important;margin-left:auto;width:744px}}@media (min-width:992px){.container.main-container .sidebar~.footer .footer-inner{left:auto!important;right:auto!important;margin-left:190px;width:774px}}@media (min-width:1200px){.container.main-container .sidebar~.footer .footer-inner{margin-left:190px;width:974px}}@media (min-width:992px){.container.main-container .sidebar.compact~.footer .footer-inner{margin-left:105px;width:859px}}@media (min-width:1200px){.container.main-container .sidebar.compact~.footer .footer-inner{margin-left:105px;width:1059px}}@media (min-width:992px){.container.main-container .sidebar.menu-min~.footer .footer-inner{margin-left:43px;width:921px}}@media (min-width:1200px){.container.main-container .sidebar.menu-min~.footer .footer-inner{margin-left:43px;width:1121px}}@media (min-width:992px){.container.main-container .sidebar.h-sidebar~.footer .footer-inner{margin-left:0;width:964px}}@media (min-width:992px){.container.main-container .sidebar.h-sidebar~.footer .footer-inner{margin-left:0;width:964px}}@media (min-width:1200px){.container.main-container .sidebar.h-sidebar~.footer .footer-inner{margin-left:0;width:1164px}}@media (min-width:768px) and (max-width:991px){.container.main-container .sidebar.responsive-min~.footer .footer-inner{margin-left:43px;width:701px}}.footer .footer-inner .footer-content{position:absolute;left:12px;right:12px;bottom:4px;padding:8px;line-height:36px;border-top:3px double #E5E5E5}.footer.footer-fixed .footer-inner{position:fixed;z-index:999;bottom:0}.footer.footer-fixed .footer-inner .footer-content{left:2px;right:2px;bottom:2px;border:1px solid #DDD;background-color:#F2F2F2}.footer.footer-fixed+.btn-scroll-up{z-index:999}.btn{display:inline-block;color:#FFF!important;text-shadow:0 -1px 0 rgba(0,0,0,.25)!important;background-image:none!important;border:5px solid #FFF;border-radius:0;box-shadow:none!important;-webkit-transition:all ease .15s;-o-transition:all ease .15s;transition:all ease .15s;cursor:pointer;vertical-align:middle;margin:0;position:relative}.btn-lg{border-width:5px;line-height:1.35;padding:7px 16px}.btn-sm{border-width:4px;font-size:13px;padding:4px 9px;line-height:1.39}.btn-xs{border-width:3px}.btn-minier{padding:0 4px;line-height:18px;border-width:2px;font-size:12px}button.btn:active{top:1px}.btn,.btn-default,.btn-default:focus,.btn:focus{background-color:#abbac3!important;border-color:#abbac3}.btn-default:active,.btn-default:hover,.btn:active,.btn:hover,.open .btn-default.dropdown-toggle,.open .btn.dropdown-toggle{background-color:#8b9aa3!important;border-color:#abbac3}.btn-default.no-border:active,.btn-default.no-border:hover,.btn.no-border:active,.btn.no-border:hover{border-color:#8b9aa3}.btn-default.no-hover:active,.btn-default.no-hover:hover,.btn.no-hover:active,.btn.no-hover:hover{background-color:#abbac3!important}.btn-default.active,.btn.active{background-color:#9baab3!important;border-color:#8799a4}.btn-default.no-border.active,.btn.no-border.active{background-color:#92a3ac!important;border-color:#92a3ac}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{background-color:#abbac3!important;border-color:#abbac3}.btn-primary,.btn-primary:focus{background-color:#428bca!important;border-color:#428bca}.btn-primary:active,.btn-primary:hover,.open .btn-primary.dropdown-toggle{background-color:#1b6aaa!important;border-color:#428bca}.btn-primary.no-border:active,.btn-primary.no-border:hover{border-color:#1b6aaa}.btn-primary.no-hover:active,.btn-primary.no-hover:hover{background-color:#428bca!important}.btn-primary.active{background-color:#2f7bba!important;border-color:#27689d}.btn-primary.no-border.active{background-color:#2b72ae!important;border-color:#2b72ae}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#428bca!important;border-color:#428bca}.btn-info,.btn-info:focus{background-color:#6fb3e0!important;border-color:#6fb3e0}.btn-info:active,.btn-info:hover,.open .btn-info.dropdown-toggle{background-color:#4f99c6!important;border-color:#6fb3e0}.btn-info.no-border:active,.btn-info.no-border:hover{border-color:#4f99c6}.btn-info.no-hover:active,.btn-info.no-hover:hover{background-color:#6fb3e0!important}.btn-info.active{background-color:#5fa6d3!important;border-color:#4396cb}.btn-info.no-border.active{background-color:#539fd0!important;border-color:#539fd0}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#6fb3e0!important;border-color:#6fb3e0}.btn-info2,.btn-info2:focus{background-color:#95c6e5!important;border-color:#95c6e5}.btn-info2:active,.btn-info2:hover,.open .btn-info2.dropdown-toggle{background-color:#67a6ce!important;border-color:#95c6e5}.btn-info2.no-border:active,.btn-info2.no-border:hover{border-color:#67a6ce}.btn-info2.no-hover:active,.btn-info2.no-hover:hover{background-color:#95c6e5!important}.btn-info2.active{background-color:#7eb6da!important;border-color:#62a6d1}.btn-info2.no-border.active{background-color:#72afd6!important;border-color:#72afd6}.btn-info2.disabled,.btn-info2.disabled.active,.btn-info2.disabled:active,.btn-info2.disabled:focus,.btn-info2.disabled:hover,.btn-info2[disabled],.btn-info2[disabled].active,.btn-info2[disabled]:active,.btn-info2[disabled]:focus,.btn-info2[disabled]:hover,fieldset[disabled] .btn-info2,fieldset[disabled] .btn-info2.active,fieldset[disabled] .btn-info2:active,fieldset[disabled] .btn-info2:focus,fieldset[disabled] .btn-info2:hover{background-color:#95c6e5!important;border-color:#95c6e5}.btn-success,.btn-success:focus{background-color:#87b87f!important;border-color:#87b87f}.btn-success:active,.btn-success:hover,.open .btn-success.dropdown-toggle{background-color:#629b58!important;border-color:#87b87f}.btn-success.no-border:active,.btn-success.no-border:hover{border-color:#629b58}.btn-success.no-hover:active,.btn-success.no-hover:hover{background-color:#87b87f!important}.btn-success.active{background-color:#75aa6c!important;border-color:#629959}.btn-success.no-border.active{background-color:#6ba462!important;border-color:#6ba462}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#87b87f!important;border-color:#87b87f}.btn-warning,.btn-warning:focus{background-color:#ffb752!important;border-color:#ffb752}.btn-warning:active,.btn-warning:hover,.open .btn-warning.dropdown-toggle{background-color:#e59729!important;border-color:#ffb752}.btn-warning.no-border:active,.btn-warning.no-border:hover{border-color:#e59729}.btn-warning.no-hover:active,.btn-warning.no-hover:hover{background-color:#ffb752!important}.btn-warning.active{background-color:#f2a73e!important;border-color:#f0981c}.btn-warning.no-border.active{background-color:#f1a02f!important;border-color:#f1a02f}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#ffb752!important;border-color:#ffb752}.btn-danger,.btn-danger:focus{background-color:#d15b47!important;border-color:#d15b47}.btn-danger:active,.btn-danger:hover,.open .btn-danger.dropdown-toggle{background-color:#b74635!important;border-color:#d15b47}.btn-danger.no-border:active,.btn-danger.no-border:hover{border-color:#b74635}.btn-danger.no-hover:active,.btn-danger.no-hover:hover{background-color:#d15b47!important}.btn-danger.active{background-color:#c4513e!important;border-color:#aa4434}.btn-danger.no-border.active{background-color:#ba4b39!important;border-color:#ba4b39}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d15b47!important;border-color:#d15b47}.btn-inverse,.btn-inverse:focus{background-color:#555!important;border-color:#555}.btn-inverse:active,.btn-inverse:hover,.open .btn-inverse.dropdown-toggle{background-color:#303030!important;border-color:#555}.btn-inverse.no-border:active,.btn-inverse.no-border:hover{border-color:#303030}.btn-inverse.no-hover:active,.btn-inverse.no-hover:hover{background-color:#555!important}.btn-inverse.active{background-color:#434343!important;border-color:#313131}.btn-inverse.no-border.active{background-color:#3b3b3b!important;border-color:#3b3b3b}.btn-inverse.disabled,.btn-inverse.disabled.active,.btn-inverse.disabled:active,.btn-inverse.disabled:focus,.btn-inverse.disabled:hover,.btn-inverse[disabled],.btn-inverse[disabled].active,.btn-inverse[disabled]:active,.btn-inverse[disabled]:focus,.btn-inverse[disabled]:hover,fieldset[disabled] .btn-inverse,fieldset[disabled] .btn-inverse.active,fieldset[disabled] .btn-inverse:active,fieldset[disabled] .btn-inverse:focus,fieldset[disabled] .btn-inverse:hover{background-color:#555!important;border-color:#555}.btn-pink,.btn-pink:focus{background-color:#d6487e!important;border-color:#d6487e}.btn-pink:active,.btn-pink:hover,.open .btn-pink.dropdown-toggle{background-color:#b73766!important;border-color:#d6487e}.btn-pink.no-border:active,.btn-pink.no-border:hover{border-color:#b73766}.btn-pink.no-hover:active,.btn-pink.no-hover:hover{background-color:#d6487e!important}.btn-pink.active{background-color:#c74072!important;border-color:#af3462}.btn-pink.no-border.active{background-color:#be386a!important;border-color:#be386a}.btn-pink.disabled,.btn-pink.disabled.active,.btn-pink.disabled:active,.btn-pink.disabled:focus,.btn-pink.disabled:hover,.btn-pink[disabled],.btn-pink[disabled].active,.btn-pink[disabled]:active,.btn-pink[disabled]:focus,.btn-pink[disabled]:hover,fieldset[disabled] .btn-pink,fieldset[disabled] .btn-pink.active,fieldset[disabled] .btn-pink:active,fieldset[disabled] .btn-pink:focus,fieldset[disabled] .btn-pink:hover{background-color:#d6487e!important;border-color:#d6487e}.btn-purple,.btn-purple:focus{background-color:#9585bf!important;border-color:#9585bf}.btn-purple:active,.btn-purple:hover,.open .btn-purple.dropdown-toggle{background-color:#7461aa!important;border-color:#9585bf}.btn-purple.no-border:active,.btn-purple.no-border:hover{border-color:#7461aa}.btn-purple.no-hover:active,.btn-purple.no-hover:hover{background-color:#9585bf!important}.btn-purple.active{background-color:#8573b5!important;border-color:#705ca8}.btn-purple.no-border.active{background-color:#7c69af!important;border-color:#7c69af}.btn-purple.disabled,.btn-purple.disabled.active,.btn-purple.disabled:active,.btn-purple.disabled:focus,.btn-purple.disabled:hover,.btn-purple[disabled],.btn-purple[disabled].active,.btn-purple[disabled]:active,.btn-purple[disabled]:focus,.btn-purple[disabled]:hover,fieldset[disabled] .btn-purple,fieldset[disabled] .btn-purple.active,fieldset[disabled] .btn-purple:active,fieldset[disabled] .btn-purple:focus,fieldset[disabled] .btn-purple:hover{background-color:#9585bf!important;border-color:#9585bf}.btn-grey,.btn-grey:focus{background-color:#a0a0a0!important;border-color:#a0a0a0}.btn-grey:active,.btn-grey:hover,.open .btn-grey.dropdown-toggle{background-color:#888!important;border-color:#a0a0a0}.btn-grey.no-border:active,.btn-grey.no-border:hover{border-color:#888}.btn-grey.no-hover:active,.btn-grey.no-hover:hover{background-color:#a0a0a0!important}.btn-grey.active{background-color:#949494!important;border-color:#828282}.btn-grey.no-border.active{background-color:#8c8c8c!important;border-color:#8c8c8c}.btn-grey.disabled,.btn-grey.disabled.active,.btn-grey.disabled:active,.btn-grey.disabled:focus,.btn-grey.disabled:hover,.btn-grey[disabled],.btn-grey[disabled].active,.btn-grey[disabled]:active,.btn-grey[disabled]:focus,.btn-grey[disabled]:hover,fieldset[disabled] .btn-grey,fieldset[disabled] .btn-grey.active,fieldset[disabled] .btn-grey:active,fieldset[disabled] .btn-grey:focus,fieldset[disabled] .btn-grey:hover{background-color:#a0a0a0!important;border-color:#a0a0a0}.btn-yellow{color:#963!important;text-shadow:0 -1px 0 rgba(255,255,255,.4)!important}.btn-yellow,.btn-yellow:focus{background-color:#fee188!important;border-color:#fee188}.btn-yellow:active,.btn-yellow:hover,.open .btn-yellow.dropdown-toggle{background-color:#f7d05b!important;border-color:#fee188}.btn-yellow.no-border:active,.btn-yellow.no-border:hover{border-color:#f7d05b}.btn-yellow.no-hover:active,.btn-yellow.no-hover:hover{background-color:#fee188!important}.btn-yellow.active{background-color:#fbd972!important;border-color:#f9cf4f}.btn-yellow.no-border.active{background-color:#fad463!important;border-color:#fad463}.btn-yellow.disabled,.btn-yellow.disabled.active,.btn-yellow.disabled:active,.btn-yellow.disabled:focus,.btn-yellow.disabled:hover,.btn-yellow[disabled],.btn-yellow[disabled].active,.btn-yellow[disabled]:active,.btn-yellow[disabled]:focus,.btn-yellow[disabled]:hover,fieldset[disabled] .btn-yellow,fieldset[disabled] .btn-yellow.active,fieldset[disabled] .btn-yellow:active,fieldset[disabled] .btn-yellow:focus,fieldset[disabled] .btn-yellow:hover{background-color:#fee188!important;border-color:#fee188}.btn-light{color:#888!important;text-shadow:0 -1px 0 rgba(250,250,250,.25)!important}.btn-light,.btn-light:focus{background-color:#e7e7e7!important;border-color:#e7e7e7}.btn-light:active,.btn-light:hover,.open .btn-light.dropdown-toggle{background-color:#d9d9d9!important;border-color:#e7e7e7}.btn-light.no-border:active,.btn-light.no-border:hover{border-color:#d9d9d9}.btn-light.no-hover:active,.btn-light.no-hover:hover{background-color:#e7e7e7!important}.btn-light.active{background-color:#e0e0e0!important;border-color:#cecece}.btn-light.no-border.active{background-color:#d8d8d8!important;border-color:#d8d8d8}.btn-light.disabled,.btn-light.disabled.active,.btn-light.disabled:active,.btn-light.disabled:focus,.btn-light.disabled:hover,.btn-light[disabled],.btn-light[disabled].active,.btn-light[disabled]:active,.btn-light[disabled]:focus,.btn-light[disabled]:hover,fieldset[disabled] .btn-light,fieldset[disabled] .btn-light.active,fieldset[disabled] .btn-light:active,fieldset[disabled] .btn-light:focus,fieldset[disabled] .btn-light:hover{background-color:#e7e7e7!important;border-color:#e7e7e7}.btn-light.btn-xs:after{left:-2px;right:-2px;top:-2px;bottom:-2px}.btn-light.btn-sm:after{left:-4px;right:-4px;top:-4px;bottom:-4px}.btn-light .btn-lg:after{left:-6px;right:-6px;top:-6px;bottom:-6px}.btn.btn-white{text-shadow:none!important;background-color:#FFF!important}.btn.btn-white.no-hover:active,.btn.btn-white.no-hover:hover{background-color:#FFF!important}.btn.btn-white.active,.btn.btn-white:focus{box-shadow:inset 1px 1px 2px 0 rgba(0,0,0,.1)!important}.btn.btn-white.active.btn-bold,.btn.btn-white:focus.btn-bold{box-shadow:inset 1px 1px 3px 0 rgba(0,0,0,.15)!important}.btn.btn-white.active:after{display:none}.btn.btn-white{border-color:#ccc;color:#444!important}.btn.btn-white.active,.btn.btn-white:active,.btn.btn-white:focus,.btn.btn-white:hover,.open .btn.btn-white.dropdown-toggle{background-color:#ebebeb!important;border-color:#ccc}.btn.btn-white:hover{color:#3a3434!important}.btn.btn-white.disabled,.btn.btn-white.disabled.active,.btn.btn-white.disabled:active,.btn.btn-white.disabled:focus,.btn.btn-white.disabled:hover,.btn.btn-white.no-border:active,.btn.btn-white.no-border:hover,.btn.btn-white[disabled],.btn.btn-white[disabled].active,.btn.btn-white[disabled]:active,.btn.btn-white[disabled]:focus,.btn.btn-white[disabled]:hover,fieldset[disabled] .btn.btn-white,fieldset[disabled] .btn.btn-white.active,fieldset[disabled] .btn.btn-white:active,fieldset[disabled] .btn.btn-white:focus,fieldset[disabled] .btn.btn-white:hover{border-color:#ccc}.btn-white.btn-default{border-color:#abbac3;color:#80909a!important}.btn-white.btn-default.active,.btn-white.btn-default:active,.btn-white.btn-default:focus,.btn-white.btn-default:hover,.open .btn-white.btn-default.dropdown-toggle{background-color:#eff2f4!important;border-color:#abbac3}.btn-white.btn-default:hover{color:#6b8595!important}.btn-white.btn-default.disabled,.btn-white.btn-default.disabled.active,.btn-white.btn-default.disabled:active,.btn-white.btn-default.disabled:focus,.btn-white.btn-default.disabled:hover,.btn-white.btn-default.no-border:active,.btn-white.btn-default.no-border:hover,.btn-white.btn-default[disabled],.btn-white.btn-default[disabled].active,.btn-white.btn-default[disabled]:active,.btn-white.btn-default[disabled]:focus,.btn-white.btn-default[disabled]:hover,fieldset[disabled] .btn-white.btn-default,fieldset[disabled] .btn-white.btn-default.active,fieldset[disabled] .btn-white.btn-default:active,fieldset[disabled] .btn-white.btn-default:focus,fieldset[disabled] .btn-white.btn-default:hover{border-color:#abbac3}.btn-white.btn-primary{border-color:#8aafce;color:#6688a6!important}.btn-white.btn-primary.active,.btn-white.btn-primary:active,.btn-white.btn-primary:focus,.btn-white.btn-primary:hover,.open .btn-white.btn-primary.dropdown-toggle{background-color:#eaf2f8!important;border-color:#8aafce}.btn-white.btn-primary:hover{color:#537c9f!important}.btn-white.btn-primary.disabled,.btn-white.btn-primary.disabled.active,.btn-white.btn-primary.disabled:active,.btn-white.btn-primary.disabled:focus,.btn-white.btn-primary.disabled:hover,.btn-white.btn-primary.no-border:active,.btn-white.btn-primary.no-border:hover,.btn-white.btn-primary[disabled],.btn-white.btn-primary[disabled].active,.btn-white.btn-primary[disabled]:active,.btn-white.btn-primary[disabled]:focus,.btn-white.btn-primary[disabled]:hover,fieldset[disabled] .btn-white.btn-primary,fieldset[disabled] .btn-white.btn-primary.active,fieldset[disabled] .btn-white.btn-primary:active,fieldset[disabled] .btn-white.btn-primary:focus,fieldset[disabled] .btn-white.btn-primary:hover{border-color:#8aafce}.btn-white.btn-success{border-color:#a7c9a1;color:#81a87b!important}.btn-white.btn-success.active,.btn-white.btn-success:active,.btn-white.btn-success:focus,.btn-white.btn-success:hover,.open .btn-white.btn-success.dropdown-toggle{background-color:#edf4eb!important;border-color:#a7c9a1}.btn-white.btn-success:hover{color:#6ea465!important}.btn-white.btn-success.disabled,.btn-white.btn-success.disabled.active,.btn-white.btn-success.disabled:active,.btn-white.btn-success.disabled:focus,.btn-white.btn-success.disabled:hover,.btn-white.btn-success.no-border:active,.btn-white.btn-success.no-border:hover,.btn-white.btn-success[disabled],.btn-white.btn-success[disabled].active,.btn-white.btn-success[disabled]:active,.btn-white.btn-success[disabled]:focus,.btn-white.btn-success[disabled]:hover,fieldset[disabled] .btn-white.btn-success,fieldset[disabled] .btn-white.btn-success.active,fieldset[disabled] .btn-white.btn-success:active,fieldset[disabled] .btn-white.btn-success:focus,fieldset[disabled] .btn-white.btn-success:hover{border-color:#a7c9a1}.btn-white.btn-danger{border-color:#d7a59d;color:#b7837a!important}.btn-white.btn-danger.active,.btn-white.btn-danger:active,.btn-white.btn-danger:focus,.btn-white.btn-danger:hover,.open .btn-white.btn-danger.dropdown-toggle{background-color:#fbf4f3!important;border-color:#d7a59d}.btn-white.btn-danger:hover{color:#b46f64!important}.btn-white.btn-danger.disabled,.btn-white.btn-danger.disabled.active,.btn-white.btn-danger.disabled:active,.btn-white.btn-danger.disabled:focus,.btn-white.btn-danger.disabled:hover,.btn-white.btn-danger.no-border:active,.btn-white.btn-danger.no-border:hover,.btn-white.btn-danger[disabled],.btn-white.btn-danger[disabled].active,.btn-white.btn-danger[disabled]:active,.btn-white.btn-danger[disabled]:focus,.btn-white.btn-danger[disabled]:hover,fieldset[disabled] .btn-white.btn-danger,fieldset[disabled] .btn-white.btn-danger.active,fieldset[disabled] .btn-white.btn-danger:active,fieldset[disabled] .btn-white.btn-danger:focus,fieldset[disabled] .btn-white.btn-danger:hover{border-color:#d7a59d}.btn-white.btn-warning{border-color:#e7b979;color:#daa458!important}.btn-white.btn-warning.active,.btn-white.btn-warning:active,.btn-white.btn-warning:focus,.btn-white.btn-warning:hover,.open .btn-white.btn-warning.dropdown-toggle{background-color:#fef7ec!important;border-color:#e7b979}.btn-white.btn-warning:hover{color:#db9a3d!important}.btn-white.btn-warning.disabled,.btn-white.btn-warning.disabled.active,.btn-white.btn-warning.disabled:active,.btn-white.btn-warning.disabled:focus,.btn-white.btn-warning.disabled:hover,.btn-white.btn-warning.no-border:active,.btn-white.btn-warning.no-border:hover,.btn-white.btn-warning[disabled],.btn-white.btn-warning[disabled].active,.btn-white.btn-warning[disabled]:active,.btn-white.btn-warning[disabled]:focus,.btn-white.btn-warning[disabled]:hover,fieldset[disabled] .btn-white.btn-warning,fieldset[disabled] .btn-white.btn-warning.active,fieldset[disabled] .btn-white.btn-warning:active,fieldset[disabled] .btn-white.btn-warning:focus,fieldset[disabled] .btn-white.btn-warning:hover{border-color:#e7b979}.btn-white.btn-info{border-color:#8fbcd9;color:#70a0c1!important}.btn-white.btn-info.active,.btn-white.btn-info:active,.btn-white.btn-info:focus,.btn-white.btn-info:hover,.open .btn-white.btn-info.dropdown-toggle{background-color:#eef5fa!important;border-color:#8fbcd9}.btn-white.btn-info:hover{color:#5896bf!important}.btn-white.btn-info.disabled,.btn-white.btn-info.disabled.active,.btn-white.btn-info.disabled:active,.btn-white.btn-info.disabled:focus,.btn-white.btn-info.disabled:hover,.btn-white.btn-info.no-border:active,.btn-white.btn-info.no-border:hover,.btn-white.btn-info[disabled],.btn-white.btn-info[disabled].active,.btn-white.btn-info[disabled]:active,.btn-white.btn-info[disabled]:focus,.btn-white.btn-info[disabled]:hover,fieldset[disabled] .btn-white.btn-info,fieldset[disabled] .btn-white.btn-info.active,fieldset[disabled] .btn-white.btn-info:active,fieldset[disabled] .btn-white.btn-info:focus,fieldset[disabled] .btn-white.btn-info:hover{border-color:#8fbcd9}.btn-white.btn-inverse{border-color:#959595;color:#555!important}.btn-white.btn-inverse.active,.btn-white.btn-inverse:active,.btn-white.btn-inverse:focus,.btn-white.btn-inverse:hover,.open .btn-white.btn-inverse.dropdown-toggle{background-color:#e4e4e4!important;border-color:#959595}.btn-white.btn-inverse:hover{color:#4c4545!important}.btn-white.btn-inverse.disabled,.btn-white.btn-inverse.disabled.active,.btn-white.btn-inverse.disabled:active,.btn-white.btn-inverse.disabled:focus,.btn-white.btn-inverse.disabled:hover,.btn-white.btn-inverse.no-border:active,.btn-white.btn-inverse.no-border:hover,.btn-white.btn-inverse[disabled],.btn-white.btn-inverse[disabled].active,.btn-white.btn-inverse[disabled]:active,.btn-white.btn-inverse[disabled]:focus,.btn-white.btn-inverse[disabled]:hover,fieldset[disabled] .btn-white.btn-inverse,fieldset[disabled] .btn-white.btn-inverse.active,fieldset[disabled] .btn-white.btn-inverse:active,fieldset[disabled] .btn-white.btn-inverse:focus,fieldset[disabled] .btn-white.btn-inverse:hover{border-color:#959595}.btn-white.btn-pink{border-color:#d299ae;color:#af6f87!important}.btn-white.btn-pink.active,.btn-white.btn-pink:active,.btn-white.btn-pink:focus,.btn-white.btn-pink:hover,.open .btn-white.btn-pink.dropdown-toggle{background-color:#fbeff4!important;border-color:#d299ae}.btn-white.btn-pink:hover{color:#ac5978!important}.btn-white.btn-pink.disabled,.btn-white.btn-pink.disabled.active,.btn-white.btn-pink.disabled:active,.btn-white.btn-pink.disabled:focus,.btn-white.btn-pink.disabled:hover,.btn-white.btn-pink.no-border:active,.btn-white.btn-pink.no-border:hover,.btn-white.btn-pink[disabled],.btn-white.btn-pink[disabled].active,.btn-white.btn-pink[disabled]:active,.btn-white.btn-pink[disabled]:focus,.btn-white.btn-pink[disabled]:hover,fieldset[disabled] .btn-white.btn-pink,fieldset[disabled] .btn-white.btn-pink.active,fieldset[disabled] .btn-white.btn-pink:active,fieldset[disabled] .btn-white.btn-pink:focus,fieldset[disabled] .btn-white.btn-pink:hover{border-color:#d299ae}.btn-white.btn-purple{border-color:#b7b1c6;color:#7d6fa2!important}.btn-white.btn-purple.active,.btn-white.btn-purple:active,.btn-white.btn-purple:focus,.btn-white.btn-purple:hover,.open .btn-white.btn-purple.dropdown-toggle{background-color:#efedf5!important;border-color:#b7b1c6}.btn-white.btn-purple:hover{color:#6d5b9c!important}.btn-white.btn-purple.disabled,.btn-white.btn-purple.disabled.active,.btn-white.btn-purple.disabled:active,.btn-white.btn-purple.disabled:focus,.btn-white.btn-purple.disabled:hover,.btn-white.btn-purple.no-border:active,.btn-white.btn-purple.no-border:hover,.btn-white.btn-purple[disabled],.btn-white.btn-purple[disabled].active,.btn-white.btn-purple[disabled]:active,.btn-white.btn-purple[disabled]:focus,.btn-white.btn-purple[disabled]:hover,fieldset[disabled] .btn-white.btn-purple,fieldset[disabled] .btn-white.btn-purple.active,fieldset[disabled] .btn-white.btn-purple:active,fieldset[disabled] .btn-white.btn-purple:focus,fieldset[disabled] .btn-white.btn-purple:hover{border-color:#b7b1c6}.btn-white.btn-yellow{border-color:#ecd181;color:#d3a61a!important}.btn-white.btn-yellow.active,.btn-white.btn-yellow:active,.btn-white.btn-yellow:focus,.btn-white.btn-yellow:hover,.open .btn-white.btn-yellow.dropdown-toggle{background-color:#fdf7e4!important;border-color:#ecd181}.btn-white.btn-yellow:hover{color:#c29712!important}.btn-white.btn-yellow.disabled,.btn-white.btn-yellow.disabled.active,.btn-white.btn-yellow.disabled:active,.btn-white.btn-yellow.disabled:focus,.btn-white.btn-yellow.disabled:hover,.btn-white.btn-yellow.no-border:active,.btn-white.btn-yellow.no-border:hover,.btn-white.btn-yellow[disabled],.btn-white.btn-yellow[disabled].active,.btn-white.btn-yellow[disabled]:active,.btn-white.btn-yellow[disabled]:focus,.btn-white.btn-yellow[disabled]:hover,fieldset[disabled] .btn-white.btn-yellow,fieldset[disabled] .btn-white.btn-yellow.active,fieldset[disabled] .btn-white.btn-yellow:active,fieldset[disabled] .btn-white.btn-yellow:focus,fieldset[disabled] .btn-white.btn-yellow:hover{border-color:#ecd181}.btn-white.btn-grey{border-color:#c6c6c6;color:#8c8c8c!important}.btn-white.btn-grey.active,.btn-white.btn-grey:active,.btn-white.btn-grey:focus,.btn-white.btn-grey:hover,.open .btn-white.btn-grey.dropdown-toggle{background-color:#ededed!important;border-color:#c6c6c6}.btn-white.btn-grey:hover{color:#857979!important}.btn-white.btn-grey.disabled,.btn-white.btn-grey.disabled.active,.btn-white.btn-grey.disabled:active,.btn-white.btn-grey.disabled:focus,.btn-white.btn-grey.disabled:hover,.btn-white.btn-grey.no-border:active,.btn-white.btn-grey.no-border:hover,.btn-white.btn-grey[disabled],.btn-white.btn-grey[disabled].active,.btn-white.btn-grey[disabled]:active,.btn-white.btn-grey[disabled]:focus,.btn-white.btn-grey[disabled]:hover,fieldset[disabled] .btn-white.btn-grey,fieldset[disabled] .btn-white.btn-grey.active,fieldset[disabled] .btn-white.btn-grey:active,fieldset[disabled] .btn-white.btn-grey:focus,fieldset[disabled] .btn-white.btn-grey:hover{border-color:#c6c6c6}.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus{outline:0}.btn.disabled:active,.btn[disabled]:active{top:0;left:0}.btn.active{color:#efe5b5}.btn.active:after{display:inline-block;content:"";position:absolute;border-bottom:1px solid #efe5b5;left:-4px;right:-4px;bottom:-4px}.btn.active.btn-sm:after{left:-3px;right:-3px;bottom:-3px}.btn.active.btn-lg:after{left:-5px;right:-5px;bottom:-5px}.btn.active.btn-minier:after,.btn.active.btn-xs:after{left:-1px;right:-1px;bottom:-2px}.btn.active.btn-minier:after{bottom:-1px}.btn.active.btn-yellow:after{border-bottom-color:#c96338}.btn.active.btn-light{color:#515151}.btn.active.btn-light:after{border-bottom-color:#B5B5B5}.btn>.ace-icon{margin-right:4px}.btn>.ace-icon.icon-on-right{margin-right:0;margin-left:4px}.btn>.icon-only.ace-icon{margin:0!important;text-align:center;padding:0}.btn-large>.ace-icon{margin-right:6px}.btn-large>.ace-icon.icon-on-right{margin-right:0;margin-left:6px}.btn-sm>.ace-icon{margin-right:3px}.btn-sm>.ace-icon.icon-on-right{margin-right:0;margin-left:3px}.btn-minier>.ace-icon,.btn-xs>.ace-icon{margin-right:2px}.btn-minier>.ace-icon.icon-on-right,.btn-xs>.ace-icon.icon-on-right{margin-right:0;margin-left:2px}.btn.btn-link{border:none!important;background:0 0!important;color:#08c!important;text-shadow:none!important;padding:4px 12px!important;line-height:20px!important}.btn.btn-link:hover{background:none!important;text-shadow:none!important}.btn.btn-link.active{background:none!important;text-decoration:underline;color:#009ceb!important}.btn.btn-link.active:after{display:none}.btn.btn-link.disabled,.btn.btn-link[disabled]{background:0 0!important;opacity:.65;filter:alpha(opacity=65);text-decoration:none!important}.btn.btn-no-border{border-width:0!important}.btn-group:first-child{margin-left:0}.btn-group>.btn,.btn-group>.btn+.btn,.btn-group>.btn:first-child{margin:0 1px 0 0}.btn-group>.btn:first-child,.btn-group>.btn:last-child{border-radius:0}.btn-group>.btn>.caret{margin-top:15px;margin-left:1px;border-width:5px;border-top-color:#FFF}.btn-group>.btn.btn-sm>.caret{margin-top:10px;border-width:4px}.btn-group>.btn.btn-large>.caret{margin-top:18px;border-width:6px}.btn-group>.btn.btn-xs>.caret{margin-top:9px;border-width:4px}.btn-group>.btn.btn-minier>.caret{margin-top:7px;border-width:3px}.btn-group>.btn+.btn.dropdown-toggle{padding-right:3px;padding-left:3px}.btn-group>.btn+.btn-large.dropdown-toggle{padding-right:4px;padding-left:4px}.btn-group .dropdown-toggle{border-radius:0}.btn-group+.btn,.btn-group>.btn{margin:0 1px 0 0;border-width:3px}.btn-group+.btn.active:after,.btn-group>.btn.active:after{left:-2px;right:-2px;bottom:-2px;border-bottom-width:1px}.btn-group+.btn-large,.btn-group>.btn-large{border-width:4px}.btn-group+.btn-large.active:after,.btn-group>.btn-large.active:after{left:-3px;right:-3px;bottom:-3px;border-bottom-width:1px}.btn-group+.btn-sm,.btn-group>.btn-sm{border-width:2px}.btn-group+.btn-sm.active:after,.btn-group>.btn-sm.active:after{left:-1px;right:-1px;bottom:-1px;border-bottom-width:1px}.btn-group+.btn-xs,.btn-group>.btn-xs{border-width:1px}.btn-group+.btn-xs.active:after,.btn-group>.btn-xs.active:after{left:0;right:0;bottom:0;border-bottom-width:1px}.btn-group+.btn-minier,.btn-group>.btn-minier{border-width:1px}.btn-group+.btn-minier.active:after,.btn-group>.btn-minier.active:after{left:0;right:0;bottom:0;border-bottom-width:1px}.btn-group>.btn{border-radius:0!important}.btn-group>.btn.btn-round{border-radius:4px!important}.btn-group-vertical>.btn,.btn-group-vertical>.btn+.btn{margin:1px 0 0!important}.btn-group-vertical>.btn:first-child{margin-top:0!important}.btn-group.btn-overlap>.btn{margin-right:-1px}.btn-group.btn-corner>.btn:first-child{border-bottom-left-radius:8px!important;border-top-left-radius:8px!important}.btn-group.btn-corner>.btn:last-child{border-bottom-right-radius:8px!important;border-top-right-radius:8px!important}.btn-group.btn-corner>.btn.btn-sm:first-child{border-bottom-left-radius:6px!important;border-top-left-radius:6px!important}.btn-group.btn-corner>.btn.btn-sm:last-child{border-bottom-right-radius:6px!important;border-top-right-radius:6px!important}.btn-group.btn-corner>.btn.btn-xs:first-child{border-bottom-left-radius:4px!important;border-top-left-radius:4px!important}.btn-group.btn-corner>.btn.btn-xs:last-child{border-bottom-right-radius:4px!important;border-top-right-radius:4px!important}.btn.btn-white{border-width:1px}.btn.btn-bold{border-bottom-width:2px}.btn.btn-round{border-bottom-width:2px;border-radius:4px!important}.btn.btn-app{display:inline-block;width:100px;font-size:18px;font-weight:400;color:#FFF;text-align:center;text-shadow:0 -1px -1px rgba(0,0,0,.2)!important;border:none;border-radius:12px;padding:12px 0 8px;margin:2px;line-height:1.7;position:relative}.btn-app,.btn-app.btn-default,.btn-app.btn-default.disabled:hover,.btn-app.btn-default.no-hover:hover,.btn-app.disabled:hover,.btn-app.no-hover:hover{background:#b4c2cc!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbcc9d5', endColorstr='#ffabbac3', GradientType=0)!important}.btn-app.btn-default:hover,.btn-app:hover{background:#9baebc!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa3b5c5', endColorstr='#ff93a6b2', GradientType=0)!important}.btn-app.btn-primary,.btn-app.btn-primary.disabled:hover,.btn-app.btn-primary.no-hover:hover{background:#2a8bcb!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3b98d6', endColorstr='#ff197ec1', GradientType=0)!important}.btn-app.btn-primary:hover{background:#1d6fa6!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff267eb8', endColorstr='#ff136194', GradientType=0)!important}.btn-app.btn-info,.btn-app.btn-info.disabled:hover,.btn-app.btn-info.no-hover:hover{background:#68adde!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff75b5e6', endColorstr='#ff5ba4d5', GradientType=0)!important}.btn-app.btn-info:hover{background:#3f96d4!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4a9ede', endColorstr='#ff348dc9', GradientType=0)!important}.btn-app.btn-success,.btn-app.btn-success.disabled:hover,.btn-app.btn-success.no-hover:hover{background:#85b558!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ebf60', endColorstr='#ff7daa50', GradientType=0)!important}.btn-app.btn-success:hover{background:#6c9842!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff74a844', endColorstr='#ff648740', GradientType=0)!important}.btn-app.btn-danger,.btn-app.btn-danger.disabled:hover,.btn-app.btn-danger.no-hover:hover{background:#d3413b!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd55b52', endColorstr='#ffd12723', GradientType=0)!important}.btn-app.btn-danger:hover{background:#b52c26!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc43a30', endColorstr='#ffa51f1c', GradientType=0)!important}.btn-app.btn-warning,.btn-app.btn-warning.disabled:hover,.btn-app.btn-warning.no-hover:hover{background:#ffb44b!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffbf66', endColorstr='#ffffa830', GradientType=0)!important}.btn-app.btn-warning:hover{background:#fe9e19!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffaa33', endColorstr='#fffc9200', GradientType=0)!important}.btn-app.btn-purple,.btn-app.btn-purple.disabled:hover,.btn-app.btn-purple.no-hover:hover{background:#9889c1!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa696ce', endColorstr='#ff8a7cb4', GradientType=0)!important}.btn-app.btn-purple:hover{background:#7b68af!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8973be', endColorstr='#ff6d5ca1', GradientType=0)!important}.btn-app.btn-pink,.btn-app.btn-pink.disabled:hover,.btn-app.btn-pink.no-hover:hover{background:#d54c7e!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdb5e8c', endColorstr='#ffce3970', GradientType=0)!important}.btn-app.btn-pink:hover{background:#be2f64!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd2346e', endColorstr='#ffaa2a59', GradientType=0)!important}.btn-app.btn-inverse,.btn-app.btn-inverse.disabled:hover,.btn-app.btn-inverse.no-hover:hover{background:#444!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=0)!important}.btn-app.btn-inverse:hover{background:#2b2b2b!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3b3b3b', endColorstr='#ff1a1a1a', GradientType=0)!important}.btn-app.btn-grey,.btn-app.btn-grey.disabled:hover,.btn-app.btn-grey.no-hover:hover{background:#797979!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff898989', endColorstr='#ff696969', GradientType=0)!important}.btn-app.btn-grey:hover{background:#6c6c6c!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff7c7c7c', endColorstr='#ff5c5c5c', GradientType=0)!important}.btn.btn-app.btn-light{color:#5a5a5a!important;text-shadow:0 1px 1px #EEE!important}.btn.btn-app.btn-light,.btn.btn-app.btn-light.disabled:hover,.btn.btn-app.btn-light.no-hover:hover{background:#ededed!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff4f4f4', endColorstr='#ffe6e6e6', GradientType=0)!important}.btn.btn-app.btn-light:hover{background:#e0e0e0!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe7e7e7', endColorstr='#ffd9d9d9', GradientType=0)!important}.btn.btn-app.btn-yellow{color:#963!important;text-shadow:0 -1px 0 rgba(255,255,255,.4)!important}.btn.btn-app.btn-yellow,.btn.btn-app.btn-yellow.disabled:hover,.btn.btn-app.btn-yellow.no-hover:hover{background:#fee088!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffe8a5', endColorstr='#fffcd76a', GradientType=0)!important}.btn.btn-app.btn-yellow:hover{background:#fdd96e!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffe18b', endColorstr='#fffbd051', GradientType=0)!important}.btn.btn-app.btn-sm{width:80px;font-size:16px;border-radius:10px;line-height:1.5}.btn.btn-app.btn-xs{width:64px;font-size:15px;border-radius:8px;padding-bottom:7px;padding-top:8px;line-height:1.45}.btn.btn-app>.ace-icon{display:block;font-size:42px;margin:0 0 4px;line-height:36px;min-width:0;padding:0}.btn.btn-app.btn-sm>.ace-icon{display:block;font-size:32px;line-height:30px;margin:0 0 3px}.btn.btn-app.btn-xs>.ace-icon{display:block;font-size:24px;line-height:24px;margin:0}.btn.btn-app.no-radius{border-radius:0}.btn.btn-app.radius-4{border-radius:4px}.btn.btn-app>.badge,.btn.btn-app>.label{position:absolute!important;top:-2px;right:-2px;padding:1px 3px;text-align:center;font-size:12px;color:#FFF}.btn.btn-app>.badge.badge-left,.btn.btn-app>.badge.label-left,.btn.btn-app>.label.badge-left,.btn.btn-app>.label.label-left{right:auto;left:-2px}.btn.btn-app>.label{padding:1px 6px 3px;font-size:13px}.btn.btn-app.no-radius>.badge,.btn.btn-app.radius-4>.badge{border-radius:3px}.btn.btn-app.no-radius>.badge.no-radius,.btn.btn-app.radius-4>.badge.no-radius{border-radius:0}.btn.btn-app.active{color:#fff}.btn.btn-app.active:after{display:none}.btn.btn-app.active.btn-yellow{color:#963;border-color:#fee188}.btn.btn-app.active.btn-light{color:#515151}.btn.btn-app.btn-light,.btn.btn-app.btn-yellow{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.08) inset!important;box-shadow:0 0 0 1px rgba(0,0,0,.08) inset!important}.label{border-radius:0;text-shadow:none;font-weight:400;display:inline-block;background-color:#abbac3!important}.label[class*=col-][class*=arrow]{min-height:0}@media screen and (-webkit-min-device-pixel-ratio:0){.badge:empty,.label:empty,::safari-only{display:inline-block}}.badge{text-shadow:none;font-size:12px;padding-top:1px;padding-bottom:3px;font-weight:400;line-height:15px;background-color:#abbac3!important}.badge.no-radius{border-radius:0}.badge.radius-1{border-radius:1px}.badge.radius-2{border-radius:2px}.badge.radius-3{border-radius:3px}.badge.radius-4{border-radius:4px}.badge.radius-5{border-radius:5px}.badge.radius-6{border-radius:6px}.badge-transparent,.label-transparent{background-color:transparent!important}.badge-grey,.label-grey{background-color:#a0a0a0!important}.badge-info,.label-info{background-color:#3a87ad!important}.badge-primary,.label-primary{background-color:#428bca!important}.badge-success,.label-success{background-color:#82af6f!important}.badge-danger,.badge-important,.label-danger,.label-important{background-color:#d15b47!important}.badge-inverse,.label-inverse{background-color:#333!important}.badge-warning,.label-warning{background-color:#f89406!important}.badge-pink,.label-pink{background-color:#d6487e!important}.badge-purple,.label-purple{background-color:#9585bf!important}.badge-yellow,.label-yellow{background-color:#fee188!important}.badge-light,.label-light{background-color:#e7e7e7!important}.badge-yellow,.label-yellow{color:#963!important;border-color:#fee188}.badge-light,.label-light{color:#888!important}.label.arrowed,.label.arrowed-in{position:relative;z-index:1}.label.arrowed-in:before,.label.arrowed:before{display:inline-block;content:"";position:absolute;top:0;z-index:-1;border:1px solid transparent;border-right-color:#abbac3;-moz-border-right-colors:#abbac3}.label.arrowed-in:before{border-color:#abbac3;border-left-color:transparent!important;-moz-border-left-colors:none!important}.label.arrowed-in-right,.label.arrowed-right{position:relative;z-index:1}.label.arrowed-in-right:after,.label.arrowed-right:after{display:inline-block;content:"";position:absolute;top:0;z-index:-1;border:1px solid transparent;border-left-color:#abbac3;-moz-border-left-colors:#abbac3}.label.arrowed-in-right:after{border-color:#abbac3;border-right-color:transparent!important;-moz-border-right-colors:none!important}.label-info.arrowed:before{border-right-color:#3a87ad;-moz-border-right-colors:#3a87ad}.label-info.arrowed-in:before{border-color:#3a87ad;-moz-border-right-colors:#3a87ad}.label-info.arrowed-right:after{border-left-color:#3a87ad;-moz-border-left-colors:#3a87ad}.label-info.arrowed-in-right:after{border-color:#3a87ad;-moz-border-left-colors:#3a87ad}.label-primary.arrowed:before{border-right-color:#428bca;-moz-border-right-colors:#428bca}.label-primary.arrowed-in:before{border-color:#428bca;-moz-border-right-colors:#428bca}.label-primary.arrowed-right:after{border-left-color:#428bca;-moz-border-left-colors:#428bca}.label-primary.arrowed-in-right:after{border-color:#428bca;-moz-border-left-colors:#428bca}.label-success.arrowed:before{border-right-color:#82af6f;-moz-border-right-colors:#82af6f}.label-success.arrowed-in:before{border-color:#82af6f;-moz-border-right-colors:#82af6f}.label-success.arrowed-right:after{border-left-color:#82af6f;-moz-border-left-colors:#82af6f}.label-success.arrowed-in-right:after{border-color:#82af6f;-moz-border-left-colors:#82af6f}.label-warning.arrowed:before{border-right-color:#f89406;-moz-border-right-colors:#f89406}.label-warning.arrowed-in:before{border-color:#f89406;-moz-border-right-colors:#f89406}.label-warning.arrowed-right:after{border-left-color:#f89406;-moz-border-left-colors:#f89406}.label-warning.arrowed-in-right:after{border-color:#f89406;-moz-border-left-colors:#f89406}.label-important.arrowed:before{border-right-color:#d15b47;-moz-border-right-colors:#d15b47}.label-important.arrowed-in:before{border-color:#d15b47;-moz-border-right-colors:#d15b47}.label-important.arrowed-right:after{border-left-color:#d15b47;-moz-border-left-colors:#d15b47}.label-important.arrowed-in-right:after{border-color:#d15b47;-moz-border-left-colors:#d15b47}.label-danger.arrowed:before{border-right-color:#d15b47;-moz-border-right-colors:#d15b47}.label-danger.arrowed-in:before{border-color:#d15b47;-moz-border-right-colors:#d15b47}.label-danger.arrowed-right:after{border-left-color:#d15b47;-moz-border-left-colors:#d15b47}.label-danger.arrowed-in-right:after{border-color:#d15b47;-moz-border-left-colors:#d15b47}.label-inverse.arrowed:before{border-right-color:#333;-moz-border-right-colors:#333}.label-inverse.arrowed-in:before{border-color:#333;-moz-border-right-colors:#333}.label-inverse.arrowed-right:after{border-left-color:#333;-moz-border-left-colors:#333}.label-inverse.arrowed-in-right:after{border-color:#333;-moz-border-left-colors:#333}.label-pink.arrowed:before{border-right-color:#d6487e;-moz-border-right-colors:#d6487e}.label-pink.arrowed-in:before{border-color:#d6487e;-moz-border-right-colors:#d6487e}.label-pink.arrowed-right:after{border-left-color:#d6487e;-moz-border-left-colors:#d6487e}.label-pink.arrowed-in-right:after{border-color:#d6487e;-moz-border-left-colors:#d6487e}.label-purple.arrowed:before{border-right-color:#9585bf;-moz-border-right-colors:#9585bf}.label-purple.arrowed-in:before{border-color:#9585bf;-moz-border-right-colors:#9585bf}.label-purple.arrowed-right:after{border-left-color:#9585bf;-moz-border-left-colors:#9585bf}.label-purple.arrowed-in-right:after{border-color:#9585bf;-moz-border-left-colors:#9585bf}.label-yellow.arrowed:before{border-right-color:#fee188;-moz-border-right-colors:#fee188}.label-yellow.arrowed-in:before{border-color:#fee188;-moz-border-right-colors:#fee188}.label-yellow.arrowed-right:after{border-left-color:#fee188;-moz-border-left-colors:#fee188}.label-yellow.arrowed-in-right:after{border-color:#fee188;-moz-border-left-colors:#fee188}.label-light.arrowed:before{border-right-color:#e7e7e7;-moz-border-right-colors:#e7e7e7}.label-light.arrowed-in:before{border-color:#e7e7e7;-moz-border-right-colors:#e7e7e7}.label-light.arrowed-right:after{border-left-color:#e7e7e7;-moz-border-left-colors:#e7e7e7}.label-light.arrowed-in-right:after{border-color:#e7e7e7;-moz-border-left-colors:#e7e7e7}.label-grey.arrowed:before{border-right-color:#a0a0a0;-moz-border-right-colors:#a0a0a0}.label-grey.arrowed-in:before{border-color:#a0a0a0;-moz-border-right-colors:#a0a0a0}.label-grey.arrowed-right:after{border-left-color:#a0a0a0;-moz-border-left-colors:#a0a0a0}.label-grey.arrowed-in-right:after{border-color:#a0a0a0;-moz-border-left-colors:#a0a0a0}.label{font-size:12px;line-height:1.15;height:20px}.label.arrowed{margin-left:5px}.label.arrowed:before{left:-10px;border-width:10px 5px}.label.arrowed-in{margin-left:5px}.label.arrowed-in:before{left:-5px;border-width:10px 5px}.label.arrowed-right{margin-right:5px}.label.arrowed-right:after{right:-10px;border-width:10px 5px}.label.arrowed-in-right{margin-right:5px}.label.arrowed-in-right:after{right:-5px;border-width:10px 5px}.label-lg{padding:.3em .6em .4em;font-size:13px;line-height:1.1;height:24px}.label-lg.arrowed{margin-left:6px}.label-lg.arrowed:before{left:-12px;border-width:12px 6px}.label-lg.arrowed-in{margin-left:6px}.label-lg.arrowed-in:before{left:-6px;border-width:12px 6px}.label-lg.arrowed-right{margin-right:6px}.label-lg.arrowed-right:after{right:-12px;border-width:12px 6px}.label-lg.arrowed-in-right{margin-right:6px}.label-lg.arrowed-in-right:after{right:-6px;border-width:12px 6px}.label-xlg{padding:.3em .7em .4em;font-size:14px;line-height:1.3;height:28px}.label-xlg.arrowed{margin-left:7px}.label-xlg.arrowed:before{left:-14px;border-width:14px 7px}.label-xlg.arrowed-in{margin-left:7px}.label-xlg.arrowed-in:before{left:-7px;border-width:14px 7px}.label-xlg.arrowed-right{margin-right:7px}.label-xlg.arrowed-right:after{right:-14px;border-width:14px 7px}.label-xlg.arrowed-in-right{margin-right:7px}.label-xlg.arrowed-in-right:after{right:-7px;border-width:14px 7px}.label-sm{padding:.2em .4em .3em;font-size:11px;line-height:1;height:18px}.label-sm.arrowed{margin-left:4px}.label-sm.arrowed:before{left:-8px;border-width:9px 4px}.label-sm.arrowed-in{margin-left:4px}.label-sm.arrowed-in:before{left:-4px;border-width:9px 4px}.label-sm.arrowed-right{margin-right:4px}.label-sm.arrowed-right:after{right:-8px;border-width:9px 4px}.label-sm.arrowed-in-right{margin-right:4px}.label-sm.arrowed-in-right:after{right:-4px;border-width:9px 4px}.label>.ace-icon,.label>span{line-height:1;vertical-align:bottom}@media screen and (-webkit-min-device-pixel-ratio:1.08) and (-webkit-max-device-pixel-ratio:1.15),screen and (-webkit-min-device-pixel-ratio:1.3) and (-webkit-max-device-pixel-ratio:1.35),screen and (-webkit-min-device-pixel-ratio:1.7) and (-webkit-max-device-pixel-ratio:1.75){.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed:before{border-width:10px 6px 11px;left:-11px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-right:after{border-width:10px 6px 11px;right:-11px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in:before{border-width:10px 5px 10.5px;left:-6px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in-right:after{border-width:10px 5px 10.5px;right:-6px}}@media screen and (min--moz-device-pixel-ratio:1.08) and (max--moz-device-pixel-ratio:1.15),screen and (min--moz-device-pixel-ratio:1.3) and (max--moz-device-pixel-ratio:1.35),screen and (min--moz-device-pixel-ratio:1.7) and (max--moz-device-pixel-ratio:1.75){.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed:before{border-width:10px 6px 11px;left:-11px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-right:after{border-width:10px 6px 11px;right:-11px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in:before{border-width:10px 5px 10.5px;left:-6px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in-right:after{border-width:10px 5px 10.5px;right:-6px}}@media screen and (-webkit-min-device-pixel-ratio:1.3) and (-webkit-max-device-pixel-ratio:1.34){.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed:before{border-width:10px 6px 11px;left:-11.5px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-right:after{border-width:10px 6px 11px;right:-11.5px}}@media screen and (min--moz-device-pixel-ratio:1.3) and (max--moz-device-pixel-ratio:1.34){.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed:before{border-width:10px 6px 11px;left:-11.5px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-right:after{border-width:10px 6px 11px;right:-11.5px}}@media only screen and (-webkit-max-device-pixel-ratio:1.7) and (-webkit-min-device-pixel-ratio:1.75){.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in:before{border-width:10px 5px;left:-6px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in-right:after{border-width:10px 5px;right:-6px}}@media only screen and (min--moz-device-pixel-ratio:1.7) and (max--moz-device-pixel-ratio:1.75){.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in:before{border-width:10px 5px;left:-6px}.label:not(.label-lg):not(.label-xlg):not(.label-sm).arrowed-in-right:after{border-width:10px 5px;right:-6px}}.dropdown-menu>.active>a>.ace-icon,.dropdown-menu>li>a:focus>.ace-icon,.dropdown-menu>li>a:hover>.ace-icon,.dropdown-submenu:focus>a>.ace-icon,.dropdown-submenu:hover>a>.ace-icon,.icon-white,.nav-list>.active>a>.ace-icon,.nav-pills>.active>a>.ace-icon,.navbar-inverse .nav>.active>a>.ace-icon{background-image:none}.dropdown-menu{border-radius:0!important;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.dropdown-menu>li>a{font-size:13px;padding-left:11px;padding-right:11px;margin-bottom:1px;margin-top:1px}.dropdown-menu.dropdown-only-icon{min-width:50px}.dropdown-menu.dropdown-only-icon>li{margin:0 4px}.dropdown-menu.dropdown-only-icon>li>a .ace-icon{width:18px;display:inline-block;text-align:center}.dropdown-menu.dropdown-only-icon>li>a .icon-2x{width:36px}.dropdown-menu .dropdown-submenu:hover>a,.dropdown-menu>li.active>a,.dropdown-menu>li.active>a:hover,.dropdown-menu>li>a:active,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background:#4f99c6;color:#fff}.dropdown-default .dropdown-submenu:hover>a,.dropdown-default>li.active>a,.dropdown-default>li.active>a:hover,.dropdown-default>li>a:active,.dropdown-default>li>a:focus,.dropdown-default>li>a:hover{background:#abbac3;color:#fff}.dropdown-info .dropdown-submenu:hover>a,.dropdown-info>li.active>a,.dropdown-info>li.active>a:hover,.dropdown-info>li>a:active,.dropdown-info>li>a:focus,.dropdown-info>li>a:hover{background:#6fb3e0;color:#fff}.dropdown-primary .dropdown-submenu:hover>a,.dropdown-primary>li.active>a,.dropdown-primary>li.active>a:hover,.dropdown-primary>li>a:active,.dropdown-primary>li>a:focus,.dropdown-primary>li>a:hover{background:#428bca;color:#fff}.dropdown-success .dropdown-submenu:hover>a,.dropdown-success>li.active>a,.dropdown-success>li.active>a:hover,.dropdown-success>li>a:active,.dropdown-success>li>a:focus,.dropdown-success>li>a:hover{background:#87b87f;color:#fff}.dropdown-warning .dropdown-submenu:hover>a,.dropdown-warning>li.active>a,.dropdown-warning>li.active>a:hover,.dropdown-warning>li>a:active,.dropdown-warning>li>a:focus,.dropdown-warning>li>a:hover{background:#ffa24d;color:#fff}.dropdown-danger .dropdown-submenu:hover>a,.dropdown-danger>li.active>a,.dropdown-danger>li.active>a:hover,.dropdown-danger>li>a:active,.dropdown-danger>li>a:focus,.dropdown-danger>li>a:hover{background:#d15b47;color:#fff}.dropdown-inverse .dropdown-submenu:hover>a,.dropdown-inverse>li.active>a,.dropdown-inverse>li.active>a:hover,.dropdown-inverse>li>a:active,.dropdown-inverse>li>a:focus,.dropdown-inverse>li>a:hover{background:#555;color:#fff}.dropdown-purple .dropdown-submenu:hover>a,.dropdown-purple>li.active>a,.dropdown-purple>li.active>a:hover,.dropdown-purple>li>a:active,.dropdown-purple>li>a:focus,.dropdown-purple>li>a:hover{background:#9585bf;color:#fff}.dropdown-pink .dropdown-submenu:hover>a,.dropdown-pink>li.active>a,.dropdown-pink>li.active>a:hover,.dropdown-pink>li>a:active,.dropdown-pink>li>a:focus,.dropdown-pink>li>a:hover{background:#d6487e;color:#fff}.dropdown-grey .dropdown-submenu:hover>a,.dropdown-grey>li.active>a,.dropdown-grey>li.active>a:hover,.dropdown-grey>li>a:active,.dropdown-grey>li>a:focus,.dropdown-grey>li>a:hover{background:#a0a0a0;color:#fff}.dropdown-light .dropdown-submenu:hover>a,.dropdown-light>li.active>a,.dropdown-light>li.active>a:hover,.dropdown-light>li>a:active,.dropdown-light>li>a:focus,.dropdown-light>li>a:hover{background:#e7e7e7;color:#333}.dropdown-lighter .dropdown-submenu:hover>a,.dropdown-lighter>li.active>a,.dropdown-lighter>li.active>a:hover,.dropdown-lighter>li>a:active,.dropdown-lighter>li>a:focus,.dropdown-lighter>li>a:hover{background:#efefef;color:#444}.dropdown-lightest .dropdown-submenu:hover>a,.dropdown-lightest>li.active>a,.dropdown-lightest>li.active>a:hover,.dropdown-lightest>li>a:active,.dropdown-lightest>li>a:focus,.dropdown-lightest>li>a:hover{background:#f3f3f3;color:#444}.dropdown-yellow .dropdown-submenu:hover>a,.dropdown-yellow>li.active>a,.dropdown-yellow>li.active>a:hover,.dropdown-yellow>li>a:active,.dropdown-yellow>li>a:focus,.dropdown-yellow>li>a:hover{background:#fee188;color:#444}.dropdown-yellow2 .dropdown-submenu:hover>a,.dropdown-yellow2>li.active>a,.dropdown-yellow2>li.active>a:hover,.dropdown-yellow2>li>a:active,.dropdown-yellow2>li>a:focus,.dropdown-yellow2>li>a:hover{background:#f9e8b3;color:#444}.dropdown-light-blue .dropdown-submenu:hover>a,.dropdown-light-blue>li.active>a,.dropdown-light-blue>li.active>a:hover,.dropdown-light-blue>li>a:active,.dropdown-light-blue>li>a:focus,.dropdown-light-blue>li>a:hover{background:#ecf3f9;color:#456}.dropdown-light .dropdown-submenu:hover>a:after,.dropdown-lighter .dropdown-submenu:hover>a:after,.dropdown-lightest .dropdown-submenu:hover>a:after{border-left-color:#444}.dropdown-menu.dropdown-close{top:92%;left:-5px}.dropdown-menu.dropdown-close.dropdown-menu-right{left:auto;right:-5px}.dropdown-menu.dropdown-closer{top:80%;left:-10px}.dropdown-menu.dropdown-closer.dropdown-menu-right{right:-10px;left:auto}.dropup>.dropdown-menu,.navbar-fixed-bottom .dropdown>.dropdown-menu{top:auto!important;bottom:100%}.dropup>.dropdown-menu.dropdown-close,.navbar-fixed-bottom .dropdown>.dropdown-menu.dropdown-close{bottom:92%}.dropup>.dropdown-menu.dropdown-closer,.navbar-fixed-bottom .dropdown>.dropdown-menu.dropdown-closer{bottom:80%}.dropdown-submenu>.dropdown-menu{border-radius:0}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-50{min-width:50px}.dropdown-75{min-width:75px}.dropdown-100{min-width:100px}.dropdown-125{min-width:125px}.dropdown-150{min-width:150px}.dropdown-hover{position:relative}.dropdown-hover:before{display:block;content:"";position:absolute;top:-2px;bottom:-2px;left:-2px;right:-2px;background-color:transparent}.dropdown-hover:hover>.dropdown-menu{display:block}.dropdown-menu>.dropdown-hover>.dropdown-menu{top:-5px;left:99%;right:auto}.dropdown-menu>.dropdown-hover>.dropdown-menu.dropdown-menu-right{left:auto;right:99%}.dropdown-menu>.dropdown-hover.dropup>.dropdown-menu,.dropup .dropdown-menu>.dropdown-hover>.dropdown-menu{top:auto;bottom:-5px}.dropdown-menu.dropdown-caret:before{border-bottom:7px solid rgba(0,0,0,.2);-moz-border-bottom-colors:rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.dropdown-menu.dropdown-caret:after{border-bottom:6px solid #FFF;-moz-border-bottom-colors:#FFF;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.dropdown-menu.dropdown-menu-right.dropdown-caret:before{left:auto;right:9px}.dropdown-menu.dropdown-menu-right.dropdown-caret:after{left:auto;right:10px}.dropup>.dropdown-menu.dropdown-caret:before,.navbar-fixed-bottom .dropdown>.dropdown-menu.dropdown-caret:before{border-bottom-width:0;border-top:7px solid rgba(0,0,0,.2);-moz-border-top-colors:rgba(0,0,0,.2);bottom:-7px;top:auto}.dropup>.dropdown-menu.dropdown-caret:after,.navbar-fixed-bottom .dropdown>.dropdown-menu.dropdown-caret:after{border-bottom-width:0;border-top:6px solid #FFF;-moz-border-top-colors:#FFF;bottom:-6px;top:auto}.dropdown-colorpicker>.dropdown-menu{padding:4px;min-width:130px;max-width:130px;top:80%;left:-7px}.dropdown-colorpicker>.dropdown-menu.dropdown-menu-right{right:-7px;left:auto}.dropdown-colorpicker>.dropdown-menu>li{display:block;float:left;width:20px;height:20px;margin:2px}.dropdown-colorpicker>.dropdown-menu>li>.colorpick-btn{display:block;width:20px;height:20px;margin:0;padding:0;border-radius:0;position:relative;-webkit-transition:all ease .1s;-o-transition:all ease .1s;transition:all ease .1s}.dropdown-colorpicker>.dropdown-menu>li>.colorpick-btn:hover{text-decoration:none;opacity:.8;filter:alpha(opacity=80);-webkit-transform:scale(1.08,1.08);-ms-transform:scale(1.08,1.08);-o-transform:scale(1.08,1.08);transform:scale(1.08,1.08)}.dropdown-colorpicker>.dropdown-menu>li>.colorpick-btn.selected:after{content:"\f00c";display:inline-block;font-family:FontAwesome;font-size:11px;color:#FFF;position:absolute;left:0;right:0;text-align:center;line-height:20px}.btn-colorpicker{display:inline-block;width:20px;height:20px;background-color:#DDD;vertical-align:middle;border-radius:0}.dropdown-navbar{padding:0;width:240px;-webkit-box-shadow:0 2px 4px rgba(30,30,100,.25);box-shadow:0 2px 4px rgba(30,30,100,.25);border-color:#bcd4e5}.dropdown-navbar>li{padding:0 8px;background-color:#FFF}.dropdown-navbar>li.dropdown-header{text-shadow:none;padding-top:0;padding-bottom:0;line-height:34px;font-size:13px;font-weight:700;text-transform:none;border-bottom:1px solid}.dropdown-navbar>li>.ace-icon,.dropdown-navbar>li>a>.ace-icon{margin-right:5px!important;color:#555;font-size:14px}.dropdown-navbar>li>a{padding:10px 2px;margin:0;border-top:1px solid;font-size:12px;line-height:16px;color:#555}.dropdown-navbar>li>a:active,.dropdown-navbar>li>a:focus,.dropdown-navbar>li>a:hover{background-color:transparent!important;color:#555}.dropdown-navbar>li>a .progress{margin-bottom:0;margin-top:4px}.dropdown-navbar>li>a .badge{line-height:16px;padding-right:4px;padding-left:4px;font-size:12px}.dropdown-navbar>li.dropdown-header+li>a,.dropdown-navbar>li:first-child>a{border-top-width:0}.dropdown-navbar>li.dropdown-footer>a{color:#4F99C6;text-align:center;font-size:13px}.dropdown-navbar>li.dropdown-footer>a:hover{background-color:#FFF;color:#4F99C6;text-decoration:underline}.dropdown-navbar>li.dropdown-footer>a:hover>.ace-icon{text-decoration:none}.dropdown-navbar>li:hover{background-color:#f4f9fc!important}.dropdown-navbar>li.dropdown-header{background-color:#ecf2f7!important;color:#8090a0;border-bottom-color:#bcd4e5}.dropdown-navbar>li.dropdown-header>.ace-icon{color:#8090a0}.dropdown-navbar>li>a{border-top-color:#e4ecf3}.dropdown-navbar.navbar-pink{border-color:#e5bcd4}.dropdown-navbar.navbar-pink>li:hover{background-color:#fcf4f9!important}.dropdown-navbar.navbar-pink>li.dropdown-header{background-color:#f7ecf2!important;color:#b471a0;border-bottom-color:#e5bcd4}.dropdown-navbar.navbar-pink>li.dropdown-header>.ace-icon{color:#c06090}.dropdown-navbar.navbar-pink>li>a{border-top-color:#f3e4ec}.dropdown-navbar.navbar-grey{border-color:#e5e5e5}.dropdown-navbar.navbar-grey>li:hover{background-color:#f8f8f8!important}.dropdown-navbar.navbar-grey>li.dropdown-header{background-color:#f2f2f2!important;color:#3a87ad;border-bottom-color:#e5e5e5}.dropdown-navbar.navbar-grey>li.dropdown-header>.ace-icon{color:#3a87ad}.dropdown-navbar.navbar-grey>li>a{border-top-color:#eee}.dropdown-navbar.navbar-green{border-color:#b4d5ac}.dropdown-navbar.navbar-green>li:hover{background-color:#f4f9ef!important}.dropdown-navbar.navbar-green>li.dropdown-header{background-color:#ebf7e4!important;color:#8a6;border-bottom-color:#b4d5ac}.dropdown-navbar.navbar-green>li.dropdown-header>.ace-icon{color:#90c060}.dropdown-navbar.navbar-green>li>a{border-top-color:#ecf3e4}.dropdown-navbar [class*=btn].ace-icon{display:inline-block;margin:0 5px 0 0;width:24px;text-align:center;padding-left:0;padding-right:0}.dropdown-navbar .msg-photo{margin-right:6px;max-width:42px}.dropdown-navbar .msg-body{display:inline-block;line-height:20px;white-space:normal;vertical-align:middle;max-width:175px}.dropdown-navbar .msg-title{display:inline-block;line-height:14px}.dropdown-navbar .msg-time{display:block;font-size:11px;color:#777}.dropdown-navbar .msg-time>.ace-icon{font-size:14px;color:#555}.dropdown-navbar>.dropdown-content{padding:0}.dropdown-navbar>.dropdown-content .dropdown-navbar{list-style:none;margin:0;padding:0!important;-webkit-box-shadow:none;box-shadow:none;width:auto;display:block;float:none;border-width:0;position:static;z-index:auto}.dropdown-navbar .nav-tabs{border-width:0;box-shadow:none;background-color:#F9F9F9!important;top:auto;width:100%}.dropdown-navbar .nav-tabs>li{display:table-cell;width:1%;float:none!important}.dropdown-navbar .nav-tabs>li>a{margin:0 0 0 1px!important;text-align:center;box-shadow:none!important;background-color:#F9F9F9!important;border-width:0!important;border-bottom:2px solid #BECAD1!important}.dropdown-navbar .nav-tabs>li>a:before{display:block;content:"";position:absolute;left:-1px;top:3px;bottom:3px;width:1px;background-color:#BECAD1}.dropdown-navbar .nav-tabs>li:first-child>a{margin-left:0!important}.dropdown-navbar .nav-tabs>li:first-child>a:before{display:none}.dropdown-navbar .nav-tabs>li.active>a{border-bottom:2px solid #79B0CE!important;color:#5085AF!important;background-color:#ECF2F7!important}.dropdown-navbar .tab-content{padding:0!important;border-color:#FFF!important}.dropdown-navbar .tab-content .dropdown-menu{display:block;position:static;margin:0!important;padding-top:2px;border-color:#FFF!important;box-shadow:none!important;width:100%}.dropdown-navbar.navbar-pink .nav-tabs>li.active>a{border-bottom:2px solid #E5BCD4!important;color:#C06090!important;background-color:#F7ECF2!important}.dropdown-navbar.navbar-pink .nav-tabs>li:not(.active)>a:hover{color:#BA7396}.dropdown-navbar.navbar-pink .nav-tabs>li>a:before{background-color:#CEBBCB}.dropdown-navbar.navbar-pink .nav-tabs>li>a{border-bottom-color:#CEBBCD!important}.form-line{margin-bottom:24px;padding-bottom:12px;border-bottom:1px solid #EEE}.form-actions{display:block;background-color:#F5F5F5;border-top:1px solid #E5E5E5;margin-bottom:20px;margin-top:20px;padding:19px 20px 20px}.help-button{display:inline-block;height:22px;width:22px;line-height:22px;text-align:center;padding:0;background-color:#65bcda;color:#FFF;font-size:12px;font-weight:700;cursor:default;margin-left:4px;border-radius:100%;border:2px solid #FFF;-webkit-box-shadow:0 1px 0 1px rgba(0,0,0,.2);box-shadow:0 1px 0 1px rgba(0,0,0,.2)}.help-button:hover{background-color:#65bcda;text-shadow:none}label{font-weight:400;font-size:14px}.form-group>label[class*=col-]{padding-top:4px;margin-bottom:4px}td>label,th>label{margin-bottom:0;line-height:inherit;vertical-align:middle}label.inline{margin-bottom:3px}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{border-radius:0!important;color:#858585;background-color:#fff;border:1px solid #d5d5d5;padding:5px 4px 6px;font-size:14px;font-family:inherit;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-transition-duration:.1s;transition-duration:.1s}input[type=color]:hover,input[type=date]:hover,input[type=datetime-local]:hover,input[type=datetime]:hover,input[type=email]:hover,input[type=month]:hover,input[type=number]:hover,input[type=password]:hover,input[type=search]:hover,input[type=tel]:hover,input[type=text]:hover,input[type=time]:hover,input[type=url]:hover,input[type=week]:hover,textarea:hover{border-color:#b5b5b5}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,textarea:focus{-webkit-box-shadow:none;box-shadow:none;color:#696969;border-color:#f59942;background-color:#fff;outline:0}.form-control,select{border-radius:0;-webkit-box-shadow:none!important;box-shadow:none!important;color:#858585;background-color:#fff;border:1px solid #d5d5d5}.form-control:focus,select:focus{color:#696969;border-color:#f59942;background-color:#fff;outline:0}textarea.form-control{padding:5px 9px}select{padding:3px 4px;height:30px}select.form-control{padding:4px 6px}select.form-control[multiple],select[multiple]{height:auto}select.input-sm{border-radius:0;padding:2px 3px}select.input-lg{border-radius:0;padding:6px 8px}input.block{display:block;margin-bottom:9px}textarea.autosize-transition{-webkit-transition-duration:"height 0.2s";transition-duration:"height 0.2s"}.limiterBox{border:1px solid #222;border-top:none;background-color:#333;padding:3px 6px;font-size:13px;color:#FFF;margin-top:6px}.limiterBox:after{display:none}.limiterBox:before{display:block;content:"";position:absolute;width:0;height:0;top:-8px;left:50%;margin-left:-5px;border-color:transparent transparent #333;border-style:solid;-moz-border-bottom-colors:#333;border-width:0 8px 8px}select option,select.form-control option{padding:3px 4px}select option:active,select option:focus,select option:hover,select.form-control option:active,select.form-control option:focus,select.form-control option:hover{background-color:#e5e9ee;color:#111}select option[value=""],select.form-control option[value=""]{padding:0}input[disabled]{color:#848484!important;background-color:#eee!important}input[disabled]:hover{border-color:#d5d5d5!important}input[readonly]{color:#939192;background:#f5f5f5!important;cursor:default}input[readonly]:hover{border-color:#c3c3c3}input[readonly]:focus{-webkit-box-shadow:none;box-shadow:none;border-color:#aaa;background-color:#f9f9f9}.help-inline{font-size:13px!important}.input-icon{position:relative}span.input-icon{display:inline-block}.input-icon>input{padding-left:24px;padding-right:6px}.input-icon.input-icon-right>input{padding-left:6px;padding-right:24px}.input-icon>.ace-icon{padding:0 3px;z-index:2;position:absolute;top:1px;bottom:1px;left:3px;line-height:28px;display:inline-block;color:#909090;font-size:16px}.input-icon.input-icon-right>.ace-icon{left:auto;right:3px}.input-icon>input:focus+.ace-icon{color:#579}.input-icon~.help-inline{padding-left:8px}.form-inline .checkbox [type=checkbox]+label,.form-inline .radio [type=radio]+label,.form-search .checkbox [type=checkbox]+label,.form-search .radio [type=radio]+label{float:left;margin-left:-20px}.form-inline .form-inline .checkbox [type=checkbox]+label,.form-inline .form-inline .radio [type=radio]+label,.form-inline .form-search .checkbox [type=checkbox]+label,.form-inline .form-search .radio [type=radio]+label,.form-search .form-inline .checkbox [type=checkbox]+label,.form-search .form-inline .radio [type=radio]+label,.form-search .form-search .checkbox [type=checkbox]+label,.form-search .form-search .radio [type=radio]+label{margin-left:0;margin-right:3px}.form-search .input-append .search-query:focus,.form-search .input-prepend .search-query:focus{-webkit-box-shadow:none;box-shadow:none}.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .uneditable-input,.input-prepend input,.input-prepend select{border-radius:0}.input-mini{width:60px;max-width:100%}.input-small{width:90px;max-width:100%}.input-md,.input-medium{width:150px;max-width:100%}.input-large{width:210px;max-width:100%}.input-xlarge{width:270px;max-width:100%}.input-xxlarge{width:530px;max-width:100%}input.input-lg{font-size:18px}input[type=checkbox].ace,input[type=radio].ace{opacity:0;position:absolute;z-index:1;width:18px;height:18px;cursor:pointer}label input[type=checkbox].ace,label input[type=radio].ace{z-index:-100!important;width:1!important;height:0!important}input[type=checkbox].ace:checked,input[type=checkbox].ace:focus,input[type=radio].ace:checked,input[type=radio].ace:focus{outline:0!important}input[type=checkbox].ace+.lbl,input[type=radio].ace+.lbl{position:relative;display:inline-block;margin:0;line-height:20px;min-height:18px;min-width:18px;font-weight:400;cursor:pointer}input[type=checkbox].ace+.lbl::before,input[type=radio].ace+.lbl::before{cursor:pointer;font-family:fontAwesome;font-weight:400;font-size:12px;color:#32a3ce;content:"\a0";background-color:#FAFAFA;border:1px solid #c8c8c8;box-shadow:0 1px 2px rgba(0,0,0,.05);border-radius:0;display:inline-block;text-align:center;height:16px;line-height:14px;min-width:16px;margin-right:1px;position:relative;top:-1px}input[type=checkbox].ace:checked+.lbl::before,input[type=radio].ace:checked+.lbl::before{display:inline-block;content:'\f00c';background-color:#F5F8FC;border-color:#adb8c0;box-shadow:0 1px 2px rgba(0,0,0,.05),inset 0 -15px 10px -12px rgba(0,0,0,.05),inset 15px 10px -12px rgba(255,255,255,.1)}input[type=checkbox].ace+.lbl:hover::before,input[type=checkbox].ace:hover+.lbl::before,input[type=radio].ace+.lbl:hover::before,input[type=radio].ace:hover+.lbl::before{border-color:#ff893c}input[type=checkbox].ace:active+.lbl::before,input[type=checkbox].ace:checked:active+.lbl::before,input[type=radio].ace:active+.lbl::before,input[type=radio].ace:checked:active+.lbl::before{box-shadow:0 1px 2px rgba(0,0,0,.05),inset 0 1px 3px rgba(0,0,0,.1)}input[type=checkbox].ace.ace-checkbox-2+.lbl::before,input[type=radio].ace.ace-checkbox-2+.lbl::before{box-shadow:none}input[type=checkbox].ace.ace-checkbox-2:checked+.lbl::before,input[type=radio].ace.ace-checkbox-2:checked+.lbl::before{background-color:#f9a021;border-color:#f9a021;color:#FFF}input[type=checkbox].ace.disabled+.lbl::before,input[type=checkbox].ace:disabled+.lbl::before,input[type=checkbox].ace[disabled]+.lbl::before,input[type=radio].ace.disabled+.lbl::before,input[type=radio].ace:disabled+.lbl::before,input[type=radio].ace[disabled]+.lbl::before{background-color:#DDD!important;border-color:#CCC!important;box-shadow:none!important;color:#BBB}input.ace+.lbl.padding-16::before{margin-right:16px}input.ace+.lbl.padding-12::before{margin-right:12px}input.ace+.lbl.padding-8::before{margin-right:8px}input.ace+.lbl.padding-4::before{margin-right:4px}input.ace+.lbl.padding-0::before{margin-right:0}input[type=radio].ace+.lbl::before{border-radius:100%;font-size:10px;font-family:FontAwesome;text-shadow:0 0 1px #32a3ce;line-height:15px;height:17px;min-width:17px}input[type=radio].ace:checked+.lbl::before{content:"\f111"}input[type=checkbox].ace.ace-switch{width:55px;height:25px}input[type=checkbox].ace.ace-switch+.lbl{margin:0 4px;min-height:24px}input[type=checkbox].ace.ace-switch+.lbl::before{font-family:'Open Sans';content:"ON\a0\a0\a0\a0\a0\a0\a0\a0\a0OFF";color:#999;text-shadow:0 0 0 #999;font-weight:400;font-size:11px;line-height:17px;height:20px;overflow:hidden;border-radius:12px;background-color:#F5F5F5;-webkit-box-shadow:inset 0 1px 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 1px 0 rgba(0,0,0,.15);border:1px solid #CCC;text-align:left;float:left;padding:0;width:52px;text-indent:-21px;margin-right:0;-webkit-transition:text-indent .3s ease;-o-transition:text-indent .3s ease;transition:text-indent .3s ease;top:auto}input[type=checkbox].ace.ace-switch+.lbl::after{font-family:'Open Sans';content:'III';font-size:12px;font-weight:400;letter-spacing:0;color:#AAA;text-shadow:none;background-color:#FFF;border-radius:100%;width:22px;height:22px;line-height:22px;text-align:center;position:absolute;top:-2px;left:-3px;-webkit-box-shadow:0 1px 1px 1px rgba(0,0,0,.3);box-shadow:0 1px 1px 1px rgba(0,0,0,.3);-webkit-transition:left .3s ease;-o-transition:left .3s ease;transition:left .3s ease}input[type=checkbox].ace.ace-switch:checked+.lbl::before{text-indent:8px;color:#FFF;text-shadow:0 0 0 #FFF;background-color:#8ab2c9;border-color:#6a8ca8}input[type=checkbox].ace.ace-switch:checked+.lbl::after{left:34px;background-color:#FFF;color:#98A0A5}input[type=checkbox].ace.ace-switch.ace-switch-2+.lbl::before{content:"YES\a0\a0\a0\a0\a0\a0\a0\a0\a0NO"}input[type=checkbox].ace.ace-switch.ace-switch-3+.lbl::after{font-family:FontAwesome;font-size:13px;line-height:22px;content:"\f00d";top:-1px;text-shadow:none;padding:0;text-align:center;color:#BBB;letter-spacing:0}input[type=checkbox].ace.ace-switch.ace-switch-3:checked+.lbl::after{content:"\f00c";color:#8AB2C9;text-shadow:none}input[type=checkbox].ace.ace-switch.ace-switch-4,input[type=checkbox].ace.ace-switch.ace-switch-5{width:60px}input[type=checkbox].ace.ace-switch.ace-switch-4+.lbl::before,input[type=checkbox].ace.ace-switch.ace-switch-5+.lbl::before{content:"ON\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0OFF";font-size:12px;line-height:21px;height:24px;overflow:hidden;border-radius:12px;background-color:#8b9aa3;border:1px solid #8b9aa3;color:#FFF;width:56px;text-shadow:0 0 0 #FFF;display:inline-block;position:relative;box-shadow:none;-webkit-transition:all .3s ease;-o-transition:all .3s ease;transition:all .3s ease}input[type=checkbox].ace.ace-switch.ace-switch-4+.lbl::after,input[type=checkbox].ace.ace-switch.ace-switch-5+.lbl::after{content:'III';font-size:11px;position:absolute;top:2px;left:2px;letter-spacing:0;width:20px;height:20px;line-height:19px;text-shadow:none!important;color:#939393;background-color:#FFF;-webkit-transition:all .3s ease;-o-transition:all .3s ease;transition:all .3s ease}input[type=checkbox].ace.ace-switch.ace-switch-4:checked+.lbl::before,input[type=checkbox].ace.ace-switch.ace-switch-5:checked+.lbl::before{background-color:#468fcc;border-color:#468FCC}input[type=checkbox].ace.ace-switch.ace-switch-4:checked+.lbl::after,input[type=checkbox].ace.ace-switch.ace-switch-5:checked+.lbl::after{left:34px;background-color:#FFF;color:#848484}input[type=checkbox].ace.ace-switch.ace-switch-5+.lbl::before{content:"YES\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0NO"}input[type=checkbox].ace.ace-switch.ace-switch-6+.lbl{position:relative}input[type=checkbox].ace.ace-switch.ace-switch-6+.lbl::before{font-family:FontAwesome;content:"\f00d";text-shadow:0 -1px 0 rgba(0,0,0,.25);box-shadow:none;border-width:0;font-weight:lighter;font-size:16px;border-radius:12px;display:inline-block;background-color:#888;color:#F2F2F2;width:52px;height:22px;line-height:21px;text-indent:32px;-webkit-transition:background .1s ease;-o-transition:background .1s ease;transition:background .1s ease}input[type=checkbox].ace.ace-switch.ace-switch-6+.lbl::after{content:'';text-shadow:0 -1px 0 rgba(0,0,0,.25);position:absolute;top:2px;left:3px;border-radius:12px;box-shadow:0 -1px 0 rgba(0,0,0,.25);width:18px;height:18px;text-align:center;background-color:#F2F2F2;border:4px solid #F2F2F2;-webkit-transition:left .2s ease;-o-transition:left .2s ease;transition:left .2s ease}input[type=checkbox].ace.ace-switch.ace-switch-6:checked+.lbl::before{content:"\f00c";text-indent:6px;color:#FFF;border-color:#b7d3e5;background-color:#ff893c}input[type=checkbox].ace.ace-switch.ace-switch-6:checked+.lbl::after{left:32px;background-color:#FFF;border:4px solid #FFF;text-shadow:0 -1px 0 rgba(0,200,0,.25)}input[type=checkbox].ace.ace-switch.ace-switch-7{width:75px}input[type=checkbox].ace.ace-switch.ace-switch-7+.lbl{position:relative}input[type=checkbox].ace.ace-switch.ace-switch-7+.lbl::before{content:"OFF\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0\a0ON";font-weight:bolder;font-size:13px;background-color:#FFF;border:2px solid #AAA;border-radius:0;box-shadow:none;color:#AAA;width:74px;height:26px;line-height:22px;overflow:hidden;text-indent:5px;display:inline-block;position:relative;-webkit-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}input[type=checkbox].ace.ace-switch.ace-switch-7+.lbl::after{content:'\f00d';font-family:FontAwesome;font-size:16px;position:absolute;top:3px;left:39px;width:32px;height:20px;line-height:18px;text-align:center;padding:0;text-indent:0;background-color:#AAA;color:#FFF;border-radius:0;box-shadow:none;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}input[type=checkbox].ace.ace-switch.ace-switch-7:checked+.lbl::before{color:#468fcc;background-color:#FFF;text-indent:-28px;border-color:#6fb3e0}input[type=checkbox].ace.ace-switch.ace-switch-7:checked+.lbl::after{left:3px;content:'\f00c';background-color:#468fcc;color:#FFF}input[type=checkbox].ace.ace-switch+.lbl[data-lbl]::before{content:attr(data-lbl)}input[type=checkbox].ace.ace-switch.btn-empty+.lbl::after{content:""}input[type=checkbox].ace.ace-switch.btn-rotate+.lbl::after{content:"\2261";line-height:20px;font-size:17px}input[type=checkbox].ace.ace-switch-4.btn-rotate+.lbl::after,input[type=checkbox].ace.ace-switch-5.btn-rotate+.lbl::after{line-height:17px}input[type=checkbox].ace.ace-switch.btn-flat+.lbl::after,input[type=checkbox].ace.ace-switch.btn-flat+.lbl::before{border-radius:0!important}input[type=checkbox].ace.ace-switch.ace-switch-4+.lbl::before,input[type=checkbox].ace.ace-switch.ace-switch-5+.lbl::before{text-indent:-24px}input[type=checkbox].ace.ace-switch.ace-switch-4:checked+.lbl::before,input[type=checkbox].ace.ace-switch.ace-switch-5:checked+.lbl::before{text-indent:7px}.ace-file-input{display:block;font-size:inherit;position:relative;height:30px}.ace-file-input input[type=file]{position:fixed;z-index:-2;opacity:0;filter:alpha(opacity=0)}.ace-file-input input[type=file]:focus{outline:0}.ace-file-input .ace-file-container{display:block;position:absolute;top:0;left:0;right:0;height:30px;background-color:#fff;border:1px solid #d5d5d5;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .15s;-o-transition:all .15s;transition:all .15s}.ace-file-input .ace-file-container:hover{-webkit-box-shadow:none;box-shadow:none;border-color:#f59942}.ace-file-input .ace-file-container:before{display:inline-block;content:attr(data-title);position:absolute;right:0;top:0;bottom:0;line-height:24px;text-align:center;padding:0 8px;background-color:#6fb3e0;color:#FFF;font-size:11px;font-weight:700;border:2px solid #FFF;border-left-width:4px;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s}.ace-file-input .ace-file-container .ace-file-name{display:inline-block;height:28px;max-width:80%;white-space:nowrap;overflow:hidden;line-height:28px;color:#888;font-size:13px;vertical-align:top;position:static;padding-left:30px}.ace-file-input .ace-file-container .ace-file-name:after{display:inline-block;content:attr(data-title)}.ace-file-input .ace-file-container.selected{right:16px}.ace-file-input .ace-file-container.selected .ace-file-name{color:#666}.ace-file-input .ace-file-container .ace-icon{display:inline-block;position:absolute;left:0;top:0;bottom:0;line-height:24px;width:26px;text-align:center;font-family:FontAwesome;font-size:13px;border:2px solid #FFF;color:#FFF;-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s;background-color:#d1d1d1}.ace-file-input .ace-file-container.selected .ace-file-name .ace-icon{background-color:#efad62}.ace-file-input .ace-file-container.selected .ace-file-name .file-image{background-color:#bd7a9d}.ace-file-input .ace-file-container.selected .ace-file-name .file-video{background-color:#87b87f}.ace-file-input .ace-file-container.selected .ace-file-name .file-audio{background-color:#8b7ac9}.ace-file-input .ace-file-container.selected .ace-file-name .file-archive{background-color:#efad62}.ace-file-input .ace-file-container.hide-placeholder:before{display:none}.ace-file-input a:hover{text-decoration:none}.ace-file-input .remove{position:absolute;right:-8px;top:6px;display:none;width:17px;text-align:center;height:17px;line-height:15px;font-size:11px;font-weight:400;background-color:#fb7142;border-radius:100%;color:#FFF;text-decoration:none}.ace-file-input .ace-file-container.selected+.remove{display:inline-block}@media screen and (-webkit-min-device-pixel-ratio:0){.ace-file-input input[type=file]{position:absolute;width:0;height:0}}.ace-file-input input[type=file].disabled+.ace-file-container,.ace-file-input input[type=file][disabled]+.ace-file-container,.ace-file-input input[type=file][readonly]+.ace-file-container{cursor:not-allowed;background-color:#EEE}.ace-file-input input[type=file].disabled+.ace-file-container:hover,.ace-file-input input[type=file][disabled]+.ace-file-container:hover,.ace-file-input input[type=file][readonly]+.ace-file-container:hover{-webkit-box-shadow:none;box-shadow:none;border-color:#E3E3E3}.ace-file-input input[type=file].disabled+.ace-file-container:before,.ace-file-input input[type=file][disabled]+.ace-file-container:before,.ace-file-input input[type=file][readonly]+.ace-file-container:before{border-color:#EEE;background-color:#A1AAAF}.ace-file-input input[type=file][readonly]+.ace-file-container{cursor:default}.ace-file-input .ace-file-overlay{position:absolute;top:-2px;bottom:-2px;left:-2px;right:-10px;z-index:99;background-color:rgba(0,0,0,.5)}.ace-file-input .ace-file-overlay>.overlay-content{display:inline-block;position:relative;top:10%;left:0;right:0;text-align:center}.ace-file-multiple{height:auto}.ace-file-multiple .ace-file-container{position:relative;height:auto;border:1px dashed #aaa;border-radius:4px;text-align:center}.ace-file-multiple .ace-file-container:before{display:inline-block;content:attr(data-title);position:relative;right:0;left:0;margin:12px;line-height:22px;background-color:#FFF;color:#CCC;font-size:18px;font-weight:700;border-width:0}.ace-file-multiple .ace-file-container.selected .ace-file-name .ace-icon{display:inline-block;left:0;top:0;bottom:0;width:26px;text-align:center;font-family:FontAwesome;font-size:13px;border:2px solid #FFF;color:#FFF;-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.ace-file-multiple .ace-file-container .ace-file-name{position:relative;display:block;padding:0;height:auto;width:auto;max-width:100%;margin:0 4px;border-bottom:1px solid #DDD;text-align:left}.ace-file-multiple .ace-file-container .ace-file-name:first-child{margin-top:1px}.ace-file-multiple .ace-file-container .ace-file-name:last-child{border-bottom-width:0;margin-bottom:1px}.ace-file-multiple .ace-file-container .ace-file-name img{padding:2px;border:1px solid #D7D7D7;background-color:#FFF;background-repeat:no-repeat;background-position:center;margin:4px 8px 4px 1px}.ace-file-multiple .ace-file-container .ace-file-name:after{display:none}.ace-file-multiple .ace-file-container.selected .ace-file-name:after{display:inline-block;white-space:pre}.ace-file-multiple .ace-file-container .ace-file-name img+.ace-icon,.ace-file-multiple .ace-file-container.selected .ace-file-name img+.ace-icon{display:none}.ace-file-multiple .remove{right:-11px;top:-11px;border:3px solid #BBB;border-radius:32px;background-color:#FFF;color:red;width:23px;height:23px;line-height:15px}.ace-file-multiple .ace-file-container.selected+.remove:hover{border-color:#f4c0b1}.ace-file-multiple .ace-file-overlay{position:absolute;top:-12px;bottom:-6px;left:-12px;right:-12px}.ace-file-multiple .ace-file-overlay>.overlay-content{top:20%}.ace-file-multiple .ace-file-container .ace-file-name .ace-icon{position:relative;display:block;text-align:center;height:auto;line-height:64px;width:auto;font-size:64px;color:#D5D5D5;margin:4px 0;background-color:transparent}.ace-file-multiple .ace-file-container.selected:after{display:none}.ace-file-multiple .ace-file-container.selected .ace-file-name .ace-icon{position:relative;margin-right:4px;margin-left:2px;line-height:24px}.ace-file-multiple .ace-file-container .ace-file-name.large{text-align:center;border-bottom:1px solid #222;margin:0 1px 3px}.ace-file-multiple .ace-file-container .ace-file-name.large:last-child{margin:0 1px}.ace-file-multiple .ace-file-container .ace-file-name.large:after{position:absolute;top:auto;bottom:0;left:0;right:0;padding:0 4px;background-color:#555;color:#FFF;opacity:.8;filter:alpha(opacity=80)}.ace-file-multiple .ace-file-container .ace-file-name.large img{border-width:0;margin:0!important;padding:0}.ace-file-multiple input[type=file].disabled+.ace-file-container:hover,.ace-file-multiple input[type=file][disabled]+.ace-file-container:hover,.ace-file-multiple input[type=file][readonly]+.ace-file-container:hover{border-color:#AAA}.ace-file-multiple input[type=file].disabled+.ace-file-container:before,.ace-file-multiple input[type=file][disabled]+.ace-file-container:before,.ace-file-multiple input[type=file][readonly]+.ace-file-container:before{background-color:transparent}.ace-file-multiple input[type=file].disabled+.ace-file-container .ace-icon,.ace-file-multiple input[type=file][disabled]+.ace-file-container .ace-icon,.ace-file-multiple input[type=file][readonly]+.ace-file-container .ace-icon{border-color:#EEE}.input-group .input-group-addon{border-radius:0!important}.form-group.has-success .input-group .input-group-addon{border-color:#92bf65}.form-group.has-error .input-group .input-group-addon{border-color:#f09784}.form-group.has-warning .input-group .input-group-addon{border-color:#e0c43a}.form-group.has-info .input-group .input-group-addon{border-color:#64a6bc}.input-group>.btn{line-height:20px;padding:0 6px;border-radius:0!important}.input-group>.btn.btn-sm{line-height:22px}.input-group>.btn+.btn{margin-left:1px}.input-group>.btn-group>.btn{line-height:23px}.input-group>.btn-group>.btn.btn-sm{line-height:26px}.input-group>.btn-group>.btn.btn-sm>.caret,.input-group>.btn-group>.btn>.caret,.input-group>.btn.btn-sm>.caret,.input-group>.btn>.caret{margin-top:10px}.input-group.input-group-compact{width:1px}.form-group input[type=color],.form-group input[type=date],.form-group input[type=datetime-local],.form-group input[type=datetime],.form-group input[type=email],.form-group input[type=month],.form-group input[type=number],.form-group input[type=password],.form-group input[type=search],.form-group input[type=tel],.form-group input[type=text],.form-group input[type=time],.form-group input[type=url],.form-group input[type=week],.form-group select,.form-group textarea{background:#FFF}.form-group.has-success input,.form-group.has-success select,.form-group.has-success textarea{border-color:#92bf65;color:#8bad4c;-webkit-box-shadow:none;box-shadow:none}.form-group.has-success input:focus,.form-group.has-success select:focus,.form-group.has-success textarea:focus{-webkit-box-shadow:0 0 0 2px rgba(130,188,58,.3);box-shadow:0 0 0 2px rgba(130,188,58,.3);color:#786;border-color:#81a85a}.form-group.has-success .ace-icon,.form-group.has-success input:focus+.ace-icon,.form-group.has-success select:focus+.ace-icon,.form-group.has-success textarea:focus+.ace-icon{color:#8bad4c}.form-group.has-success .btn .ace-icon{color:inherit}.form-group.has-success .control-label,.form-group.has-success .help-block,.form-group.has-success .help-inline{color:#7ba065}.form-group.has-info input,.form-group.has-info select,.form-group.has-info textarea{border-color:#64a6bc;color:#4b89aa;-webkit-box-shadow:none;box-shadow:none}.form-group.has-info input:focus,.form-group.has-info select:focus,.form-group.has-info textarea:focus{-webkit-box-shadow:0 0 0 2px rgba(58,120,188,.3);box-shadow:0 0 0 2px rgba(58,120,188,.3);color:#678;border-color:#5a81a8}.form-group.has-info .ace-icon,.form-group.has-info input:focus+.ace-icon,.form-group.has-info select:focus+.ace-icon,.form-group.has-info textarea:focus+.ace-icon{color:#4b89aa}.form-group.has-info .btn .ace-icon{color:inherit}.form-group.has-info .control-label,.form-group.has-info .help-block,.form-group.has-info .help-inline{color:#657ba0}.form-group.has-error input,.form-group.has-error select,.form-group.has-error textarea{border-color:#f09784;color:#d68273;-webkit-box-shadow:none;box-shadow:none}.form-group.has-error input:focus,.form-group.has-error select:focus,.form-group.has-error textarea:focus{-webkit-box-shadow:0 0 0 2px rgba(219,137,120,.3);box-shadow:0 0 0 2px rgba(219,137,120,.3);color:#866;border-color:#db8978}.form-group.has-error .ace-icon,.form-group.has-error input:focus+.ace-icon,.form-group.has-error select:focus+.ace-icon,.form-group.has-error textarea:focus+.ace-icon{color:#d68273}.form-group.has-error .btn .ace-icon{color:inherit}.form-group.has-error .control-label,.form-group.has-error .help-block,.form-group.has-error .help-inline{color:#d16e6c}.form-group.has-warning input,.form-group.has-warning select,.form-group.has-warning textarea{border-color:#e0c43a;color:#d3bd50;-webkit-box-shadow:none;box-shadow:none}.form-group.has-warning input:focus,.form-group.has-warning select:focus,.form-group.has-warning textarea:focus{-webkit-box-shadow:0 0 0 2px rgba(216,188,65,.3);box-shadow:0 0 0 2px rgba(216,188,65,.3);color:#875;border-color:#d8bc41}.form-group.has-warning .ace-icon,.form-group.has-warning input:focus+.ace-icon,.form-group.has-warning select:focus+.ace-icon,.form-group.has-warning textarea:focus+.ace-icon{color:#d3bd50}.form-group.has-warning .btn .ace-icon{color:inherit}.form-group.has-warning .control-label,.form-group.has-warning .help-block,.form-group.has-warning .help-inline{color:#d19d59}.form-group input:disabled,.form-group input[disabled]{color:#848484!important;background-color:#eee!important}@media only screen and (max-width:767px){.help-inline,.input-icon+.help-inline{padding-left:0;display:block!important}}.tab-content{border:1px solid #c5d0dc;padding:16px 12px;position:relative}.tab-content.no-padding{padding:0}.tab-content.no-border{border:none;padding:12px}.tab-content.padding-32{padding:32px 24px}.tab-content.no-border.padding-32{padding:32px}.tab-content.padding-30{padding:30px 23px}.tab-content.no-border.padding-30{padding:30px}.tab-content.padding-28{padding:28px 21px}.tab-content.no-border.padding-28{padding:28px}.tab-content.padding-26{padding:26px 20px}.tab-content.no-border.padding-26{padding:26px}.tab-content.padding-24{padding:24px 18px}.tab-content.no-border.padding-24{padding:24px}.tab-content.padding-22{padding:22px 17px}.tab-content.no-border.padding-22{padding:22px}.tab-content.padding-20{padding:20px 15px}.tab-content.no-border.padding-20{padding:20px}.tab-content.padding-18{padding:18px 14px}.tab-content.no-border.padding-18{padding:18px}.tab-content.padding-16{padding:16px 12px}.tab-content.no-border.padding-16{padding:16px}.tab-content.padding-14{padding:14px 11px}.tab-content.no-border.padding-14{padding:14px}.tab-content.padding-12{padding:12px 9px}.tab-content.no-border.padding-12{padding:12px}.tab-content.padding-10{padding:10px 8px}.tab-content.no-border.padding-10{padding:10px}.tab-content.padding-8{padding:8px 6px}.tab-content.no-border.padding-8{padding:8px}.tab-content.padding-6{padding:6px 5px}.tab-content.no-border.padding-6{padding:6px}.tab-content.padding-4{padding:4px 3px}.tab-content.no-border.padding-4{padding:4px}.tab-content.no-border.padding-2,.tab-content.padding-2{padding:2px}.tab-content.no-border.padding-0,.tab-content.padding-0{padding:0}.nav.nav-tabs.padding-32{padding-left:32px}.tabs-left>.nav.nav-tabs.padding-32,.tabs-right>.nav.nav-tabs.padding-32{padding-left:0;padding-top:32px}.nav.nav-tabs.padding-30{padding-left:30px}.tabs-left>.nav.nav-tabs.padding-30,.tabs-right>.nav.nav-tabs.padding-30{padding-left:0;padding-top:30px}.nav.nav-tabs.padding-28{padding-left:28px}.tabs-left>.nav.nav-tabs.padding-28,.tabs-right>.nav.nav-tabs.padding-28{padding-left:0;padding-top:28px}.nav.nav-tabs.padding-26{padding-left:26px}.tabs-left>.nav.nav-tabs.padding-26,.tabs-right>.nav.nav-tabs.padding-26{padding-left:0;padding-top:26px}.nav.nav-tabs.padding-24{padding-left:24px}.tabs-left>.nav.nav-tabs.padding-24,.tabs-right>.nav.nav-tabs.padding-24{padding-left:0;padding-top:24px}.nav.nav-tabs.padding-22{padding-left:22px}.tabs-left>.nav.nav-tabs.padding-22,.tabs-right>.nav.nav-tabs.padding-22{padding-left:0;padding-top:22px}.nav.nav-tabs.padding-20{padding-left:20px}.tabs-left>.nav.nav-tabs.padding-20,.tabs-right>.nav.nav-tabs.padding-20{padding-left:0;padding-top:20px}.nav.nav-tabs.padding-18{padding-left:18px}.tabs-left>.nav.nav-tabs.padding-18,.tabs-right>.nav.nav-tabs.padding-18{padding-left:0;padding-top:18px}.nav.nav-tabs.padding-16{padding-left:16px}.tabs-left>.nav.nav-tabs.padding-16,.tabs-right>.nav.nav-tabs.padding-16{padding-left:0;padding-top:16px}.nav.nav-tabs.padding-14{padding-left:14px}.tabs-left>.nav.nav-tabs.padding-14,.tabs-right>.nav.nav-tabs.padding-14{padding-left:0;padding-top:14px}.nav.nav-tabs.padding-12{padding-left:12px}.tabs-left>.nav.nav-tabs.padding-12,.tabs-right>.nav.nav-tabs.padding-12{padding-left:0;padding-top:12px}.nav.nav-tabs.padding-10{padding-left:10px}.tabs-left>.nav.nav-tabs.padding-10,.tabs-right>.nav.nav-tabs.padding-10{padding-left:0;padding-top:10px}.nav.nav-tabs.padding-8{padding-left:8px}.tabs-left>.nav.nav-tabs.padding-8,.tabs-right>.nav.nav-tabs.padding-8{padding-left:0;padding-top:8px}.nav.nav-tabs.padding-6{padding-left:6px}.tabs-left>.nav.nav-tabs.padding-6,.tabs-right>.nav.nav-tabs.padding-6{padding-left:0;padding-top:6px}.nav.nav-tabs.padding-4{padding-left:4px}.tabs-left>.nav.nav-tabs.padding-4,.tabs-right>.nav.nav-tabs.padding-4{padding-left:0;padding-top:4px}.nav.nav-tabs.padding-2{padding-left:2px}.tabs-left>.nav.nav-tabs.padding-2,.tabs-right>.nav.nav-tabs.padding-2{padding-left:0;padding-top:2px}.nav-tabs{border-color:#C5D0DC;margin-bottom:0!important;margin-left:0;position:relative;top:1px}.nav-tabs>li>a{padding:7px 12px 8px}.nav-tabs>li>a,.nav-tabs>li>a:focus{border-radius:0!important;border-color:#c5d0dc;background-color:#F9F9F9;color:#999;margin-right:-1px;line-height:18px;position:relative}.nav-tabs>li>a:hover{background-color:#FFF;color:#4c8fbd;border-color:#c5d0dc}.nav-tabs>li>a:active,.nav-tabs>li>a:focus{outline:0!important}.nav-tabs>li:first-child>a{margin-left:0}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#576373;border-color:#c5d0dc #c5d0dc transparent;border-top:2px solid #4c8fbd;background-color:#FFF;z-index:1;line-height:18px;margin-top:-1px;box-shadow:0 -2px 3px 0 rgba(0,0,0,.15)}.tabs-below>.nav-tabs{top:auto;margin-bottom:0;margin-top:-1px;border-color:#c5d0dc;border-bottom-width:0}.tabs-below>.nav-tabs>li>a,.tabs-below>.nav-tabs>li>a:focus,.tabs-below>.nav-tabs>li>a:hover{border-color:#c5d0dc}.tabs-below>.nav-tabs>li.active>a,.tabs-below>.nav-tabs>li.active>a:focus,.tabs-below>.nav-tabs>li.active>a:hover{border-color:transparent #c5d0dc #c5d0dc;border-top-width:1px;border-bottom:2px solid #4c8fbd;margin-top:0;box-shadow:0 2px 3px 0 rgba(0,0,0,.15)}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:60px}.tabs-left>.nav-tabs{top:auto;margin-bottom:0;border-color:#c5d0dc;float:left}.tabs-left>.nav-tabs>li{float:none!important}.tabs-left>.nav-tabs>li>a,.tabs-left>.nav-tabs>li>a:focus,.tabs-left>.nav-tabs>li>a:hover{border-color:#c5d0dc;margin:0 -1px 0 0}.tabs-left>.nav-tabs>li.active>a,.tabs-left>.nav-tabs>li.active>a:focus,.tabs-left>.nav-tabs>li.active>a:hover{border-color:#c5d0dc transparent #c5d0dc #c5d0dc;border-top-width:1px;border-left:2px solid #4c8fbd;margin:0 -1px;-webkit-box-shadow:-2px 0 3px 0 rgba(0,0,0,.15)!important;box-shadow:-2px 0 3px 0 rgba(0,0,0,.15)!important}.tabs-right>.nav-tabs{top:auto;margin-bottom:0;border-color:#c5d0dc;float:right}.tabs-right>.nav-tabs>li{float:none!important}.tabs-right>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a:focus,.tabs-right>.nav-tabs>li>a:hover{border-color:#c5d0dc;margin:0 -1px}.tabs-right>.nav-tabs>li.active>a,.tabs-right>.nav-tabs>li.active>a:focus,.tabs-right>.nav-tabs>li.active>a:hover{border-color:#c5d0dc #c5d0dc #c5d0dc transparent;border-top-width:1px;border-right:2px solid #4c8fbd;margin:0 -2px 0 -1px;-webkit-box-shadow:2px 0 3px 0 rgba(0,0,0,.15);box-shadow:2px 0 3px 0 rgba(0,0,0,.15)}.nav-tabs>li>a>.badge{padding:1px 5px;line-height:15px;opacity:.75}.nav-tabs>li>a>.ace-icon{opacity:.75}.nav-tabs>li.active>a>.ace-icon,.nav-tabs>li.active>a>.badge{opacity:1}.nav-tabs li .ace-icon{width:1.25em;display:inline-block;text-align:center}.nav-tabs>li.open .dropdown-toggle{background-color:#4F99C6;border-color:#4F99C6;color:#FFF}.nav-tabs>li.open .dropdown-toggle>.ace-icon{color:#FFF!important}.tabs-left .tab-content,.tabs-right .tab-content{overflow:auto}.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:focus,.nav>li.dropdown.open.active>a:hover{background-color:#4F99C6;border-color:#4F99C6;color:#FFF}.nav-pills .open .dropdown-toggle>.ace-icon,.nav>li.dropdown.open.active>a:focus>.ace-icon,.nav>li.dropdown.open.active>a:hover>.ace-icon{color:#FFF!important}.nav-tabs>li:not(.active):not(.open)>a:not(:hover)>.ace-icon:first-child.disabled{color:#909090!important}.nav-tabs.tab-size-bigger>li>a{padding-left:14px;padding-right:14px}.nav-tabs.tab-size-bigger>li>a>.ace-icon:first-child{display:block;margin-bottom:6px;width:auto}.nav-tabs.tab-space-1>li>a{margin-right:1px}.nav-tabs.tab-space-2>li>a{margin-right:2px}.nav-tabs.tab-space-3>li>a{margin-right:3px}.nav-tabs.tab-space-4>li>a{margin-right:4px}.nav-tabs[class*=tab-color-]>li>a,.nav-tabs[class*=tab-color-]>li>a:focus,.nav-tabs[class*=tab-color-]>li>a:hover{color:#FFF;border-color:transparent;margin-right:3px}.nav-tabs[class*=tab-color-]>li>a>.badge{border-radius:2px}.nav-tabs[class*=tab-color-]>li:not(.active)>a:hover{opacity:.85;border-color:rgba(0,0,0,.15) rgba(0,0,0,.15) transparent}.nav-tabs[class*=tab-color-]>li:not(.active)>a>.ace-icon:first-child{color:#FFF!important}.nav-tabs[class*=tab-color-]>li:not(.active)>a>.badge{color:rgba(0,0,0,.4)!important;background-color:#FFF!important;border-radius:2px}.nav-tabs.tab-color-blue>li>a,.nav-tabs.tab-color-blue>li>a:focus{background-color:#7db4d8}.nav-tabs[class*=tab-color-]>li.active>a,.nav-tabs[class*=tab-color-]>li.active>a:focus,.nav-tabs[class*=tab-color-]>li.active>a:hover{background-color:#FFF;color:#4f80a0;-webkit-box-shadow:none!important;box-shadow:none!important}.nav-tabs.tab-color-blue>li.active>a,.nav-tabs.tab-color-blue>li.active>a:focus,.nav-tabs.tab-color-blue>li.active>a:hover{color:#4c718a;border-color:#7db4d8 #7db4d8 transparent}.tabs-below .nav-tabs.tab-color-blue>li.active>a{border-color:transparent #7db4d8 #7db4d8}.nav-tabs.tab-color-blue{border-bottom-color:#C5D0DC}.nav-tabs.background-blue{padding-top:6px;background-color:#EFF3F8;border:1px solid #C5D0DC}.tabs-below .nav-tabs.background-blue{padding-top:0;padding-bottom:6px}.tabs-below .nav-tabs.tab-color-blue{border-top:none;border-bottom-color:#C5D0DC}.accordion-style1.panel-group .panel{border-radius:0;border-color:#cdd8e3;background-color:#FFF;box-shadow:none}.accordion-style1.panel-group .panel:last-child{border-bottom-width:1px}.accordion-style1.panel-group .panel .collapse{background-color:#FFF}.accordion-style1.panel-group .panel+.panel{margin-top:2px}.accordion-style1.panel-group .panel-heading+.panel-collapse .panel-body{border-top-color:#cdd8e3!important}.accordion-style1.panel-group .panel-heading{padding:0}.accordion-style1.panel-group .panel-heading .accordion-toggle{color:#4c8fbd;background-color:#eef4f9;position:relative;font-weight:700;font-size:13px;line-height:1;padding:10px;display:block}.accordion-style1.panel-group .panel-heading .accordion-toggle.collapsed{color:#478fca;font-weight:400;background-color:#F9F9F9}.accordion-style1.panel-group .panel-heading .accordion-toggle:hover{color:#6ea6cc;background-color:#f1f8fd;text-decoration:none}.accordion-style1.panel-group .panel-heading .accordion-toggle:active,.accordion-style1.panel-group .panel-heading .accordion-toggle:focus{outline:0;text-decoration:none}.accordion-style1.panel-group .panel-heading .accordion-toggle>.ace-icon:first-child{width:16px}.accordion-style1.panel-group .panel-heading .accordion-toggle:hover>.ace-icon:first-child{text-decoration:none}.accordion-style1.panel-group .collapse.in>.panel-body,.accordion-style1.panel-group .panel-body{border-top:1px solid #cdd8e3}.accordion-style1.panel-group.no-padding{padding:0}.accordion-style2.panel-group .panel{border-width:0}.accordion-style2.panel-group .panel:last-child{border-bottom-width:0}.accordion-style2.panel-group .panel+.panel{margin-top:4px}.accordion-style2.panel-group .panel .panel-body{border-top:none}.accordion-style2.panel-group .panel-heading .accordion-toggle{background-color:#EDF3F7;border:2px solid #6EAED1;border-width:0 0 0 2px}.accordion-style2.panel-group .panel-heading .accordion-toggle:hover{text-decoration:none}.accordion-style2.panel-group .panel-heading .accordion-toggle.collapsed{background-color:#F3F3F3;color:#606060;border-width:0 0 0 1px;border-color:#D9D9D9}.accordion-style2.panel-group .panel-heading .accordion-toggle.collapsed:hover{background-color:#F6F6F6;color:#438EB9;text-decoration:none}.accordion-style2.panel-group .collapse.in>.panel-body,.accordion-style2.panel-group .panel-body{border-top:none}.accordion-style2.panel-group .accordion-style2.panel-group .panel{border-bottom:1px dotted #D9D9D9}.accordion-style2.panel-group .accordion-style2.panel-group .panel:last-child{border-bottom:none}.accordion-style2.panel-group .accordion-style2.panel-group .panel .panel-heading,.accordion-style2.panel-group .accordion-style2.panel-group .panel .panel-heading .accordion-toggle{background-color:transparent;border-width:0;font-size:13px;padding-top:6px;padding-bottom:8px}.accordion-style2.panel-group .accordion-style2.panel-group .panel .panel-heading{padding-top:0;padding-bottom:0}.table-bordered,td,th{border-radius:0!important}.table>thead>tr{color:#707070;font-weight:400;background:#F2F2F2 repeat-x;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#ececec 100%);background-image:-o-linear-gradient(top,#f8f8f8 0,#ececec 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#ececec 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8', endColorstr='#ffececec', GradientType=0)}.table>thead>tr>th{border-color:#ddd;font-weight:700}.table>thead>tr>th .ace-icon:first-child{margin-right:2px}.table>thead>tr>th:first-child{border-left-color:#F1F1F1}.table>thead>tr>th:left-child{border-right-color:#F1F1F1}.table.table-bordered>thead>tr>th{vertical-align:middle}.table.table-bordered>thead>tr>th:first-child{border-left-color:#ddd}td.center,th.center{text-align:center}td .lbl,th .lbl{margin-bottom:0}td .lbl:only-child,th .lbl:only-child{vertical-align:top}.table-header{background-color:#307ecc;color:#FFF;font-size:14px;line-height:38px;padding-left:12px;margin-bottom:1px}.table-header .close{margin-right:8px;margin-top:0;opacity:.45;filter:alpha(opacity=45)}.table-header .close:hover{opacity:.75;filter:alpha(opacity=75)}.widget-box{padding:0;-webkit-box-shadow:none;box-shadow:none;margin:3px 0;border:1px solid #CCC}@media only screen and (max-width:767px){.widget-box{margin-top:7px;margin-bottom:7px}}.widget-header{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;position:relative;min-height:38px;background:#f7f7f7 repeat-x;background-image:-webkit-linear-gradient(top,#fff 0,#eee 100%);background-image:-o-linear-gradient(top,#fff 0,#eee 100%);background-image:linear-gradient(to bottom,#fff 0,#eee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);color:#669fc7;border-bottom:1px solid #DDD;padding-left:12px}.widget-header:after,.widget-header:before{content:"";display:table;line-height:0}.widget-header:after{clear:right}.widget-box.collapsed>.widget-header{border-bottom-width:0}.collapsed.fullscreen>.widget-header{border-bottom-width:1px}.collapsed>.widget-body{display:none}.widget-header-flat{background:#F7F7F7;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.widget-header-large{min-height:49px;padding-left:18px}.widget-header-small{min-height:31px;padding-left:10px}.widget-header>.widget-title{line-height:36px;padding:0;margin:0;display:inline}.widget-header>.widget-title>.ace-icon{margin-right:5px;font-weight:400;display:inline-block}.widget-header-large>.widget-title{line-height:48px}.widget-header-small>.widget-title{line-height:30px}.widget-toolbar{display:inline-block;padding:0 10px;line-height:37px;float:right;position:relative}.widget-header-large>.widget-toolbar{line-height:48px}.widget-header-small>.widget-toolbar{line-height:29px}.widget-toolbar.no-padding{padding:0}.widget-toolbar.padding-5{padding:0 5px}.widget-toolbar:before{display:inline-block;content:"";position:absolute;top:3px;bottom:3px;left:-1px;border:1px solid #D9D9D9;border-width:0 1px 0 0}.widget-header-large>.widget-toolbar:before{top:6px;bottom:6px}[class*=widget-color-]>.widget-header>.widget-toolbar:before{border-color:#EEE}.widget-color-orange>.widget-header>.widget-toolbar:before{border-color:#FEA}.widget-color-dark>.widget-header>.widget-toolbar:before{border-color:#222;box-shadow:-1px 0 0 rgba(255,255,255,.2),inset 1px 0 0 rgba(255,255,255,.1)}.widget-toolbar.no-border:before{display:none}.widget-toolbar label{display:inline-block;vertical-align:middle;margin-bottom:0}.widget-toolbar>.widget-menu>a,.widget-toolbar>a{font-size:14px;margin:0 1px;display:inline-block;padding:0;line-height:24px}.widget-toolbar>.widget-menu>a:hover,.widget-toolbar>a:hover{text-decoration:none}.widget-header-large>.widget-toolbar>.widget-menu>a,.widget-header-large>.widget-toolbar>a{font-size:15px;margin:0 1px}.widget-toolbar>.btn{line-height:27px;margin-top:-2px}.widget-toolbar>.btn.smaller{line-height:26px}.widget-toolbar>.btn.bigger{line-height:28px}.widget-toolbar>.btn-sm{line-height:24px}.widget-toolbar>.btn-sm.smaller{line-height:23px}.widget-toolbar>.btn-sm.bigger{line-height:25px}.widget-toolbar>.btn-xs{line-height:22px}.widget-toolbar>.btn-xs.smaller{line-height:21px}.widget-toolbar>.btn-xs.bigger{line-height:23px}.widget-toolbar>.btn-minier{line-height:18px}.widget-toolbar>.btn-minier.smaller{line-height:17px}.widget-toolbar>.btn-minier.bigger{line-height:19px}.widget-toolbar>.btn-lg{line-height:36px}.widget-toolbar>.btn-lg.smaller{line-height:34px}.widget-toolbar>.btn-lg.bigger{line-height:38px}.widget-toolbar-dark{background:#444}.widget-toolbar-light{background:rgba(255,255,255,.85)}.widget-toolbar>.widget-menu{display:inline-block;position:relative}.widget-toolbar>.widget-menu>a[data-action],.widget-toolbar>a[data-action]{-webkit-transition:transform .1s;-o-transition:transform .1s;transition:transform .1s}.widget-toolbar>.widget-menu>a[data-action]>.ace-icon,.widget-toolbar>a[data-action]>.ace-icon{margin-right:0}.widget-toolbar>.widget-menu>a[data-action]:focus,.widget-toolbar>a[data-action]:focus{text-decoration:none;outline:0}.widget-toolbar>.widget-menu>a[data-action]:hover,.widget-toolbar>a[data-action]:hover{-moz-transform:scale(1.2);-webkit-transform:scale(1.2);-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.widget-body{background-color:#FFF}.widget-main{padding:12px}.widget-main.padding-32{padding:32px}.widget-main.padding-30{padding:30px}.widget-main.padding-28{padding:28px}.widget-main.padding-26{padding:26px}.widget-main.padding-24{padding:24px}.widget-main.padding-22{padding:22px}.widget-main.padding-20{padding:20px}.widget-main.padding-18{padding:18px}.widget-main.padding-16{padding:16px}.widget-main.padding-14{padding:14px}.widget-main.padding-12{padding:12px}.widget-main.padding-10{padding:10px}.widget-main.padding-8{padding:8px}.widget-main.padding-6{padding:6px}.widget-main.padding-4{padding:4px}.widget-main.padding-2{padding:2px}.widget-main.no-padding,.widget-main.padding-0{padding:0}.widget-toolbar .progress{vertical-align:middle;display:inline-block;margin:0}.widget-toolbar>.dropdown,.widget-toolbar>.dropup{display:inline-block}.widget-box>.widget-header>.widget-toolbar>.widget-menu>[data-action=settings],.widget-box>.widget-header>.widget-toolbar>[data-action=settings],.widget-color-dark>.widget-header>.widget-toolbar>.widget-menu>[data-action=settings],.widget-color-dark>.widget-header>.widget-toolbar>[data-action=settings]{color:#99CADB}.widget-box>.widget-header>.widget-toolbar>.widget-menu>[data-action=reload],.widget-box>.widget-header>.widget-toolbar>[data-action=reload],.widget-color-dark>.widget-header>.widget-toolbar>.widget-menu>[data-action=reload],.widget-color-dark>.widget-header>.widget-toolbar>[data-action=reload]{color:#ACD392}.widget-box>.widget-header>.widget-toolbar>.widget-menu>[data-action=collapse],.widget-box>.widget-header>.widget-toolbar>[data-action=collapse],.widget-color-dark>.widget-header>.widget-toolbar>.widget-menu>[data-action=collapse],.widget-color-dark>.widget-header>.widget-toolbar>[data-action=collapse]{color:#AAA}.widget-box>.widget-header>.widget-toolbar>.widget-menu>[data-action=close],.widget-box>.widget-header>.widget-toolbar>[data-action=close],.widget-color-dark>.widget-header>.widget-toolbar>.widget-menu>[data-action=close],.widget-color-dark>.widget-header>.widget-toolbar>[data-action=close]{color:#E09E96}.widget-box[class*=widget-color-]>.widget-header{color:#FFF;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.widget-color-blue{border-color:#307ecc}.widget-color-blue>.widget-header{background:#307ecc;border-color:#307ecc}.widget-color-blue2{border-color:#5090c1}.widget-color-blue2>.widget-header{background:#5090c1;border-color:#5090c1}.widget-color-blue3{border-color:#6379aa}.widget-color-blue3>.widget-header{background:#6379aa;border-color:#6379aa}.widget-color-green{border-color:#82af6f}.widget-color-green>.widget-header{background:#82af6f;border-color:#82af6f}.widget-color-green2{border-color:#2e8965}.widget-color-green2>.widget-header{background:#2e8965;border-color:#2e8965}.widget-color-green3{border-color:#4ebc30}.widget-color-green3>.widget-header{background:#4ebc30;border-color:#4ebc30}.widget-color-red{border-color:#e2755f}.widget-color-red>.widget-header{background:#e2755f;border-color:#e2755f}.widget-color-red2{border-color:#e04141}.widget-color-red2>.widget-header{background:#e04141;border-color:#e04141}.widget-color-red3{border-color:#d15b47}.widget-color-red3>.widget-header{background:#d15b47;border-color:#d15b47}.widget-color-purple{border-color:#7e6eb0}.widget-color-purple>.widget-header{background:#7e6eb0;border-color:#7e6eb0}.widget-color-pink{border-color:#ce6f9e}.widget-color-pink>.widget-header{background:#ce6f9e;border-color:#ce6f9e}.widget-color-orange{border-color:#e8b10d}.widget-color-orange>.widget-header{color:#855d10!important;border-color:#e8b10d;background:#ffc657}.widget-color-dark{border-color:#5a5a5a}.widget-color-dark>.widget-header{border-color:#666;background:#404040}.widget-color-grey{border-color:#9e9e9e}.widget-color-grey>.widget-header{border-color:#aaa;background:#848484}.widget-box.transparent{border-width:0}.widget-box.transparent>.widget-header{background:0 0;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-width:0;border-bottom:1px solid #DCE8F1;color:#4383B4;padding-left:3px}.widget-box.transparent>.widget-header-large{padding-left:5px}.widget-box.transparent>.widget-header-small{padding-left:1px}.widget-box.transparent>.widget-body{border-width:0;background-color:transparent}[class*=widget-color-]>.widget-header>.widget-toolbar>.widget-menu>[data-action],[class*=widget-color-]>.widget-header>.widget-toolbar>[data-action]{text-shadow:0 1px 1px rgba(0,0,0,.2)}[class*=widget-color-]>.widget-header>.widget-toolbar>.widget-menu>[data-action=settings],[class*=widget-color-]>.widget-header>.widget-toolbar>[data-action=settings]{color:#D3E4ED}[class*=widget-color-]>.widget-header>.widget-toolbar>.widget-menu>[data-action=reload],[class*=widget-color-]>.widget-header>.widget-toolbar>[data-action=reload]{color:#DEEAD3}[class*=widget-color-]>.widget-header>.widget-toolbar>.widget-menu>[data-action=collapse],[class*=widget-color-]>.widget-header>.widget-toolbar>[data-action=collapse]{color:#E2E2E2}[class*=widget-color-]>.widget-header>.widget-toolbar>.widget-menu>[data-action=close],[class*=widget-color-]>.widget-header>.widget-toolbar>[data-action=close]{color:#FFD9D5}.widget-color-orange>.widget-header>.widget-toolbar>.widget-menu>[data-action],.widget-color-orange>.widget-header>.widget-toolbar>[data-action]{text-shadow:none}.widget-color-orange>.widget-header>.widget-toolbar>.widget-menu>[data-action=settings],.widget-color-orange>.widget-header>.widget-toolbar>[data-action=settings]{color:#559AAB}.widget-color-orange>.widget-header>.widget-toolbar>.widget-menu>[data-action=reload],.widget-color-orange>.widget-header>.widget-toolbar>[data-action=reload]{color:#7CA362}.widget-color-orange>.widget-header>.widget-toolbar>.widget-menu>[data-action=collapse],.widget-color-orange>.widget-header>.widget-toolbar>[data-action=collapse]{color:#777}.widget-color-orange>.widget-header>.widget-toolbar>.widget-menu>[data-action=close],.widget-color-orange>.widget-header>.widget-toolbar>[data-action=close]{color:#A05656}.widget-box.light-border[class*=widget-color-]:not(.fullscreen){border-width:0}.widget-box.light-border[class*=widget-color-]:not(.fullscreen)>.widget-header{border:1px solid;border-color:inherit}.widget-box.light-border[class*=widget-color-]:not(.fullscreen)>.widget-body{border:1px solid;border-color:#D6D6D6;border-width:0 1px 1px}.widget-box.no-border{border-width:0}.widget-box.fullscreen{position:fixed;margin:0;top:0;bottom:0;left:0;right:0;background-color:#FFF;border-width:3px;z-index:1040;-moz-backface-visibility:hidden}.widget-box.fullscreen:not([class*=widget-color-]){border-color:#AAA}.widget-body .table{border-top:1px solid #E5E5E5}.widget-body .table thead:first-child tr{background:#FFF}[class*=widget-color-]>.widget-body .table thead:first-child tr{background:#f2f2f2 repeat-x;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#ececec 100%);background-image:-o-linear-gradient(top,#f8f8f8 0,#ececec 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#ececec 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8', endColorstr='#ffececec', GradientType=0)}.widget-body .table.table-bordered thead:first-child>tr{border-top-width:0}.widget-main.no-padding .table{margin-bottom:0;border-width:0}.widget-main.no-padding .table-bordered td:first-child,.widget-main.no-padding .table-bordered th:first-child{border-left-width:0}.transparent>.widget-body .widget-main .table-bordered>tbody>tr>td:last-child,.transparent>.widget-body .widget-main .table-bordered>tfoot>tr>td:last-child,.transparent>.widget-body .widget-main .table-bordered>thead>tr>th:last-child,.widget-main.no-padding .table-bordered>tbody>tr>td:last-child,.widget-main.no-padding .table-bordered>tfoot>tr>td:last-child,.widget-main.no-padding .table-bordered>thead>tr>th:last-child{border-right-width:0!important}.transparent>.widget-body .widget-main .table-bordered>tbody>tr:last-child>td,.widget-main.no-padding .table-bordered>tbody>tr:last-child>td{border-bottom-width:0!important}.table-bordered>thead.thin-border-bottom>tr>td,.table-bordered>thead.thin-border-bottom>tr>th{border-bottom-width:1px}.widget-body .alert:last-child{margin-bottom:0}.widget-main .tab-content{border-width:0}.widget-toolbar>.nav-tabs{border-bottom-width:0;margin-bottom:0;top:auto;margin-top:3px!important}.widget-toolbar>.nav-tabs>li{margin-bottom:auto}.widget-toolbar>.nav-tabs>li>a{box-shadow:none;position:relative;top:1px;margin-top:1px}.widget-toolbar>.nav-tabs>li:not(.active)>a{border-color:transparent;background-color:transparent}.widget-toolbar>.nav-tabs>li:not(.active)>a:hover{background-color:transparent}.widget-toolbar>.nav-tabs>li.active>a{background-color:#FFF;border-bottom-color:transparent;box-shadow:none;margin-top:auto}.widget-header-small>.widget-toolbar>.nav-tabs>li>a{line-height:16px;padding-top:6px;padding-bottom:6px}.widget-header-small>.widget-toolbar>.nav-tabs>li.active>a{border-top-width:2px}.widget-header-large>.widget-toolbar>.nav-tabs>li>a{line-height:22px;padding-top:9px;padding-bottom:9px;margin-top:4px}.widget-header-large>.widget-toolbar>.nav-tabs>li.active>a{margin-top:3px}[class*=widget-color-]>.widget-header>.widget-toolbar>.nav-tabs>li>a{border-color:transparent;background-color:transparent;color:#FFF;margin-right:1px}[class*=widget-color-]>.widget-header>.widget-toolbar>.nav-tabs>li>a:hover{background-color:#FFF;color:#555;border-top-color:#FFF}[class*=widget-color-]>.widget-header>.widget-toolbar>.nav-tabs>li.active>a{background-color:#FFF;color:#555;border-top-width:1px;margin-top:0}.widget-toolbar>.nav-tabs .widget-color-orange>.widget-header>li>a{color:#855D10}.transparent>.widget-header>.widget-toolbar>.nav-tabs>li>a{color:#555;background-color:transparent;border-right:1px solid transparent;border-left:1px solid transparent}.transparent>.widget-header>.widget-toolbar>.nav-tabs>li.active>a{border-top-color:#4C8FBD;border-right:1px solid #C5D0DC;border-left:1px solid #C5D0DC;background-color:#FFF;box-shadow:none}.widget-toolbox{background-color:#EEE}.widget-toolbox:first-child{padding:2px;border-bottom:1px solid #CCC}.widget-toolbox:last-child{padding:2px;border-top:1px solid #CCC}.transparent>.widget-body>.widget-toolbox:last-child{border:none;border-top:1px solid #CCC}.widget-toolbox>.btn-toolbar{margin:0!important;padding:0}.widget-toolbox.center{text-align:center}.widget-toolbox.padding-16{padding:16px}.widget-toolbox.padding-14{padding:14px}.widget-toolbox.padding-12{padding:12px}.widget-toolbox.padding-10{padding:10px}.widget-toolbox.padding-8{padding:8px}.widget-toolbox.padding-6{padding:6px}.widget-toolbox.padding-4{padding:4px}.widget-toolbox.padding-2{padding:2px}.widget-toolbox.padding-0{padding:0}.widget-box-overlay{position:absolute;top:-1px;bottom:-1px;right:-1px;left:-1px;z-index:999;text-align:center;min-height:100%;background-color:rgba(0,0,0,.3)}.widget-box-overlay>.loading-icon{position:relative;top:20%;left:0;right:0;text-align:center}.widget-box.collapsed .widget-box-overlay>.loading-icon{top:10%}.widget-box-overlay>.loading-icon.icon-spin{-moz-animation-duration:1.2s;-webkit-animation-duration:1.2s;-o-animation-duration:1.2s;-ms-animation-duration:1.2s;animation-duration:1.2s}.widget-main>form,.widget-main>form .input-append,.widget-main>form .input-prepend{margin-bottom:0}.widget-main.no-padding>form>fieldset,.widget-main.padding-0>form>fieldset{padding:16px}.widget-main.no-padding>form>fieldset+.form-actions,.widget-main.padding-0>form>fieldset+.form-actions{padding:10px 0 12px}.widget-main.no-padding>form>.form-actions,.widget-main.padding-0>form>.form-actions{margin:0;padding:10px 12px 12px}.widget-placeholder{border:2px dashed #D9D9D9}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip-inner{background-color:#333;color:#FFF;font-size:12px;text-shadow:1px 1px 0 rgba(42,45,50,.5);border-radius:0;padding:5px 9px}.tooltip.top .tooltip-arrow{border-bottom-width:0;border-top-color:#333;-moz-border-top-colors:#333}.tooltip.right .tooltip-arrow{border-left-width:0;border-right-color:#333;-moz-border-right-colors:#333}.tooltip.left .tooltip-arrow{border-right-width:0;border-left-color:#333;-moz-border-left-colors:#333}.tooltip.bottom .tooltip-arrow{border-top-width:0;border-bottom-color:#333;-moz-border-bottom-colors:#333}.tooltip-error+.tooltip>.tooltip-inner,.tooltip.tooltip-error>.tooltip-inner{background-color:#c94d32;text-shadow:1px 1px 0 rgba(100,60,20,.3)}.tooltip-error+.tooltip.top .tooltip-arrow,.tooltip.tooltip-error.top .tooltip-arrow{border-top-color:#c94d32;-moz-border-top-colors:#c94d32}.tooltip-error+.tooltip.right .tooltip-arrow,.tooltip.tooltip-error.right .tooltip-arrow{border-right-color:#c94d32;-moz-border-right-colors:#c94d32}.tooltip-error+.tooltip.left .tooltip-arrow,.tooltip.tooltip-error.left .tooltip-arrow{border-left-color:#c94d32;-moz-border-left-colors:#c94d32}.tooltip-error+.tooltip.bottom .tooltip-arrow,.tooltip.tooltip-error.bottom .tooltip-arrow{border-bottom-color:#c94d32;-moz-border-bottom-colors:#c94d32}.tooltip-success+.tooltip>.tooltip-inner,.tooltip.tooltip-success>.tooltip-inner{background-color:#629b58;text-shadow:1px 1px 0 rgba(60,100,20,.3)}.tooltip-success+.tooltip.top .tooltip-arrow,.tooltip.tooltip-success.top .tooltip-arrow{border-top-color:#629b58;-moz-border-top-colors:#629b58}.tooltip-success+.tooltip.right .tooltip-arrow,.tooltip.tooltip-success.right .tooltip-arrow{border-right-color:#629b58;-moz-border-right-colors:#629b58}.tooltip-success+.tooltip.left .tooltip-arrow,.tooltip.tooltip-success.left .tooltip-arrow{border-left-color:#629b58;-moz-border-left-colors:#629b58}.tooltip-success+.tooltip.bottom .tooltip-arrow,.tooltip.tooltip-success.bottom .tooltip-arrow{border-bottom-color:#629b58;-moz-border-bottom-colors:#629b58}.tooltip-warning+.tooltip>.tooltip-inner,.tooltip.tooltip-warning>.tooltip-inner{background-color:#ed9421;text-shadow:1px 1px 0 rgba(100,90,10,.3)}.tooltip-warning+.tooltip.top .tooltip-arrow,.tooltip.tooltip-warning.top .tooltip-arrow{border-top-color:#ed9421;-moz-border-top-colors:#ed9421}.tooltip-warning+.tooltip.right .tooltip-arrow,.tooltip.tooltip-warning.right .tooltip-arrow{border-right-color:#ed9421;-moz-border-right-colors:#ed9421}.tooltip-warning+.tooltip.left .tooltip-arrow,.tooltip.tooltip-warning.left .tooltip-arrow{border-left-color:#ed9421;-moz-border-left-colors:#ed9421}.tooltip-warning+.tooltip.bottom .tooltip-arrow,.tooltip.tooltip-warning.bottom .tooltip-arrow{border-bottom-color:#ed9421;-moz-border-bottom-colors:#ed9421}.tooltip-info+.tooltip>.tooltip-inner,.tooltip.tooltip-info>.tooltip-inner{background-color:#4b89aa;text-shadow:1px 1px 0 rgba(40,50,100,.3)}.tooltip-info+.tooltip.top .tooltip-arrow,.tooltip.tooltip-info.top .tooltip-arrow{border-top-color:#4b89aa;-moz-border-top-colors:#4b89aa}.tooltip-info+.tooltip.right .tooltip-arrow,.tooltip.tooltip-info.right .tooltip-arrow{border-right-color:#4b89aa;-moz-border-right-colors:#4b89aa}.tooltip-info+.tooltip.left .tooltip-arrow,.tooltip.tooltip-info.left .tooltip-arrow{border-left-color:#4b89aa;-moz-border-left-colors:#4b89aa}.tooltip-info+.tooltip.bottom .tooltip-arrow,.tooltip.tooltip-info.bottom .tooltip-arrow{border-bottom-color:#4b89aa;-moz-border-bottom-colors:#4b89aa}.popover{border-radius:0;padding:0;border-color:#ccc;border-width:1px;-webkit-box-shadow:0 0 4px 2px rgba(0,0,0,.2);box-shadow:0 0 4px 2px rgba(0,0,0,.2);color:#4D6883}.popover-title{border-radius:0;background-color:#eff3f8;color:#555;border-bottom:1px solid #dde6f0;text-shadow:1px 1px 1px rgba(220,220,220,.2)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;border-bottom-color:#eff3f8;-moz-border-bottom-colors:#eff3f8;border-top-width:0}.popover.left>.arrow:after{-moz-border-left-colors:#FFF}.popover.right>.arrow:after{-moz-border-right-colors:#FFF}.popover.top>.arrow:after{-moz-border-top-colors:#FFF}.popover-error+.popover,.popover.popover-error{border-color:#f7f0ef}.popover-error+.popover .popover-title,.popover.popover-error .popover-title{background-color:#f7f0ef;border-bottom-color:#efe0de;color:#b75445;text-shadow:none}.popover-error+.popover.top .arrow:after,.popover.popover-error.top .arrow:after{border-top-color:#f7f0ef;-moz-border-top-colors:#f7f0ef}.popover-error+.popover.bottom .arrow:after,.popover.popover-error.bottom .arrow:after{border-bottom-color:#f7f0ef;-moz-border-bottom-colors:#f7f0ef}.popover-error+.popover.right .arrow:after,.popover.popover-error.right .arrow:after{border-right-color:#f7f0ef;-moz-border-right-colors:#f7f0ef}.popover-error+.popover.left .arrow:after,.popover.popover-error.left .arrow:after{border-left-color:#f7f0ef;-moz-border-left-colors:#f7f0ef}.popover-warning+.popover,.popover.popover-warning{border-color:#f4eee3}.popover-warning+.popover .popover-title,.popover.popover-warning .popover-title{background-color:#f4eee3;border-bottom-color:#ede3d1;color:#d67e31;text-shadow:none}.popover-warning+.popover.top .arrow:after,.popover.popover-warning.top .arrow:after{border-top-color:#f4eee3;-moz-border-top-colors:#f4eee3}.popover-warning+.popover.bottom .arrow:after,.popover.popover-warning.bottom .arrow:after{border-bottom-color:#f4eee3;-moz-border-bottom-colors:#f4eee3}.popover-warning+.popover.right .arrow:after,.popover.popover-warning.right .arrow:after{border-right-color:#f4eee3;-moz-border-right-colors:#f4eee3}.popover-warning+.popover.left .arrow:after,.popover.popover-warning.left .arrow:after{border-left-color:#f4eee3;-moz-border-left-colors:#f4eee3}.popover-success+.popover,.popover.popover-success{border-color:#e8f2e3}.popover-success+.popover .popover-title,.popover.popover-success .popover-title{background-color:#e8f2e3;border-bottom-color:#daead2;color:#629b58;text-shadow:none}.popover-success+.popover.top .arrow:after,.popover.popover-success.top .arrow:after{border-top-color:#e8f2e3;-moz-border-top-colors:#e8f2e3}.popover-success+.popover.bottom .arrow:after,.popover.popover-success.bottom .arrow:after{border-bottom-color:#e8f2e3;-moz-border-bottom-colors:#e8f2e3}.popover-success+.popover.right .arrow:after,.popover.popover-success.right .arrow:after{border-right-color:#e8f2e3;-moz-border-right-colors:#e8f2e3}.popover-success+.popover.left .arrow:after,.popover.popover-success.left .arrow:after{border-left-color:#e8f2e3;-moz-border-left-colors:#e8f2e3}.popover-info+.popover,.popover.popover-info{border-color:#e5edf8}.popover-info+.popover .popover-title,.popover.popover-info .popover-title{background-color:#e5edf8;border-bottom-color:#d1dff3;color:#3f79b6;text-shadow:none}.popover-info+.popover.top .arrow:after,.popover.popover-info.top .arrow:after{border-top-color:#e5edf8;-moz-border-top-colors:#e5edf8}.popover-info+.popover.bottom .arrow:after,.popover.popover-info.bottom .arrow:after{border-bottom-color:#e5edf8;-moz-border-bottom-colors:#e5edf8}.popover-info+.popover.right .arrow:after,.popover.popover-info.right .arrow:after{border-right-color:#e5edf8;-moz-border-right-colors:#e5edf8}.popover-info+.popover.left .arrow:after,.popover.popover-info.left .arrow:after{border-left-color:#e5edf8;-moz-border-left-colors:#e5edf8}.popover-notitle+.popover .popover-title,.popover.popover-notitle .popover-title{display:none}.popover-notitle+.popover.top .arrow:after,.popover.popover-notitle.top .arrow:after{border-top-color:#FFF;-moz-border-top-colors:#FFF}.popover-notitle+.popover.bottom .arrow:after,.popover.popover-notitle.bottom .arrow:after{border-bottom-color:#FFF;-moz-border-bottom-colors:#FFF}.popover-notitle+.popover.left .arrow:after,.popover.popover-notitle.left .arrow:after{border-left-color:#FFF;-moz-border-left-colors:#FFF}.popover-notitle+.popover.right .arrow:after,.popover.popover-notitle.right .arrow:after{border-right-color:#FFF;-moz-border-right-colors:#FFF}.progress{border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:#dadada;height:18px}.progress .progress-bar{-webkit-box-shadow:none;box-shadow:none;line-height:18px}.progress[data-percent]:after{display:inline-block;content:attr(data-percent);color:#FFF;position:absolute;left:0;right:0;top:0;bottom:0;line-height:16px;text-align:center;font-size:12px}.progress.progress-yellow[data-percent]:after{color:#963}.progress.progress-small{height:12px}.progress.progress-small .progress-bar,.progress.progress-small[data-percent]:after{line-height:10px;font-size:11px}.progress.progress-mini{height:9px}.progress.progress-mini .progress-bar,.progress.progress-mini[data-percent]:after{line-height:8px;font-size:11px}.progress-bar{background-color:#2a91d8}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#ca5952}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-success{background-color:#59a84b}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f2bb46}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-pink{background-color:#d6487e}.progress-striped .progress-bar-pink{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-purple{background-color:#9585bf}.progress-striped .progress-bar-purple{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-yellow{background-color:#ffd259}.progress-striped .progress-bar-yellow{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-inverse{background-color:#404040}.progress-striped .progress-bar-inverse{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-grey{background-color:#8a8a8a}.progress-striped .progress-bar-grey{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.infobox-container{text-align:center;font-size:0}.infobox{display:inline-block;width:210px;height:66px;color:#555;background-color:#FFF;box-shadow:none;border-radius:0;margin:-1px 0 0 -1px;padding:8px 3px 6px 9px;border:1px dotted;border-color:#D8D8D8!important;vertical-align:middle;text-align:left;position:relative}.infobox>.infobox-icon{display:inline-block;vertical-align:top;width:44px}.infobox>.infobox-icon>.ace-icon{display:inline-block;height:42px;margin:0;padding:1px 1px 0 2px;background-color:transparent;border-width:0;text-align:center;position:relative;border-radius:100%;-webkit-box-shadow:1px 1px 0 rgba(0,0,0,.2);box-shadow:1px 1px 0 rgba(0,0,0,.2)}.infobox>.infobox-icon>.ace-icon:before{font-size:24px;display:block;padding:6px 0 7px;width:40px;text-align:center;border-radius:100%;color:#FFF;color:rgba(255,255,255,.9);background-color:transparent;background-color:rgba(255,255,255,.2);text-shadow:1px 1px 1px rgba(0,0,0,.14)}.infobox .infobox-content{color:#555}.infobox .infobox-content:first-child{font-weight:700}.infobox>.infobox-data{display:inline-block;border-width:0;font-size:13px;text-align:left;line-height:21px;min-width:130px;padding-left:8px;position:relative;top:0}.infobox>.infobox-data>.infobox-data-number{display:block;font-size:22px;margin:2px 0 4px;position:relative;text-shadow:1px 1px 0 rgba(0,0,0,.15)}.infobox>.infobox-data>.infobox-text{display:block;font-size:16px;margin:2px 0 4px;position:relative;text-shadow:none}.infobox.no-border{border-width:0!important}@media only screen and (max-width:479px){.infobox{min-width:95%;margin-top:2px;margin-bottom:2px}}.infobox-purple{color:#6f3cc4;border-color:#6f3cc4}.infobox-purple>.infobox-icon>.ace-icon{background-color:#6f3cc4}.infobox-purple.infobox-dark{background-color:#6f3cc4;border-color:#6f3cc4}.infobox-purple2{color:#5f47b0;border-color:#5f47b0}.infobox-purple2>.infobox-icon>.ace-icon{background-color:#5f47b0}.infobox-purple2.infobox-dark{background-color:#5f47b0;border-color:#5f47b0}.infobox-pink{color:#cb6fd7;border-color:#cb6fd7}.infobox-pink>.infobox-icon>.ace-icon{background-color:#cb6fd7}.infobox-pink.infobox-dark{background-color:#cb6fd7;border-color:#cb6fd7}.infobox-blue{color:#6fb3e0;border-color:#6fb3e0}.infobox-blue>.infobox-icon>.ace-icon{background-color:#6fb3e0}.infobox-blue.infobox-dark{background-color:#6fb3e0;border-color:#6fb3e0}.infobox-blue2{color:#3983c2;border-color:#3983c2}.infobox-blue2>.infobox-icon>.ace-icon{background-color:#3983c2}.infobox-blue2.infobox-dark{background-color:#3983c2;border-color:#3983c2}.infobox-blue3{color:#1144eb;border-color:#1144eb}.infobox-blue3>.infobox-icon>.ace-icon{background-color:#1144eb}.infobox-blue3.infobox-dark{background-color:#1144eb;border-color:#1144eb}.infobox-red{color:#d53f40;border-color:#d53f40}.infobox-red>.infobox-icon>.ace-icon{background-color:#d53f40}.infobox-red.infobox-dark{background-color:#d53f40;border-color:#d53f40}.infobox-brown{color:#c67a3e;border-color:#c67a3e}.infobox-brown>.infobox-icon>.ace-icon{background-color:#c67a3e}.infobox-brown.infobox-dark{background-color:#c67a3e;border-color:#c67a3e}.infobox-wood{color:#7b3f25;border-color:#7b3f25}.infobox-wood>.infobox-icon>.ace-icon{background-color:#7b3f25}.infobox-wood.infobox-dark{background-color:#7b3f25;border-color:#7b3f25}.infobox-light-brown{color:#cebea5;border-color:#cebea5}.infobox-light-brown>.infobox-icon>.ace-icon{background-color:#cebea5}.infobox-light-brown.infobox-dark{background-color:#cebea5;border-color:#cebea5}.infobox-orange{color:#e8b110;border-color:#e8b110}.infobox-orange>.infobox-icon>.ace-icon{background-color:#e8b110}.infobox-orange.infobox-dark{background-color:#e8b110;border-color:#e8b110}.infobox-orange2{color:#f79263;border-color:#f79263}.infobox-orange2>.infobox-icon>.ace-icon{background-color:#f79263}.infobox-orange2.infobox-dark{background-color:#f79263;border-color:#f79263}.infobox-green{color:#9abc32;border-color:#9abc32}.infobox-green>.infobox-icon>.ace-icon{background-color:#9abc32}.infobox-green.infobox-dark{background-color:#9abc32;border-color:#9abc32}.infobox-green2{color:#0490a6;border-color:#0490a6}.infobox-green2>.infobox-icon>.ace-icon{background-color:#0490a6}.infobox-green2.infobox-dark{background-color:#0490a6;border-color:#0490a6}.infobox-grey{color:#999;border-color:#999}.infobox-grey>.infobox-icon>.ace-icon{background-color:#999}.infobox-grey.infobox-dark{background-color:#999;border-color:#999}.infobox-black{color:#393939;border-color:#393939}.infobox-black>.infobox-icon>.ace-icon{background-color:#393939}.infobox-black.infobox-dark{background-color:#393939;border-color:#393939}.infobox-dark{margin:1px 1px 0 0;border-color:transparent!important;border-width:0;color:#FFF;padding:4px}.infobox-dark>.infobox-icon>.ace-icon,.infobox-dark>.infobox-icon>.ace-icon:before{background-color:transparent;box-shadow:none!important;text-shadow:none;border-radius:0;font-size:30px}.infobox-dark>.infobox-icon>.ace-icon:before{opacity:1;filter:alpha(opacity=100)}.infobox-dark .infobox-content{color:#FFF}.infobox>.infobox-progress{padding-top:0;display:inline-block;vertical-align:top;width:44px}.infobox>.infobox-chart{padding-top:0;display:inline-block;vertical-align:text-bottom;width:44px;text-align:center}.infobox>.infobox-chart>.sparkline{font-size:24px}.infobox>.infobox-chart canvas{vertical-align:middle!important}.infobox>.stat{display:inline-block;position:absolute;right:20px;top:11px;text-shadow:none;color:#ABBAC3;font-size:13px;font-weight:700;padding-right:18px;padding-top:3px}.infobox>.stat:before{display:inline-block;content:"";width:8px;height:11px;background-color:#ABBAC3;position:absolute;right:4px;top:7px}.infobox>.stat:after{display:inline-block;content:"";position:absolute;right:1px;top:-8px;border:12px solid transparent;border-width:8px 7px;border-bottom-color:#ABBAC3}.infobox>.stat.stat-success{color:#77C646}.infobox>.stat.stat-success:before{background-color:#77C646}.infobox>.stat.stat-success:after{border-bottom-color:#77C646}.infobox>.stat.stat-important{color:#E4564F}.infobox>.stat.stat-important:before{background-color:#E4564F;top:3px}.infobox>.stat.stat-important:after{border-top-color:#E4564F;border-bottom-color:transparent;bottom:-6px;top:auto}.infobox.infobox-dark>.stat{color:#FFF}.infobox.infobox-dark>.stat:before{background-color:#E1E5E8}.infobox.infobox-dark>.stat:after{border-bottom-color:#E1E5E8}.infobox.infobox-dark>.stat.stat-success{color:#FFF}.infobox.infobox-dark>.stat.stat-success:before{background-color:#D0E29E}.infobox.infobox-dark>.stat.stat-success:after{border-bottom-color:#D0E29E}.infobox.infobox-dark>.stat.stat-important{color:#FFF}.infobox.infobox-dark>.stat.stat-important:before{background-color:#FF8482;top:3px}.infobox.infobox-dark>.stat.stat-important:after{border-top-color:#FF8482;border-bottom-color:transparent;bottom:-6px;top:auto}.infobox>.badge{position:absolute;right:20px;top:11px;border-radius:0;text-shadow:none;color:#FFF;font-size:11px;font-weight:700;line-height:15px;height:16px;padding:0 1px}.infobox.infobox-dark>.badge{color:#FFF;background-color:rgba(255,255,255,.2)!important;border:1px solid #F1F1F1;top:2px;right:2px}.infobox.infobox-dark>.badge.badge-success>.ace-icon{color:#C6E9A1}.infobox.infobox-dark>.badge.badge-important>.ace-icon,.infobox.infobox-dark>.badge.badge-warning>.ace-icon{color:#ECB792}.infobox-small{width:135px;height:52px;text-align:left;padding-bottom:5px}.infobox-small>.infobox-chart,.infobox-small>.infobox-icon,.infobox-small>.infobox-progress{display:inline-block;width:40px;max-width:40px;height:42px;line-height:38px;vertical-align:middle}.infobox-small>.infobox-data{display:inline-block;text-align:left;vertical-align:middle;max-width:72px;min-width:0}.infobox-small>.infobox-chart>.sparkline{font-size:14px;margin-left:2px}.percentage{font-size:14px;font-weight:700;display:inline-block;vertical-align:top}.infobox-small .percentage{font-size:13px;font-weight:400;margin-top:2px;margin-left:2px}.pricing-box:not(:first-child){padding-left:7px}.pricing-box:not(:last-child){padding-right:7px}.pricing-box .price{font-size:22px;line-height:20px;height:28px;text-align:center;color:#555}.pricing-box .price small{font-size:22px}.pricing-box .btn{font-size:16px}.pricing-box .widget-header{text-align:center;padding-left:0}@media only screen and (max-width:480px){.pricing-box{margin:0 0 16px -1px;padding-left:0!important;padding-right:0!important}.pricing-box:nth-child(odd){padding-left:12px!important}.pricing-box:nth-child(even){padding-right:12px!important}}@media only screen and (max-width:479px){.pricing-box{margin:0 0 16px;width:100%;padding-left:12px!important;padding-right:12px!important}}.pricing-table-header{padding-top:0;margin-top:0;text-align:left}.pricing-table-header>li{padding:7px 0 7px 11px;font-size:13px}.pricing-table{margin-top:0}.pricing-table>li{text-align:center;padding:7px 0;font-size:13px}.list-striped>li:nth-child(odd){background-color:#FFF}.list-striped>li:nth-child(even){background-color:#F2F3EB}.list-striped.pricing-table-header>li:nth-child(even){background-color:#EEE}.pricing-box-small{box-shadow:none;margin-left:-2px;background-color:#FFF;position:relative;z-index:10}.pricing-box-small .price{line-height:20px;height:28px;text-align:center}.pricing-box-small .price .label:after,.pricing-box-small .price .label:before{margin-top:-2px;opacity:.9;filter:alpha(opacity=90)}.pricing-box-small:hover{box-shadow:0 0 4px 2px rgba(0,0,0,.15);z-index:11;-webkit-transform:scale(1.04);-ms-transform:scale(1.04);-o-transform:scale(1.04);transform:scale(1.04)}.pricing-box-small:hover .price>.label{-webkit-transform:scale(0.96);-ms-transform:scale(0.96);-o-transform:scale(0.96);transform:scale(0.96)}.pricing-span{margin:0;width:19%;max-width:150px!important;min-width:110px!important;float:left!important}.pricing-span-header{padding-right:0}@media only screen and (min-width:480px){.pricing-span-body{padding-left:0;padding-right:0}}@media only screen and (max-width:480px){.pricing-span-body,.pricing-span-header{width:100%;padding-right:12px}}.login-container{width:375px;margin:0 auto}.login-layout{background-color:#1D2024}.login-layout .main-container:before{display:none}.login-layout .main-content{margin-left:0!important;margin-right:0!important;min-height:100%;padding-left:15px;padding-right:15px}.login-layout label{margin-bottom:11px}.login-layout .widget-box{visibility:hidden;position:fixed;z-index:-5;border-bottom:none;box-shadow:none;padding:6px;background-color:#394557;-moz-transform:scale(0,1) translate(-150px);-webkit-transform:scale(0,1) translate(-150px);-o-transform:scale(0,1) translate(-150px);-ms-transform:scale(0,1) translate(-150px);transform:scale(0,1) translate(-150px)}.login-layout .widget-box.visible{visibility:visible;position:relative;z-index:auto;-moz-transform:scale(1,1) translate(0);-webkit-transform:scale(1,1) translate(0);-o-transform:scale(1,1) translate(0);-ms-transform:scale(1,1) translate(0);transform:scale(1,1) translate(0);transition:transform .3s ease;-moz-transition:-moz-transform .3s ease;-webkit-transition:-webkit-transform .3s ease;-o-transition:-o-transform .2s ease}.login-layout .widget-box .widget-main{padding:16px 36px 36px;background:#F7F7F7}.login-layout .widget-box .widget-main form{margin:0}.login-layout .widget-box .widget-body .toolbar>div>a{font-size:15px;font-weight:400;text-shadow:1px 0 1px rgba(0,0,0,.25)}.login-box .forgot-password-link{color:#FE9}.login-box .user-signup-link{color:#CF7}.login-box .toolbar{background:#5090C1;border-top:2px solid #597597}.login-box .toolbar>div{width:50%;display:inline-block;padding:9px 0 11px}.login-box .toolbar>div:first-child{float:left;text-align:left}.login-box .toolbar>div:first-child>a{margin-left:11px}.login-box .toolbar>div:first-child+div{float:right;text-align:right}.login-box .toolbar>div:first-child+div>a{margin-right:11px}.forgot-box .toolbar{background:#C16050;border-top:2px solid #976559;padding:9px 18px}.signup-box .toolbar{background:#76B774;border-top:2px solid #759759;padding:9px 18px}.forgot-box .back-to-login-link,.signup-box .back-to-login-link{color:#FE9;font-size:14px;font-weight:700;text-shadow:1px 0 1px rgba(0,0,0,.25)}.login-layout .login-box .widget-main{padding-bottom:16px}.social-or-login{margin-top:4px;text-align:center;position:relative;z-index:1}.social-or-login :first-child{display:inline-block;background:#F7F7F7;padding:0 8px;color:#5090C1;font-size:13px}.social-or-login:before{content:"";display:block;position:absolute;z-index:-1;top:50%;left:0;right:0;border-top:1px dotted #A6C4DB}.social-login a{border-radius:100%;width:42px;height:42px;line-height:46px;padding:0;margin:0 1px;border-width:0}.social-login a>.ace-icon{font-size:24px;margin:0}@media only screen and (max-width:540px){.login-layout .widget-box .widget-main{padding:16px}.login-container{width:98%}.login-layout .widget-box{padding:0}.login-layout .main-content{padding-left:6px;padding-right:6px}.login-box .toolbar>div{width:auto}}.light-login{background:#dfe0e2 url(images/pattern.jpg)}.light-login .widget-box{padding:1px 1px 0;-webkit-box-shadow:0 0 2px 1px rgba(0,0,0,.12);box-shadow:0 0 2px 1px rgba(0,0,0,.12);border-bottom:1px solid rgba(50,50,50,.33)}.light-login .widget-box .toolbar{border-top-width:1px}.light-login .widget-box.login-box{background-color:#BCC6CF;background-color:rgba(100,110,120,.4)}.light-login .widget-box.signup-box{background-color:#C1CEC4;background-color:rgba(110,120,100,.4)}.light-login .widget-box.forgot-box{background-color:#D2C5C5;background-color:rgba(120,110,100,.4)}.blur-login{background:#394557 url(images/meteorshower2.jpg)}.invoice-info{line-height:24px!important;color:#444;vertical-align:bottom;margin-left:9px;margin-right:9px}.invoice-info-label{display:inline-block;max-width:100px;text-align:right;font-size:14px}.invoice-box .label-large[class*=arrowed]{margin-left:11px!important;max-width:95%}.error-container{margin:20px;padding:0;background:#FFF}@media only screen and (max-width:767px){.error-container{margin:12px}}@media only screen and (max-width:479px){.error-container{margin:6px}}.ace-thumbnails{list-style:none;margin:0;padding:0}.ace-thumbnails>li{float:left;display:block;position:relative;overflow:hidden;margin:2px;border:2px solid #333}.ace-thumbnails>li>:first-child{display:block;position:relative}.ace-thumbnails>li>:first-child:focus{outline:0}.ace-thumbnails>li .tags{display:inline-block;position:absolute;bottom:0;right:0;overflow:visible;direction:rtl;padding:0;margin:0;height:auto;width:auto;background-color:transparent;border-width:0;vertical-align:inherit}.ace-thumbnails>li .tags>.label-holder{opacity:.92;filter:alpha(opacity=92);display:table;margin:1px 0 0;direction:ltr;text-align:left}.ace-thumbnails>li .tags>.label-holder:hover{opacity:1;filter:alpha(opacity=100)}.ace-thumbnails>li>.tools{position:absolute;top:0;bottom:0;left:-30px;width:24px;background-color:rgba(0,0,0,.55);text-align:center;vertical-align:middle;-webkit-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.ace-thumbnails>li>.tools.tools-right{left:auto;right:-30px}.ace-thumbnails>li>.tools.tools-bottom{width:auto;height:28px;left:0;right:0;top:auto;bottom:-30px}.ace-thumbnails>li>.tools.tools-top{width:auto;height:28px;left:0;right:0;top:-30px;bottom:auto}.ace-thumbnails>li:hover>.tools{left:0;right:0}.ace-thumbnails>li:hover>.tools.tools-bottom{top:auto;bottom:0}.ace-thumbnails>li:hover>.tools.tools-top{bottom:auto;top:0}.ace-thumbnails>li:hover>.tools.tools-right{left:auto;right:0}.ace-thumbnails>li>.in.tools{left:0;right:0}.ace-thumbnails>li>.in.tools.tools-bottom{top:auto;bottom:0}.ace-thumbnails>li>.in.tools.tools-top{bottom:auto;top:0}.ace-thumbnails>li>.in.tools.tools-right{left:auto;right:0}.ace-thumbnails>li>.tools>a,.ace-thumbnails>li>:first-child .inner a{display:inline-block;color:#FFF;font-size:18px;font-weight:400;padding:0 4px}.ace-thumbnails>li>.tools>a:hover,.ace-thumbnails>li>:first-child .inner a:hover{text-decoration:none;color:#C9E2EA}.ace-thumbnails>li .tools.tools-bottom>a,.ace-thumbnails>li .tools.tools-top>a{display:inline-block}.ace-thumbnails>li>:first-child>.text{position:absolute;right:0;left:0;bottom:0;top:0;text-align:center;color:#FFF;background-color:rgba(0,0,0,.55);opacity:0;filter:alpha(opacity=0);-webkit-transition:all .2s ease;-o-transition:all .2s ease;transition:all .2s ease}.ace-thumbnails>li>:first-child>.text:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:0}.ace-thumbnails>li>:first-child>.text>.inner{padding:4px 0;margin:0;display:inline-block;vertical-align:middle;max-width:90%}.ace-thumbnails>li:hover>:first-child>.text{opacity:1;filter:alpha(opacity=100)}@media only screen and (max-width:480px){.ace-thumbnails{text-align:center}.ace-thumbnails>li{float:none;display:inline-block}}.dialogs{padding:9px;position:relative}.itemdiv{padding-right:3px;min-height:66px;position:relative}.itemdiv>.user{display:inline-block;width:42px;position:absolute;left:0}.itemdiv>.user>img{border-radius:100%;border:2px solid #5293C4;max-width:40px;position:relative}.itemdiv>.body{width:auto;margin-left:50px;margin-right:12px;position:relative}.itemdiv>.body>.time{display:block;font-size:11px;font-weight:700;color:#666;position:absolute;right:9px;top:0}.itemdiv>.body>.time .ace-icon{font-size:14px;font-weight:400}.itemdiv>.body>.name{display:block;color:#999}.itemdiv>.body>.name>b{color:#777}.itemdiv>.body>.text{display:block;position:relative;margin-top:2px;padding-bottom:19px;padding-left:7px;font-size:13px}.itemdiv>.body>.text:after{display:block;content:"";height:1px;font-size:0;overflow:hidden;position:absolute;left:16px;right:-12px;margin-top:9px;border-top:1px solid #E4ECF3}.itemdiv>.body>.text>.ace-icon:first-child{color:#DCE3ED;margin-right:4px}.itemdiv:last-child>.body>.text{border-bottom-width:0}.itemdiv:last-child>.body>.text:after{display:none}.itemdiv.dialogdiv{padding-bottom:14px}.itemdiv.dialogdiv:before{position:absolute;display:block;content:"";top:0;bottom:0;left:19px;width:3px;max-width:3px;background-color:#E1E6ED;border:1px solid #D7DBDD;border-width:0 1px}.itemdiv.dialogdiv:last-child{padding-bottom:0}.itemdiv.dialogdiv:last-child:before{display:none}.itemdiv.dialogdiv>.user>img{border-color:#C9D6E5}.itemdiv.dialogdiv>.body{border:1px solid #DDE4ED;padding:5px 8px 8px;border-left-width:2px;margin-right:1px}.itemdiv.dialogdiv>.body:before{content:"";display:block;position:absolute;left:-7px;top:11px;width:8px;height:8px;border:2px solid #DDE4ED;border-width:2px 0 0 2px;background-color:#FFF;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.itemdiv.dialogdiv>.body>.time{position:static;float:right}.itemdiv.dialogdiv>.body>.text{padding-left:0;padding-bottom:0}.itemdiv.dialogdiv>.body>.text:after{display:none}.itemdiv.dialogdiv .tooltip-inner{word-break:break-all}.itemdiv.memberdiv{width:175px;padding:2px;margin:3px 0;float:left;border-bottom:1px solid #E8E8E8}@media (min-width:992px){.itemdiv.memberdiv{max-width:50%}}@media (max-width:991px){.itemdiv.memberdiv{min-width:33.333%}}.itemdiv.memberdiv>.user>img{border-color:#DCE3ED}.itemdiv.memberdiv>.body>.time{position:static}.itemdiv.memberdiv>.body>.name{line-height:18px;height:18px;margin-bottom:0}.itemdiv.memberdiv>.body>.name>a{display:inline-block;max-width:100px;max-height:18px;overflow:hidden;text-overflow:ellipsis;word-break:break-all}.itemdiv .tools{position:absolute;right:5px;bottom:10px;display:none}.itemdiv .tools .btn{border-radius:36px;margin:1px 0}.itemdiv .body .tools{bottom:4px}.itemdiv.commentdiv .tools{right:9px}.itemdiv:hover .tools{display:inline-block}.item-list{margin:0;padding:0;list-style:none}.item-list>li{padding:9px;background-color:#FFF;margin-top:-1px;position:relative}.item-list>li.selected{color:#8090A0;background-color:#F4F9FC}.item-list>li.selected .lbl,.item-list>li.selected label{text-decoration:line-through;color:#8090A0}.item-list>li>.checkbox,.item-list>li>label.inline{display:inline-block}.item-list>li label{font-size:13px}.item-list>li .percentage{font-size:11px;font-weight:700;color:#777}.item-list>li.ui-sortable-helper{cursor:move}li[class*=item-]{border:1px solid #DDD;border-left-width:3px}li.item-orange{border-left-color:#e8b110}li.item-orange2{border-left-color:#f79263}li.item-red{border-left-color:#d53f40}li.item-red2{border-left-color:#d15b47}li.item-green{border-left-color:#9abc32}li.item-green2{border-left-color:#0490a6}li.item-blue{border-left-color:#4f99c6}li.item-blue2{border-left-color:#3983c2}li.item-blue3{border-left-color:#1144eb}li.item-pink{border-left-color:#cb6fd7}li.item-purple{border-left-color:#6f3cc4}li.item-black{border-left-color:#505050}li.item-grey{border-left-color:#a0a0a0}li.item-brown{border-left-color:brown}li.item-default{border-left-color:#abbac3}.ui-sortable-helper,.ui-sortable-helper>a,.ui-sortable-placeholder,.ui-sortable-placeholder>a{cursor:move!important}@media only screen and (max-width:480px){.itemdiv.memberdiv{float:none;width:auto}}.profile-user-info{display:table;width:98%;width:calc(100% - 24px);margin:0 auto}.profile-info-row{display:table-row}.profile-info-name{text-align:right;padding:6px 10px 6px 4px;font-weight:400;color:#667E99;background-color:transparent;border-top:1px dotted #D5E4F1;display:table-cell;width:110px;vertical-align:middle}.profile-info-value{display:table-cell;padding:6px 4px 6px 6px;border-top:1px dotted #D5E4F1}.profile-info-value>span+span:before{display:inline;content:",";margin-left:1px;margin-right:3px;color:#666;border-bottom:1px solid #FFF}.profile-info-value>span+span.editable-container:before{display:none}.profile-info-row:first-child .profile-info-name,.profile-info-row:first-child .profile-info-value{border-top:none}.profile-user-info-striped{border:1px solid #DCEBF7}.profile-user-info-striped .profile-info-name{color:#336199;background-color:#EDF3F4;border-top:1px solid #F7FBFF}.profile-user-info-striped .profile-info-value{border-top:1px dotted #DCEBF7;padding-left:12px}.profile-picture{border:1px solid #CCC;background-color:#FFF;padding:4px;display:inline-block;max-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;box-shadow:1px 1px 1px rgba(0,0,0,.15)}.profile-activity{padding:10px 4px;border-bottom:1px dotted #D0D8E0;position:relative;border-left:1px dotted #FFF;border-right:1px dotted #FFF}.profile-activity:first-child{border-top:1px dotted transparent}.profile-activity:first-child:hover{border-top-color:#D0D8E0}.profile-activity:hover{background-color:#F4F9FD;border-left:1px dotted #D0D8E0;border-right:1px dotted #D0D8E0}.profile-activity img{border:2px solid #C9D6E5;border-radius:100%;max-width:40px;margin-right:10px;margin-left:0;box-shadow:none}.profile-activity .thumbicon{background-color:#74ABD7;display:inline-block;border-radius:100%;width:38px;height:38px;color:#FFF;font-size:18px;text-align:center;line-height:38px;margin-right:10px;margin-left:0;text-shadow:none!important}.profile-activity .time{display:block;margin-top:4px;color:#777}.profile-activity a.user{font-weight:700;color:#9585BF}.profile-activity .tools{position:absolute;right:12px;bottom:8px;display:none}.profile-activity:hover .tools{display:block}.user-profile .ace-thumbnails li{border:1px solid #CCC;padding:3px;margin:6px}.user-profile .ace-thumbnails li .tools{left:3px;right:3px}.user-profile .ace-thumbnails li:hover .tools{bottom:3px}.user-profile .user-title-label:hover{text-decoration:none}.user-profile .user-title-label+.dropdown-menu{margin-left:-12px}.profile-contact-links{padding:4px 2px 5px;border:1px solid #E0E2E5;background-color:#F8FAFC}.btn-link:hover .ace-icon{text-decoration:none!important}.profile-social-links>a{text-decoration:none;margin:0 1px}.profile-social-links>a:hover>.ace-icon{text-decoration:none}.profile-skills .progress{height:26px;margin-bottom:2px;background-color:transparent}.profile-skills .progress .progress-bar{line-height:26px;font-size:13px;font-weight:700;font-family:"Open Sans";padding:0 8px}.profile-users .user{display:block;position:static;text-align:center;width:auto}.profile-users .user img{padding:2px;border-radius:100%;border:1px solid #AAA;max-width:none;width:64px;-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.profile-users .user img:hover{-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.33);box-shadow:0 0 1px 1px rgba(0,0,0,.33)}.profile-users .memberdiv{background-color:#FFF;width:100px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:none;text-align:center;margin:0 8px 24px}.profile-users .memberdiv .name a:hover .ace-icon{text-decoration:none}.profile-users .memberdiv .body{display:inline-block;margin:8px 0 0}.profile-users .memberdiv .popover{visibility:hidden;min-width:0;max-height:0;max-width:0;margin-left:0;margin-right:0;top:-5%;left:auto;right:auto;opacity:0;display:none;position:absolute;-webkit-transition:opacity .2s linear 0s,visibility 0s linear .2s,max-height 0s linear .2s,max-width 0s linear .2s,min-width 0s linear .2s;-o-transition:opacity .2s linear 0s,visibility 0s linear .2s,max-height 0s linear .2s,max-width 0s linear .2s,min-width 0s linear .2s;transition:opacity .2s linear 0s,visibility 0s linear .2s,max-height 0s linear .2s,max-width 0s linear .2s,min-width 0s linear .2s}.profile-users .memberdiv .popover.right{left:100%;right:auto;display:block}.profile-users .memberdiv .popover.left{left:auto;right:100%;display:block}.profile-users .memberdiv>:first-child:hover .popover{visibility:visible;opacity:1;z-index:1060;max-height:250px;max-width:250px;min-width:150px;-webkit-transition-delay:0s;-moz-transition-delay:0s;-o-transition-delay:0s;transition-delay:0s}.profile-users .memberdiv .tools{position:static;display:block;width:100%;margin-top:2px}.profile-users .memberdiv .tools>a{margin:0 2px}.profile-users .memberdiv .tools>a:hover{text-decoration:none}.user-status{display:inline-block;width:11px;height:11px;background-color:#FFF;border:3px solid #AAA;border-radius:100%;vertical-align:middle;margin-right:1px}.user-status.status-online{border-color:#8AC16C}.user-status.status-busy{border-color:#E07F69}.user-status.status-idle{border-color:#FFB752}.tab-content.profile-edit-tab-content{border:1px solid #DDD;padding:8px 32px 32px;-webkit-box-shadow:1px 1px 0 0 rgba(0,0,0,.2);box-shadow:1px 1px 0 0 rgba(0,0,0,.2);background-color:#FFF}@media only screen and (max-width:480px){.profile-info-name{width:80px}.profile-user-info-striped .profile-info-name{float:none;width:auto;text-align:left;padding:6px 4px 6px 10px;display:block}.profile-user-info-striped .profile-info-value{margin-left:10px;display:block}}@media only screen and (max-width:480px){.user-profile .memberdiv{width:50%;margin-left:0;margin-right:0}}.inbox-tabs.nav-tabs>li>a{background-color:#FAFAFA}.inbox-tabs.nav-tabs>li.active:not(.open)>a,.inbox-tabs.nav-tabs>li.active:not(.open)>a:focus,.inbox-tabs.nav-tabs>li.active:not(.open)>a:hover{background-color:#F1F5FA;box-shadow:0 -2px 3px 0 rgba(0,0,0,.1);color:#48768E}.inbox-tabs.nav-tabs>li>a.btn-new-mail{background-color:transparent;border:none!important;padding:0!important}.inbox-tabs.nav-tabs>li>a.btn-new-mail>.btn{border-width:0!important;border-radius:3px!important;padding:0 6px!important;position:relative;transition:none!important}.inbox-tabs.nav-tabs>li.active>a.btn-new-mail{box-shadow:none!important}.inbox-tabs.nav-tabs>li.active>a.btn-new-mail>.btn:before{content:"";display:block;position:absolute;top:100%;left:50%;margin-left:-6px;border-width:6px 8px;border-style:solid;border-color:transparent;border-top-color:inherit}.inbox-tabs.nav-tabs.tab-size-bigger>li>a{padding:5px 15px 7px;font-size:14px}.inbox-tabs.nav-tabs.tab-size-bigger>li>a>.ace-icon:first-child{margin-bottom:5px}.inbox-tabs.nav-tabs.tab-size-bigger>li>a.btn-new-mail>.btn{padding:10px!important;border-radius:7px!important}.inbox-tabs.nav-tabs.tab-size-bigger>li.active>a.btn-new-mail{margin-top:0!important;top:1px}.inbox-tabs.nav-tabs.tab-size-bigger>li.active>a.btn-new-mail>.btn:before{left:50%;margin-left:-8px;border-width:8px 10px}@media only screen and (max-width:479px){.inbox-tabs>.li-new-mail{display:block;text-align:right;margin-bottom:8px!important;float:none!important}.inbox-tabs>.li-new-mail>.btn-new-mail{display:inline-block;width:auto}}.message-container,.message-list{position:relative}.message-item{border:1px solid #EAEDF1;border-bottom-width:0;padding:12px 12px 14px;line-height:18px;position:relative;background-color:#FFF}.message-item:first-child{border-top-width:0}.message-item:hover{border-color:#E2EAF2;background-color:#F2F6F9}.message-item:hover+.message-item{border-top-color:#E2EAF2}.message-item:hover+.message-item.selected{border-top-color:#FFF}.message-item.selected{background-color:#EFF4F7;border-color:#FFF #E2EAF2}.message-item.selected+.message-item,.message-item.selected+.message-item:hover+.message-item{border-top-color:#FFF}.message-item input.ace+.lbl::before,.message-navbar input.ace+.lbl::before{top:auto}.message-item .sender{margin:0 6px 0 4px;vertical-align:middle;color:#467287;display:inline-block;width:110px;height:18px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;cursor:pointer}.message-item.message-unread .sender{color:#6A9CBA;font-weight:700}.message-item .summary{vertical-align:middle;display:inline-block;position:relative;margin-left:30px;max-width:250px;max-width:calc(100% - 300px);min-width:200px;white-space:nowrap}.message-item .summary .text{color:#555;vertical-align:middle;display:inline-block;width:auto;max-width:100%;height:18px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;cursor:pointer}.message-item .summary .text:hover{text-decoration:underline}.message-item .summary .message-flags{display:block;position:absolute;right:100%;margin-right:4px;height:18px;white-space:nowrap}.message-item.message-unread .summary .text{color:#609FC4;font-weight:700}.message-item .time{float:right;width:60px;height:18px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;color:#666}.message-item.message-unread .time{font-weight:700;color:#609FC4}.message-item.message-unread .message-content .time{font-weight:400}.message-item .attachment{color:#999;font-size:18px;vertical-align:middle;float:right;margin:0 12px;position:relative}.message-item.message-unread .attachment{color:#4F99C6}.message-content .time{font-weight:400}.message-star{vertical-align:middle;margin:2px 4px 0 6px;font-size:15px;cursor:pointer}.message-star:hover{color:#feb902!important;text-decoration:none}.mail-tag:empty{display:inline-block;width:8px;height:11px;padding:0;line-height:normal;vertical-align:middle;margin:0 1px 0 0}.badge.mail-tag{border-radius:2px}.dropdown-menu>li>a>.mail-tag{vertical-align:inherit}@media only screen and (max-width:991px){.message-item .summary{min-width:0}.message-item .sender{width:100px}}@media only screen and (max-width:550px){.message-item .summary{margin:8px 0 0 32px;max-width:95%;min-width:0;display:block}.message-item .sender{width:auto;max-width:150px}.message-item .summary .text{max-width:95%}}.btn-message,.btn-message:active,.btn-message:focus,.btn-message:hover,.open .btn-message.dropdown-toggle{background-color:#FFF!important;border:1px solid #94B9CE!important;color:#7CA3BA!important;text-shadow:none!important}.message-content{padding:16px 12px;border:1px solid #E9E9E9;-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.02);box-shadow:0 0 1px 1px rgba(0,0,0,.02);background-color:rgba(255,255,255,.8);border-top-width:0}.message-item .message-content{margin-top:16px;border-top-width:1px}.message-body{padding:0 9px;color:#6A7177}.message-navbar{line-height:24px;padding:10px 12px;border:1px solid #D6E1EA;border-color:#D6E1EA transparent;background-color:#F1F5FA;text-align:center;position:relative}.message-content .dropdown-toggle,.message-navbar .dropdown-toggle{color:#777}.message-content .dropdown-toggle:focus,.message-content .dropdown-toggle:hover,.message-navbar .dropdown-toggle:focus,.message-navbar .dropdown-toggle:hover{text-decoration:none;color:#2283C5}.message-bar{display:inline-block;min-height:28px}@media only screen and (max-width:480px){.message-bar{display:block;min-height:60px}}.message-footer{background-color:#F1F1F1;padding:12px 16px;border:1px solid #E6E6E6;border-width:1px 0;border-top:1px solid #E4E9EE}.message-footer .pagination{margin:0}.message-footer .pagination>li{margin:0;padding:0}.message-footer .pagination>li>a,.message-footer .pagination>li>span{color:#777;padding:3px 6px;margin-left:1px;margin-right:1px;background-color:transparent;border:1px solid transparent}.message-footer .pagination>li.disabled>span{color:#BBB;cursor:default;background-color:transparent;border-color:transparent}.message-footer .pagination>li>a:hover{border-color:#91bad6;color:#2283C5;text-decoration:none;background-color:#FFF}.message-footer input[type=text]{font-size:12px;width:34px;height:24px;line-height:20px;margin-bottom:0;padding:3px;vertical-align:middle;text-align:center}.message-footer-style2 .pagination>li>a,.message-footer-style2 .pagination>li>span{border:1px solid #B5B5B5;border-radius:100%!important;width:26px;height:26px;line-height:26px;display:inline-block;text-align:center;padding:0}.message-footer-style2 .pagination>li.disabled>span,.message-footer-style2 .pagination>li>span{border-color:#CCC}.message-footer-style2 .pagination>li>a:hover{border-color:#84AFC9;background-color:#F7F7F7}.message-item.message-inline-open{background-color:#F2F6F9;border:1px solid #DDD;border-bottom-color:#CCC}.message-item.message-inline-open:first-child{border-top-color:#EEE}.message-item.message-inline-open:last-child{border-bottom-color:#DDD}.message-item.message-inline-open+.message-item{border-bottom-color:transparent}.message-loading-overlay{position:absolute;z-index:14;top:0;bottom:0;right:0;left:0;background-color:rgba(255,255,255,.5);text-align:center}.message-loading-overlay>.ace-icon{position:absolute;top:15%;left:0;right:0;text-align:center}.message-content .sender{color:#6A9CBA;font-weight:700;width:auto;text-overflow:inherit;vertical-align:middle;margin:0}.message-content .time{width:auto;text-overflow:inherit;white-space:normal;float:none;vertical-align:middle}ul.attachment-list{margin:6px 0 4px 8px}ul.attachment-list>li{margin-bottom:3px}.message-attachment{padding-left:10px;padding-right:10px}.attached-file{color:#777;width:200px;display:inline-block}.attached-file>.ace-icon{display:inline-block;width:16px;margin-right:2px;vertical-align:middle}.attached-file:hover{text-decoration:none;color:#438EB9}.attached-file:hover .attached-name{color:#2283C5}.attached-file .attached-name{display:inline-block;max-width:175px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;vertical-align:middle}.messagebar-item-left,.messagebar-item-right{position:absolute;bottom:14px;left:12px;text-align:left}.messagebar-item-right{right:12px;left:auto}.message-navbar .nav-search{right:auto;left:5px;top:auto;bottom:11px}.message-navbar .messagebar-item-left~.nav-search{left:60px}.message-form{border:1px solid #ddd;border-top:none;padding-top:22px}@media only screen and (max-width:480px){.message-form{padding-left:16px;padding-right:16px}}.message-form .form-actions{margin-bottom:0}.message-form .wysiwyg-editor{overflow:auto;min-height:150px;max-height:250px;height:auto}.btn-send-message{position:relative;top:6px;vertical-align:middle}.btn-back-message-list{color:#777}.btn-back-message-list:hover{color:#478FCA;text-decoration:none}.message-condensed .message-item{padding-top:8px;padding-bottom:9px}.message-condensed .message-footer,.message-condensed .message-navbar{padding-top:7px;padding-bottom:7px}.message-condensed .messagebar-item-left,.message-condensed .messagebar-item-right{bottom:9px}.message-condensed .message-navbar .nav-search{bottom:7px}@media only screen and (max-width:480px){.message-condensed .message-bar{min-height:42px}}.inbox-folders .btn-block{margin-top:0}@media only screen and (max-width:767px){.inbox-folders.inbox-folders-responsive .btn-block{width:24%}}@media only screen and (max-width:600px){.inbox-folders.inbox-folders-responsive .btn-block{width:48%}}@media only screen and (max-width:320px){.inbox-folders.inbox-folders-responsive .btn-block{width:99%}}.inbox-folders .btn-lighter,.inbox-folders .btn-lighter.active{background-color:#F4F4F4!important;text-shadow:none!important;color:#7C8395!important;border:1px solid #FFF!important;padding:5px 11px}.inbox-folders .btn-lighter.active{background-color:#EDF2F8!important;color:#53617C!important}.inbox-folders .btn-lighter:hover{background-color:#EFEFEF!important;color:#6092C4!important}.inbox-folders .btn>.ace-icon:first-child{display:inline-block;width:14px;text-align:left}.inbox-folders .btn-lighter+.btn-lighter{border-top-width:0!important}.inbox-folders .btn.active:before{display:block;content:"";position:absolute;top:1px;bottom:1px;left:-1px;border-left:3px solid #4F99C6}.inbox-folders .btn.active:after{display:none}.inbox-folders .btn .counter{border-radius:3px;position:absolute;right:8px;top:8px;padding-left:6px;padding-right:6px;opacity:.75;filter:alpha(opacity=75)}.inbox-folders .btn:hover .badge{opacity:1;filter:alpha(opacity=100)}.timeline-container{position:relative;padding-top:4px;margin-bottom:32px}.timeline-container:last-child{margin-bottom:0}.timeline-container:before{content:"";display:block;position:absolute;left:28px;top:0;bottom:0;border:1px solid #E2E3E7;background-color:#E7EAEF;width:4px;border-width:0 1px}.timeline-container:first-child:before{border-top-width:1px}.timeline-container:last-child:before{border-bottom-width:1px}.timeline-item{position:relative;margin-bottom:8px}.timeline-item .widget-box{background-color:#F2F6F9;color:#595C66}.timeline-item .transparent.widget-box{border-left:3px solid #DAE1E5}.timeline-item .transparent .widget-header{background-color:#ECF1F4;border-bottom-width:0}.timeline-item .transparent .widget-header>.widget-title{margin-left:8px}.timeline-item:nth-child(even) .widget-box{background-color:#F3F3F3;color:#616161}.timeline-item:nth-child(even) .widget-box.transparent{border-left-color:#DBDBDB!important}.timeline-item:nth-child(even) .widget-box.transparent .widget-header{background-color:#EEE!important}.timeline-item .widget-box{margin:0 0 0 60px;position:relative;max-width:none}.timeline-item .widget-main{margin:0;position:relative;max-width:none;border-bottom-width:0}.timeline-item .widget-body{background-color:transparent}.timeline-item .widget-toolbox{padding:4px 8px 0!important;background-color:transparent!important;border-width:0!important;margin:0!important}.timeline-info{float:left;width:60px;text-align:center;position:relative}.timeline-info img{border-radius:100%;max-width:42px}.timeline-info .badge,.timeline-info .label{font-size:12px}.timeline-container:not(.timeline-style2) .timeline-indicator{opacity:1;border-radius:100%;display:inline-block;font-size:16px;height:36px;line-height:30px;width:36px;text-align:center;text-shadow:none!important;padding:0;cursor:default;border:3px solid #FFF!important}.timeline-label{display:block;clear:both;margin:0 0 18px 34px}.timeline-item img{border:1px solid #AAA;padding:2px;background-color:#FFF}.timeline-style2:before{display:none}.timeline-style2 .timeline-item{padding-bottom:22px;margin-bottom:0}.timeline-style2 .timeline-item:last-child{padding-bottom:0}.timeline-style2 .timeline-item:before{content:"";display:block;position:absolute;left:90px;top:5px;bottom:-5px;border-width:0;background-color:#DDD;width:2px;max-width:2px}.timeline-style2 .timeline-item:last-child:before{display:none}.timeline-style2 .timeline-item:first-child:before{display:block}.timeline-style2 .timeline-item .transparent .widget-header{background-color:transparent!important}.timeline-style2 .timeline-item .transparent.widget-box{background-color:transparent!important;border-left:none!important}.timeline-style2 .timeline-info{width:100px}.timeline-style2 .timeline-indicator{font-size:0;height:12px;line-height:12px;width:12px;border-width:1px!important;background-color:#FFF!important;position:absolute;left:85px;top:3px;opacity:1;border-radius:100%;display:inline-block;padding:0}.timeline-style2 .timeline-date{display:inline-block;width:72px;text-align:right;margin-right:25px;color:#777}.timeline-style2 .timeline-item .widget-box{margin-left:112px}.timeline-style2 .timeline-label{width:75px;margin-left:0;margin-bottom:10px;text-align:right;color:#666;font-size:14px}.timeline-time{text-align:center;position:static}.dataTables_length select{width:70px;height:25px;padding:2px 3px}.dataTables_length label{font-weight:400}.dataTables_filter{text-align:right}.dataTables_filter input[type=search],.dataTables_filter input[type=text]{width:125px;height:18px;line-height:18px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;padding:4px 6px}.dataTables_filter label{font-weight:400}.dataTables_info{font-size:14px}.dataTables_paginate{text-align:right}.dataTables_paginate .pagination{margin:0 12px}.dataTables_wrapper label{display:inline-block;font-size:13px}.dataTables_wrapper input[type=search],.dataTables_wrapper input[type=text],.dataTables_wrapper select{margin-bottom:0!important;margin:0 4px}.dataTables_wrapper .row{margin:0!important}.dataTables_wrapper .row:first-child{padding-top:12px;padding-bottom:12px;background-color:#EFF3F8}.dataTables_wrapper .row:first-child+.dataTable{border-top:1px solid #ddd;border-bottom:1px solid #ddd}.dataTables_wrapper .row:last-child{border-bottom:1px solid #e0e0e0;padding-top:12px;padding-bottom:12px;background-color:#EFF3F8}.dataTables_wrapper .dataTables_scroll+.row{border-top:1px solid #e0e0e0}.dataTable{margin-bottom:0}.dataTable>thead>tr>th[class*=sort]{cursor:pointer}.dataTable>thead>tr>th[class*=sort]:after{float:right;display:inline;content:"\f0dc";font-family:FontAwesome;font-size:13px;font-weight:400;color:#555}.dataTable>thead>tr>th[class*=sort]:hover{color:#547ea8}.dataTable>thead>tr>th[class*=sorting_]{color:#307ecc}.dataTable>thead>tr>th.sorting_asc,.dataTable>thead>tr>th.sorting_desc{background-image:-webkit-linear-gradient(top,#eff3f8 0,#e3e7ed 100%);background-image:-o-linear-gradient(top,#eff3f8 0,#e3e7ed 100%);background-image:linear-gradient(to bottom,#eff3f8 0,#e3e7ed 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeff3f8', endColorstr='#ffe3e7ed', GradientType=0)}.dataTable>thead>tr>th.sorting_desc:after{content:"\f0dd";top:-6px;color:#307ecc}.dataTable>thead>tr>th.sorting_asc:after{content:"\f0de";top:4px;color:#307ecc}.dataTable>thead>tr>th.sorting_disabled{cursor:inherit}.dataTable>thead>tr>th.sorting_disabled:after,.dataTables_scrollHead+.dataTables_scrollBody>.dataTable>thead>tr>th:after{display:none}.dataTables_scrollHeadInner{width:auto!important}.dataTables_scrollHeadInner>.dataTable>thead>tr>th{border-bottom-width:0!important}.dataTables_borderWrap .dataTables_scrollBody,.dataTables_borderWrap .dataTables_scrollHead{border:1px solid #ddd!important;border-width:0 1px!important}.dataTables_borderWrap .dataTables_scrollBody .table-bordered,.dataTables_borderWrap .dataTables_scrollHead .table-bordered{border-left-width:0;border-right-width:0}.dataTables_borderWrap .dataTables_scrollBody .table-bordered>tbody>tr>td:first-child,.dataTables_borderWrap .dataTables_scrollBody .table-bordered>thead>tr>th:first-child,.dataTables_borderWrap .dataTables_scrollHead .table-bordered>tbody>tr>td:first-child,.dataTables_borderWrap .dataTables_scrollHead .table-bordered>thead>tr>th:first-child{border-left-width:0}.dataTables_borderWrap .dataTables_scrollBody .table-bordered>tbody>tr>td:last-child,.dataTables_borderWrap .dataTables_scrollBody .table-bordered>thead>tr>th:last-child,.dataTables_borderWrap .dataTables_scrollHead .table-bordered>tbody>tr>td:last-child,.dataTables_borderWrap .dataTables_scrollHead .table-bordered>thead>tr>th:last-child{border-right-width:0}table.dataTable{clear:both;max-width:none!important}table.dataTable th:active{outline:0}div.dataTables_scrollHead table{margin-bottom:0!important;border-bottom-left-radius:0;border-bottom-right-radius:0}div.dataTables_scrollHead table thead tr:last-child td:first-child,div.dataTables_scrollHead table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.dataTables_scrollBody table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.dataTables_scrollBody tbody tr:first-child td,div.dataTables_scrollBody tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot table{margin-top:0!important;border-top:none}.DTTT_Print .main-content{margin-left:0!important;margin-right:0!important}.fc-header-title>h2{font-size:22px;color:#65A0CE}.fc-widget-content,.fc-widget-header{border:1px solid #BCD4E5}.fc-state-highlight{background:#FFC}.fc-event-skin{border:none!important;background-color:#ABBAC3;padding:0 0 1px 2px}.label-yellow .fc-event-skin{color:#963}.label-light .fc-event-skin{color:#888}[class*=label-]>.fc-event-skin,[class*=label-]>.fc-event-skin>.fc-event-skin.fc-event-head{background-color:inherit}.fc-event-skin.ui-draggable-dragging{cursor:move}.fc-event-skin.fc-event-vert,.fc-event-vert>.fc-event-skin{padding:0 0 1px}.fc-grid .fc-day-number{color:#2E6589}.fc-widget-header{background:#ECF2F7;color:#8090A0}.fc-event-hori,.fc-event-vert{border-radius:0!important;border-color:transparent}.fc-event-vert .fc-event-content{padding-left:1px;padding-right:1px}.fc-event-vert .fc-event-time{padding:0}.fc-state-default,.fc-state-default .fc-button-inner{border:none;background-color:#ABBAC3;color:#FFF;background-image:none;box-shadow:none;text-shadow:none;border-radius:0!important;margin-left:2px}.fc-state-default .fc-button-effect{display:none}.fc-state-disabled,.fc-state-disabled .fc-button-inner{opacity:.75;filter:alpha(opacity=75);color:#DDD}.fc-state-active,.fc-state-active .fc-button-inner{border-color:#4F99C6;background-color:#6FB3E0}.fc-state-hover,.fc-state-hover .fc-button-inner{background-color:#8B9AA3}.external-event{margin:6px 0;padding:0;cursor:default;display:block;color:#FFF;background-color:#ABBAC3;font-size:13px;line-height:28px}.external-event:hover{opacity:1;filter:alpha(opacity=100)}.external-event.ui-draggable-dragging{cursor:move}.external-event>.ace-icon:first-child{display:inline-block;height:32px;width:32px;text-align:center;line-height:30px;margin-right:5px;font-size:15px;border-right:1px solid #FFF}@media only screen and (max-width:480px){.fc-header td{display:block;width:auto;text-align:left}}.chosen-container+.help-inline{vertical-align:middle}.chosen-select{display:inline!important;visibility:hidden;opacity:0;position:absolute;z-index:-1;width:0;height:0;border-width:0}.chosen-container,[class*=chosen-container]{vertical-align:middle}.chosen-container>.chosen-single,[class*=chosen-container]>.chosen-single{line-height:28px;height:30px;box-shadow:none;background:#FAFAFA}.chosen-choices{box-shadow:none!important}.chosen-container-single .chosen-single abbr{background:0 0}.chosen-container-single .chosen-single abbr:after{content:"\f00d";display:inline-block;color:#888;font-family:FontAwesome;font-size:13px;position:absolute;right:0;top:-7px}.chosen-container-single .chosen-single abbr:hover:after,.chosen-container-single.chosen-disabled .chosen-single abbr:hover:after{color:#464646}.chosen-single div b{background:none!important}.chosen-single div b:before{content:"\f0d7";display:inline-block;color:#888;font-family:FontAwesome;font-size:12px;position:relative;top:-1px;left:1px}.chosen-container-active.chosen-with-drop .chosen-single div b:before{content:"\f0d8"}.chosen-container-single .chosen-search{position:relative}.chosen-container-single .chosen-search input[type=text]{background:0 0;border-radius:0;line-height:28px;height:28px}.chosen-container-single .chosen-search:after{content:"\f002";display:inline-block;color:#888;font-family:FontAwesome;font-size:14px;position:absolute;top:8px;right:12px}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:25px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{background:0 0}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:"\f00d";display:inline-block;color:#888;font-family:FontAwesome;font-size:13px;position:absolute;right:2px;top:-1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{text-decoration:none}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover:before,.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close:before{color:#464646}.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background:0 0}.chosen-container .chosen-results-scroll-down span:before,.chosen-container .chosen-results-scroll-up span:before{content:"\f0d7";display:inline-block;color:#888;font-family:FontAwesome;font-size:12px;position:relative;top:-1px;left:1px}.chosen-container .chosen-results-scroll-up span:before,.chosen-container-active .chosen-single-with-drop div b:before{content:"\f0d8"}.chosen-rtl .chosen-search input[type=text]{background:0 0}.chosen-rtl .chosen-search:after{content:"";display:none}.chosen-rtl .chosen-search:before{content:"\f002";display:inline-block;color:#888;font-family:FontAwesome;font-size:14px;position:absolute;top:9px;left:12px}.chosen-container-single .chosen-single{border-radius:0}.chosen-container .chosen-results li.highlighted{background:#316AC5;color:#FFF}.chosen-container-single .chosen-drop{border-radius:0;border-bottom:3px solid #4492C9;border-color:#4492C9}.chosen-container-active .chosen-single,.chosen-single.chosen-single-with-drop{border-color:#4492C9}.form-group.has-error .chosen-single{border-color:#f09784!important}.form-group.has-info .chosen-single{border-color:#64a6bc!important}.form-group.has-warning .chosen-single{border-color:#e0c43a!important}.form-group.has-success .chosen-single{border-color:#92bf65!important}.chosen-container-active.chosen-with-drop .chosen-single{border-color:#4492C9}.chosen-container .chosen-drop{display:none}.chosen-container.chosen-with-drop .chosen-drop{left:auto;right:auto;display:block}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:none!important;background-repeat:no-repeat!important;background-size:auto!important}}.tag-input-style+.chosen-container-multi .chosen-choices li.search-choice{background-image:none;background-color:#91b8d0;color:#FFF;display:inline-block;font-size:13px;font-weight:400;margin-bottom:3px;margin-right:0;padding:6px 22px 7px 9px;position:relative;text-shadow:1px 1px 1px rgba(0,0,0,.15);transition:all .2s ease 0s;vertical-align:baseline;white-space:nowrap;border:none;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.tag-input-style+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;bottom:0;right:0;width:18px;height:auto;line-height:25px;text-align:center}.tag-input-style+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{color:#FFF;position:static;font-size:11px}.tag-input-style+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-color:rgba(0,0,0,.2)}.tag-input-style+.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover:before{color:#FFF}.tag-input-style+.chosen-container-multi.chosen-rtl .chosen-choices li.search-choice{padding:6px 9px 7px 22px;margin-left:0;margin-right:3px!important}.tag-input-style+.chosen-container-multi.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:0}.select2-container .select2-choice{border-radius:0;height:30px}.select2-container.select2-drop-above .select2-choice{border-radius:0}.select2-container[class*=input-]{max-width:none}.select2-container.input-mini{min-width:100px}.select2-container .select2-choice abbr,.select2-search-choice-close{background:0 0}.select2-container .select2-choice abbr:before,.select2-search-choice-close:before{font-family:FontAwesome;font-size:12px;display:inline;content:"\f00d";color:#888;position:relative;top:-1px}.select2-container .select2-choice abbr:hover:before,.select2-search-choice-close:hover:before{color:#555}.select2-container .select2-choice abbr:before{top:-7px}.select2-search-choice-close:hover{text-decoration:none!important}.select2-drop{border-radius:0;border:1px solid #4492C9;border-width:0 1px 3px}.select2-drop.select2-drop-above{border-radius:0}.select2-container .select2-choice{background:#FAFAFA}.select2-container-active .select2-choice,.select2-container-active .select2-choices,.select2-container-multi.select2-container-active .select2-choices,.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border-color:#4492C9}.select2-results .select2-highlighted{background:#316AC5}.select2-container .select2-choice .select2-arrow{border-radius:0;background:0 0;border:none}.select2-container .select2-choice .select2-arrow b{background:0 0}.select2-container .select2-choice .select2-arrow b:before{font-family:FontAwesome;font-size:12px;display:inline;content:"\f0d7";color:#888;position:relative;left:5px}.select2-dropdown-open .select2-choice .select2-arrow b:before{content:"\f0d8"}.select2-search .select2-input{background:#fff;margin-top:4px}.select2-search:after{font-family:FontAwesome;font-size:14px;display:inline;content:"\f002";color:#777;position:relative;top:0;left:-20px;z-index:0}.select2-container-multi .select2-choices .select2-search-field input{border:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;background:none!important}.select2-container-active .select2-choice,.select2-container-active .select2-choices,.select2-container-multi.select2-container-active .select2-choices,.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{-webkit-box-shadow:none;box-shadow:none}.select2-search input.select2-active{background-color:#FFF;position:relative;z-index:1}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi){.select2-container .select2-choice abbr,.select2-container .select2-choice div b,.select2-search input,.select2-search-choice-close{background-image:none!important;background-size:auto!important}.select2-search input{background-position:auto!important}}.select2-container-active.select2-dropdown-open .select2-choice{background-image:-webkit-linear-gradient(top,#eee 0,#fff 100%);background-image:-o-linear-gradient(top,#eee 0,#fff 100%);background-image:linear-gradient(to bottom,#eee 0,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee', endColorstr='#ffffffff', GradientType=0)}.select2-container-active.select2-drop-above .select2-choice{background-image:-webkit-linear-gradient(top,#fff 0,#eee 100%);background-image:-o-linear-gradient(top,#fff 0,#eee 100%);background-image:linear-gradient(to bottom,#fff 0,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0)}.form-group.has-error .select2-choice,.form-group.has-error .select2-choices{border-color:#f09784!important}.form-group.has-info .select2-choice,.form-group.has-info .select2-choices{border-color:#64a6bc!important}.form-group.has-warning .select2-choice,.form-group.has-warning .select2-choices{border-color:#e0c43a!important}.form-group.has-success .select2-choice,.form-group.has-success .select2-choices{border-color:#92bf65!important}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi){.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice abbr,.select2-search input,.select2-search-choice-close{background-image:none!important;background-repeat:no-repeat!important;background-size:auto!important}.select2-search input{background-position:auto!important}}#colorbox:active,#colorbox:focus{outline:0}#cboxBottomCenter,#cboxBottomLeft,#cboxBottomRight,#cboxMiddleLeft,#cboxMiddleRight,#cboxTopCenter,#cboxTopLeft,#cboxTopRight{background:none!important;opacity:0}#cboxContent{border:12px solid #000;background-color:#FFF;padding:7px}#cboxOverlay{background:#000}#cboxCurrent{left:64px;margin-bottom:4px;font-size:14px}#cboxTitle{margin-bottom:4px;font-size:14px;color:#777}#cboxClose,#cboxNext,#cboxPrevious{background:0 0;text-indent:0;width:26px;height:26px;line-height:22px;padding:0 4px;text-align:center;border:2px solid #999;border-radius:16px;color:#666;font-size:12px;margin-left:5px;margin-bottom:5px}#cboxNext:hover,#cboxPrevious:hover{color:#333;border-color:#666}#cboxContent{overflow:visible}#cboxClose{background-color:#000;border:2px solid #FFF;border-radius:32px;color:#FFF;font-size:21px;height:28px;width:28px;padding-bottom:2px;margin-left:0;right:-14px;top:-14px}#cboxLoadingOverlay{background:none!important}#cboxLoadingGraphic{background:#FFF!important;text-align:center}#cboxLoadingGraphic>.ace-icon{display:inline-block;background-color:#FFF;border-radius:8px;width:32px;height:32px;position:relative;top:48%;text-align:center;vertical-align:middle;-moz-animation:spin 1.5s infinite linear;-webkit-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;-ms-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear;font-size:24px;color:#FE7E3E}.ace-spinner{display:inline-block}.ace-spinner .spinner-buttons{min-width:18px}.ace-spinner .spinner-buttons>.btn{border-radius:0!important;font-size:10px;padding:0;width:18px;height:14px;line-height:8px;margin-left:0}.ace-spinner .spinner-buttons>.btn:first-child{margin-top:0}.ace-spinner .spinner-buttons>.btn>.ace-icon{margin:0;padding:0}.ace-spinner .spinner-buttons>button.btn.spinner-up:active{top:-1px}.ace-spinner .spinner-input{text-align:center;height:29px;line-height:1.2;color:#777}.ace-spinner.touch-spinner .spinner-buttons{margin:0;font-size:0}.ace-spinner.touch-spinner .spinner-buttons>.btn{height:29px;line-height:16px;width:24px;font-size:18px;display:inline-block;vertical-align:sub;margin:0 1px!important}.ace-spinner.touch-spinner .spinner-buttons>.btn>.ace-icon{vertical-align:middle;display:inline-block}.wizard-steps{list-style:none;display:table;width:100%;padding:0;margin:0;position:relative}.wizard-steps li{display:table-cell;text-align:center;width:1%}.wizard-steps li .step{border:5px solid #ced1d6;color:#546474;font-size:15px;border-radius:100%;background-color:#FFF;position:relative;z-index:2;display:inline-block;width:40px;height:40px;line-height:30px;text-align:center}.wizard-steps li:before{display:block;content:"";width:100%;height:1px;font-size:0;overflow:hidden;border-top:4px solid #CED1D6;position:relative;top:21px;z-index:1}.wizard-steps li:last-child:before{max-width:50%;width:50%}.wizard-steps li:first-child:before{max-width:51%;left:50%}.wizard-steps li.active .step,.wizard-steps li.active:before,.wizard-steps li.complete .step,.wizard-steps li.complete:before{border-color:#5293c4}.wizard-steps li.complete .step{cursor:default;color:#FFF;-webkit-transition:transform ease .1s;-o-transition:transform ease .1s;transition:transform ease .1s}.wizard-steps li.complete .step:before{display:block;position:absolute;top:0;left:0;bottom:0;right:0;line-height:30px;text-align:center;border-radius:100%;content:"\f00c";background-color:#FFF;z-index:3;font-family:FontAwesome;font-size:17px;color:#87ba21}.wizard-steps li.complete:hover .step{-moz-transform:scale(1.1);-webkit-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1);border-color:#80afd4}.wizard-steps li.complete:hover:before{border-color:#80afd4}.wizard-steps li .title{display:block;margin-top:4px;max-width:100%;color:#949ea7;font-size:14px;z-index:104;text-align:center;table-layout:fixed;word-wrap:break-word}.wizard-steps li.active .title,.wizard-steps li.complete .title{color:#2b3d53}.step-content{position:relative}.step-content .step-pane{display:none;min-height:200px;padding:4px 8px 12px}.step-content .step-pane.active{display:block}.wizard-actions{text-align:right}@media only screen and (max-width:767px){.wizard-steps li .step{width:30px;height:30px;line-height:24px;border-width:3px}.wizard-steps li:after,.wizard-steps li:before{border-width:3px}.wizard-steps li.complete .step:before{line-height:24px;font-size:13px}.wizard-steps li:before{top:16px}.step-content .step-pane{padding:4px 4px 6px;min-height:150px}}.tree{padding-left:9px;overflow-x:hidden;overflow-y:auto;position:relative}.tree:before{display:inline-block;content:"";position:absolute;top:-20px;bottom:16px;left:0;z-index:1;border:1px dotted #67b2dd;border-width:0 0 0 1px}.tree .tree-folder{width:auto;min-height:20px;cursor:pointer}.tree .tree-folder .tree-folder-header{position:relative;height:20px;line-height:20px}.tree .tree-folder .tree-folder-header:hover{background-color:#F0F7FC}.tree .tree-folder .tree-folder-header .tree-folder-name,.tree .tree-item .tree-item-name{display:inline;z-index:2}.tree .tree-folder .tree-folder-header>.ace-icon:first-child,.tree .tree-item>.ace-icon:first-child{display:inline-block;position:relative;z-index:2;top:-1px}.tree .tree-folder .tree-folder-header .tree-folder-name{margin-left:2px}.tree .tree-folder .tree-folder-header>.ace-icon:first-child{margin:-2px 0 0 -2px}.tree .tree-folder:last-child:after{display:inline-block;content:"";position:absolute;z-index:1;top:15px;bottom:0;left:-15px;border-left:1px solid #FFF}.tree .tree-folder .tree-folder-content{margin-left:23px;position:relative}.tree .tree-folder .tree-folder-content:before{display:inline-block;content:"";position:absolute;z-index:1;top:-14px;bottom:16px;left:-14px;border:1px dotted #67b2dd;border-width:0 0 0 1px}.tree .tree-item{height:20px;line-height:20px;cursor:pointer}.tree .tree-item:hover{background-color:#F0F7FC}.tree .tree-item .tree-item-name{margin-left:3px}.tree .tree-item .tree-item-name>.ace-icon:first-child{margin-right:3px}.tree .tree-item>.ace-icon:first-child{margin-top:-1px}.tree .tree-folder,.tree .tree-item{position:relative}.tree .tree-folder:before,.tree .tree-item:before{display:inline-block;content:"";position:absolute;top:14px;left:-13px;width:18px;height:0;border-top:1px dotted #67b2dd;z-index:1}.tree .tree-selected{background-color:rgba(98,168,209,.1);color:#6398B0}.tree .tree-selected:hover{background-color:rgba(98,168,209,.1)}.tree .tree-folder,.tree .tree-item{border:1px solid #FFF}.tree .tree-folder .tree-folder-header{border-radius:0}.tree .tree-folder .tree-folder-header,.tree .tree-item{margin:0;padding:5px;color:#4D6878;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.tree .tree-item>.ace-icon:first-child{color:#F9E8CE;width:13px;height:13px;line-height:13px;font-size:11px;text-align:center;border-radius:3px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background-color:#FAFAFA;border:1px solid #CCC;box-shadow:0 1px 2px rgba(0,0,0,.05)}.tree .tree-selected>.ace-icon:first-child{background-color:#F9A021;border-color:#F9A021;color:#FFF}.tree .tree-minus.ace-icon:first-child,.tree .tree-plus.ace-icon:first-child{font-style:normal;vertical-align:middle;height:11px;width:11px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;text-align:center;border:1px solid #8BAEBF;line-height:10px;background-color:#FFF;position:relative;z-index:1}.tree .tree-minus.ace-icon:first-child:before,.tree .tree-plus.ace-icon:first-child:before{content:"";display:block;width:7px;height:0;border-top:1px solid #4D6878;position:absolute;top:5px;left:2px}.tree .tree-plus.ace-icon:first-child:after{content:"";display:block;height:7px;width:0;border-left:1px solid #4D6878;position:absolute;top:2px;left:5px}.tree .tree-unselectable .tree-item>.ace-icon:first-child{color:#5084A0;width:13px;height:13px;line-height:13px;font-size:10px;text-align:center;border-radius:0;background-color:transparent;border:none;box-shadow:none}.tree .ace-icon[class*="-down"]{transform:rotate(-45deg)}.tree .fa-spin{height:auto}.tree .tree-loading{margin-left:36px}.tree img{display:inline;veritcal-align:middle}.gritter-item-wrapper{background-image:none!important;box-shadow:0 2px 10px rgba(50,50,50,.5);background:rgba(50,50,50,.92)}.gritter-item-wrapper.gritter-info{background:rgba(49,81,133,.92)}.gritter-item-wrapper.gritter-error{background:rgba(153,40,18,.92)}.gritter-item-wrapper.gritter-success{background:rgba(89,131,75,.92)}.gritter-item-wrapper.gritter-warning{background:rgba(190,112,31,.92)}.gritter-item-wrapper.gritter-light{background:rgba(245,245,245,.95);border:1px solid #BBB}.gritter-item-wrapper.gritter-light.gritter-info{background:rgba(232,242,255,.95)}.gritter-item-wrapper.gritter-light.gritter-info .gritter-item{color:#4A577D}.gritter-item-wrapper.gritter-light.gritter-error{background:rgba(255,235,235,.95)}.gritter-item-wrapper.gritter-light.gritter-error .gritter-item{color:#894A38}.gritter-item-wrapper.gritter-light.gritter-success{background:rgba(239,250,227,.95)}.gritter-item-wrapper.gritter-light.gritter-success .gritter-item{color:#416131}.gritter-item-wrapper.gritter-light.gritter-warning{background:rgba(252,248,227,.95)}.gritter-item-wrapper.gritter-light.gritter-warning .gritter-item{color:#946446}.gritter-item p{line-height:1.8}.gritter-bottom,.gritter-item,.gritter-top{background-image:none}.gritter-close{left:auto;right:3px;background-image:none;width:18px;height:18px;line-height:17px;text-align:center;border:2px solid transparent;border-radius:16px;color:#E17B67}.gritter-close:before{font-family:FontAwesome;font-size:16px;content:"\f00d"}.gritter-info .gritter-close{color:orange}.gritter-error .gritter-close,.gritter-success .gritter-close,.gritter-warning .gritter-close{color:#FFEA07}.gritter-close:hover{color:#FFF!important}.gritter-title{text-shadow:none}.gritter-light .gritter-bottom,.gritter-light .gritter-close,.gritter-light .gritter-item,.gritter-light .gritter-top{background-image:none;color:#444}.gritter-light .gritter-title{text-shadow:none}.gritter-light .gritter-close:hover{color:#8A3104!important}.gritter-center{position:fixed;left:33%;right:33%;top:33%}@media only screen and (max-width:767px){.gritter-center{left:16%;right:16%;top:30%}}@media only screen and (max-width:480px){.gritter-center{left:30px;right:30px}}@media only screen and (max-width:320px){.gritter-center{left:10px;right:10px}}.wysiwyg-editor{max-height:250px;height:250px;background-color:#F7F8FA;border-collapse:separate;border:1px solid #BBC0CA;padding:4px;box-sizing:content-box;overflow-y:scroll;overflow-x:hidden;outline:0}.wysiwyg-editor:focus{background-color:#FFF}.wysiwyg-toolbar{line-height:33px;margin:0!important;position:relative}.wysiwyg-toolbar .dropdown-menu{text-align:left}.wysiwyg-toolbar .btn-group{float:none!important;font-size:0}.wysiwyg-toolbar .btn-group>.btn{float:none;padding-left:0;padding-right:0;text-align:center;margin-left:1px}.wysiwyg-toolbar .btn-group>.btn>.ace-icon:first-child{font-size:14px;width:25px;max-width:25px;display:inline-block;border-width:1px!important}.wysiwyg-toolbar .btn-group>.btn.dropdown-toggle>.ace-icon:last-child{margin-right:4px}.wysiwyg-style1 .btn-group>.btn,.wysiwyg-style1 .btn-group>.inline>.btn,.wysiwyg-style2 .btn-group>.btn,.wysiwyg-style2 .btn-group>.inline>.btn{margin:0!important;background:#FFF!important;border-width:0!important;color:#ADB3BE!important;text-shadow:none!important}.wysiwyg-style1 .btn-group>.btn.active,.wysiwyg-style1 .btn-group>.inline>.btn.active,.wysiwyg-style2 .btn-group>.btn.active,.wysiwyg-style2 .btn-group>.inline>.btn.active{color:#5B80CE!important}.wysiwyg-style1 .btn-group>.btn.active:after,.wysiwyg-style1 .btn-group>.inline>.btn.active:after,.wysiwyg-style2 .btn-group>.btn.active:after,.wysiwyg-style2 .btn-group>.inline>.btn.active:after{display:none}.wysiwyg-style1 .btn-group,.wysiwyg-style2 .btn-group{position:relative}.wysiwyg-style1 .btn-group:after,.wysiwyg-style2 .btn-group:after{display:block;content:"";position:absolute;left:-2px;top:6px;bottom:6px;width:0;max-width:0;border-left:1px solid #E1E6EA}.wysiwyg-style1 .btn-group:first-child:after,.wysiwyg-style2 .btn-group:first-child:after{display:none}.wysiwyg-style2{background-color:#E5E5E5}.wysiwyg-style2+.wysiwyg-editor{border-color:#DDD;background-color:#FFF;border-top:none}.wysiwyg-style2 .btn-group>.btn,.wysiwyg-style2 .btn-group>.inline>.btn{margin:0 1px 0 0!important;background:#FFF!important;border:none!important;color:#8D939E!important;text-shadow:none!important}.wysiwyg-style2 .btn-group>.btn.active,.wysiwyg-style2 .btn-group>.inline>.btn.active{color:#FFF!important;background:#6AAEDF!important}.wysiwyg-style2 .btn-group:after{display:none}.wysiwyg-toolbar .btn-colorpicker{width:24px;height:24px;position:relative;background:#87B87F;background:-moz-linear-gradient(top,#cf3e73 10%,#fff 20%,#2283c5 30%,#fff 40%,#87b87f 50%,#fff 60%,#ffb752 70%,#fff 80%,#d15b47 90%,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(10%,#cf3e73),color-stop(20%,#fff),color-stop(30%,#2283c5),color-stop(40%,#fff),color-stop(50%,#87b87f),color-stop(60%,#fff),color-stop(70%,#ffb752),color-stop(80%,#fff),color-stop(90%,#d15b47),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#cf3e73 10%,#fff 20%,#2283c5 30%,#fff 40%,#87b87f 50%,#fff 60%,#ffb752 70%,#fff 80%,#d15b47 90%,#fff 100%);background:-o-linear-gradient(top,#cf3e73 10%,#fff 20%,#2283c5 30%,#fff 40%,#87b87f 50%,#fff 60%,#ffb752 70%,#fff 80%,#d15b47 90%,#fff 100%);background:-ms-linear-gradient(top,#cf3e73 10%,#fff 20%,#2283c5 30%,#fff 40%,#87b87f 50%,#fff 60%,#ffb752 70%,#fff 80%,#d15b47 90%,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#CF3E73', endColorstr='#FFB752', GradientType=0);background:linear-gradient(top,#cf3e73 10%,#fff 20%,#2283c5 30%,#fff 40%,#87b87f 50%,#fff 60%,#ffb752 70%,#fff 80%,#d15b47 90%,#fff 100%)}.wysiwyg-toolbar .dropdown-colorpicker>.dropdown-menu{top:auto}.wysiwyg-toolbar input[type=file]{position:fixed;z-index:-10;opacity:0;max-width:0;max-height:0;display:block}.wysiwyg-toolbar .wysiwyg-choose-file{display:inline-block;width:auto;margin:4px auto 0;padding-left:5px;padding-right:5px}.wysiwyg-toolbar .dropdown-menu input[type=text]{margin-left:8px;margin-bottom:0}.wysiwyg-toolbar .dropdown-menu input[type=text].form-control{min-width:150px}.wysiwyg-toolbar .dropdown-menu .btn{margin-right:8px;margin-left:8px}.wysiwyg-style1 .btn-colorpicker{width:20px;height:20px;margin-left:4px}@media screen and (-webkit-min-device-pixel-ratio:0){.wysiwyg-editor img{display:inline!important}.wysiwyg-editor .ui-wrapper{border:1px dotted #D00;overflow:visible!important;display:inline-block!important;vertical-align:middle}.wysiwyg-editor .ui-wrapper:after{content:"";display:block;position:absolute;right:-3px;bottom:-3px;width:7px;height:7px;border:1px solid #D00;background-color:#FFF;z-index:1}}.widget-header .wysiwyg-toolbar{background-color:transparent}.widget-header .wysiwyg-toolbar .btn-group>.btn,.widget-header .wysiwyg-toolbar .btn-group>.inline>.btn{border-color:transparent;background:rgba(255,255,255,.25)!important;color:#FFF!important;min-width:32px;border-width:1px!important;border-radius:4px!important;padding:2px 1px 4px}.widget-header .wysiwyg-toolbar .btn-group>.btn.active,.widget-header .wysiwyg-toolbar .btn-group>.inline>.btn.active{background:rgba(0,0,0,.25)!important}.widget-body .wysiwyg-editor{border-width:0}.wysiwyg-speech-input{width:20px!important;color:transparent!important;background:0 0!important;border-width:0!important;-moz-transform:scale(2,2);-webkit-transform:scale(2,2);-o-transform:scale(2,2);-ms-transform:scale(2,2);transform:scale(2,2);-webkit-box-shadow:none!important;box-shadow:none!important;position:absolute;right:0;top:-10px;cursor:pointer}.wysiwyg-speech-input:focus{-webkit-box-shadow:none!important;box-shadow:none!important}.widget-body .md-header{margin-top:-30px;margin-left:9px}.widget-body .md-header .btn{border-color:transparent;background:rgba(255,255,255,.25)!important;color:#FFF!important;text-align:center;min-width:32px;border-width:1px!important;border-radius:4px!important;padding:2px 4px 4px}.widget-body .md-header .btn>.ace-icon{font-size:14px;width:25px;max-width:25px;display:inline-block}.widget-body .md-header .btn-inverse{background:rgba(0,0,0,.25)!important;padding-right:5px;margin-left:4px}.widget-body .md-preview{padding:8px;min-height:200px}.widget-body .md-input{border:none!important;box-shadow:none!important;display:block;margin-bottom:0;background-color:rgba(48,126,204,.07);padding:8px;width:100%}.widget-body .md-input:focus{background-color:#FFF;box-shadow:none!important}.editable-container .popover-title{color:#438EB9}.editable-click{border-bottom:1px dashed #BBB;cursor:pointer;font-weight:400}img.editable-click{border:1px dotted #BBB}.editable-click:hover{border-color:#08C;color:#08C}img.editable-click:hover{opacity:.75;filter:alpha(opacity=75)}.editable-buttons,.editable-input{display:inline-block}.editable-buttons{margin-left:1px}.editable-buttons .btn{padding:0;width:28px;line-height:24px;border-width:3px;font-size:12px;margin:0 1px 0 0}.editable-buttons .btn>.ace-icon{margin:0}.editable-clear-x{cursor:pointer;color:#888;background:0 0}.editable-clear-x:hover{color:#D15B47}.editable-clear-x:before{display:inline-block;content:"\f057";font-family:FontAwesome;font-size:15px;position:absolute;margin-top:-9px;width:16px;height:30px;line-height:30px;text-align:center}.editable-input .ace-spinner{margin-right:8px}.editable-input .ace-spinner .spinner-input{width:100%}.editable-inline .editable-slider{margin-top:10px;margin-right:4px}.editable-popup .editable-slider{display:block;margin-bottom:16px;margin-top:4px}.editable-slider input[type=text]{display:none}.editable-slider input[type=range]{outline:0!important}.editable-input .ace-file-input{display:block}.editable-image .ace-file-multiple .ace-file-container.selected{border-color:transparent}.editable-image+.editable-buttons,.editable-wysiwyg+.editable-buttons{display:block;text-align:center;margin-top:8px}.editable-wysiwyg{width:95%}.editable-wysiwyg .wysiwyg-editor{height:auto;overflow-y:hidden}.editableform .input-append.dropdown-menu{display:none}.editableform .open .input-append.dropdown-menu{display:block}.editable-container .editableform{margin-bottom:10px}.editable-inline .editableform{margin-bottom:0}.editableform .control-group{display:block}.editableform-loading{background:0 0}.editableform-loading .ace-icon,.editableform-loading .progress{position:relative;top:35%}.input-group.date .input-group-addon{cursor:pointer}.datepicker td,.datepicker th,.daterangepicker td,.daterangepicker th{border-radius:0!important;font-size:13px}.datepicker td.active,.datepicker td.active:hover,.daterangepicker td.active,.daterangepicker td.active:hover{background:#2283c5!important}.datepicker td.active.disabled,.datepicker td.active.disabled:hover,.daterangepicker td.active.disabled,.daterangepicker td.active.disabled:hover{background:#8b9aa3!important}.datepicker td,.datepicker th{min-width:32px}.datepicker-dropdown.datepicker-orient-bottom:after,.datepicker-dropdown.datepicker-orient-bottom:before{top:auto}.daterangepicker .calendar-date{border-radius:0}.datepicker-months .month,.datepicker-years .year{border-radius:0!important}.datepicker-months .month.active,.datepicker-months .month.active:active,.datepicker-months .month.active:focus,.datepicker-months .month.active:hover,.datepicker-years .year.active,.datepicker-years .year.active:active,.datepicker-years .year.active:focus,.datepicker-years .year.active:hover{background-image:none!important;background-color:#2283c5!important}.bootstrap-timepicker-widget table td input{width:32px}.well .datepicker table tr td.day:hover{background-color:#7d8893;color:#FFF}.bootstrap-timepicker-widget table td a:hover{border-radius:0}.daterangepicker.opensleft:before,.daterangepicker.opensright:before{-moz-border-bottom-colors:rgba(0,0,0,.2)}.daterangepicker.opensleft:after,.daterangepicker.opensright:after{-moz-border-bottom-colors:#fff}.datepicker-dropdown:before{-moz-border-bottom-colors:rgba(0,0,0,.2)}.datepicker-dropdown:after{-moz-border-bottom-colors:#fff}.datepicker-dropdown.datepicker-orient-bottom:before{-moz-border-top-colors:#999}.datepicker-dropdown.datepicker-orient-bottom:after{-moz-border-top-colors:#FFF}.bootstrap-timepicker-widget.dropdown-menu:before{-moz-border-bottom-colors:rgba(0,0,0,.2)}.bootstrap-timepicker-widget.dropdown-menu:after{-moz-border-bottom-colors:#FFF}.bootstrap-timepicker-widget.timepicker-orient-bottom:before{-moz-border-top-colors:#999}.bootstrap-timepicker-widget.timepicker-orient-bottom:after{-moz-border-top-colors:#FFF}.bootstrap-datetimepicker-widget [class=btn]{border-width:0!important;background-color:transparent!important;color:#777!important;text-shadow:none!important}.bootstrap-datetimepicker-widget [class=btn]:hover{color:#1B6AAA!important}.bootstrap-datetimepicker-widget .btn.btn-primary{border-width:3px!important}.bootstrap-datetimepicker-widget .picker-switch{margin-bottom:2px}.bootstrap-datetimepicker-widget .picker-switch .btn{width:90%!important;background-color:#EEE!important;color:#478fca!important;font-size:16px}.bootstrap-datetimepicker-widget .picker-switch .btn:hover{background-color:#e3edf5!important}.bootstrap-datetimepicker-widget td span{border-radius:0}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{color:#555!important}.ui-slider{background-color:#CCC}.ui-slider-horizontal{height:9px}.ui-slider-vertical{width:9px}.ui-slider .ui-slider-handle{border-radius:0;width:1.45em;height:1.45em;background-color:#F8F8F8;border:1px solid}.ui-slider .ui-slider-handle:after,.ui-slider .ui-slider-handle:before{display:block;content:"";position:absolute;top:4px;left:5px;width:4px;height:8px;border:1px solid;border-width:0 1px;border-color:inherit}.ui-slider .ui-slider-handle:after{left:8px;border-width:0 1px 0 0}.ui-slider .ui-slider-handle:hover{background-color:#FFF}.ui-slider .ui-slider-handle:active,.ui-slider .ui-slider-handle:focus,.ui-slider .ui-slider-handle:hover{outline:0;-webkit-box-shadow:1px 1px 1px 0 rgba(0,0,0,.3);box-shadow:1px 1px 1px 0 rgba(0,0,0,.3)}.ui-slider-horizontal .ui-slider-handle{margin-left:-.725em;top:-.4em}.ui-slider-vertical .ui-slider-handle{left:-.35em;margin-bottom:-.65em}.ui-slider-small.ui-slider-horizontal{height:5px}.ui-slider-small.ui-slider-vertical{width:5px}.ui-slider-small .ui-slider-handle{border-radius:100%;width:17px;height:17px;margin-bottom:-.45em;left:-.35em}.ui-slider-small .ui-slider-handle:after,.ui-slider-small .ui-slider-handle:before{height:7px;left:5px;width:3px}.ui-slider-small .ui-slider-handle:after{left:7px}.ui-slider-simple .ui-slider-handle:after,.ui-slider-simple .ui-slider-handle:before{display:none}.ui-slider-range{background-color:#4aa4ce}.ui-slider-handle{outline:0!important;border-color:#4aa4ce!important}.ui-state-disabled .ui-slider-range{background-color:#8daebe}.ui-state-disabled .ui-slider-handle{-webkit-box-shadow:none!important;box-shadow:none!important;border-color:#8daebe!important}.ui-slider-green .ui-slider-range{background-color:#8bbc67}.ui-slider-green .ui-slider-handle{border-color:#8bbc67!important}.ui-slider-green.ui-state-disabled .ui-slider-range{background-color:#aab2a4}.ui-slider-green.ui-state-disabled .ui-slider-handle{border-color:#aab2a4!important}.ui-slider-red .ui-slider-range{background-color:#d36e6e}.ui-slider-red .ui-slider-handle{border-color:#d36e6e!important}.ui-slider-red.ui-state-disabled .ui-slider-range{background-color:#caaaaa}.ui-slider-red.ui-state-disabled .ui-slider-handle{border-color:#caaaaa!important}.ui-slider-purple .ui-slider-range{background-color:#ac68ba}.ui-slider-purple .ui-slider-handle{border-color:#ac68ba!important}.ui-slider-purple.ui-state-disabled .ui-slider-range{background-color:#afa4b1}.ui-slider-purple.ui-state-disabled .ui-slider-handle{border-color:#afa4b1!important}.ui-slider-orange .ui-slider-range{background-color:#efad62}.ui-slider-orange .ui-slider-handle{border-color:#efad62!important}.ui-slider-orange.ui-state-disabled .ui-slider-range{background-color:#e1c4a3}.ui-slider-orange.ui-state-disabled .ui-slider-handle{border-color:#e1c4a3!important}.ui-slider-dark .ui-slider-range{background-color:#606060}.ui-slider-dark .ui-slider-handle{border-color:#606060!important}.ui-slider-dark.ui-state-disabled .ui-slider-range{background-color:#7a7a7a}.ui-slider-dark.ui-state-disabled .ui-slider-handle{border-color:#7a7a7a!important}.ui-slider-pink .ui-slider-range{background-color:#d6487e}.ui-slider-pink .ui-slider-handle{border-color:#d6487e!important}.ui-slider-pink.ui-state-disabled .ui-slider-range{background-color:#c58ca2}.ui-slider-pink.ui-state-disabled .ui-slider-handle{border-color:#c58ca2!important}.ui-datepicker{background-color:#FFF;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{height:26px;min-width:32px;max-width:32px;text-align:center;cursor:pointer;color:transparent;line-height:26px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.ui-datepicker .ui-datepicker-next .ui-icon,.ui-datepicker .ui-datepicker-prev .ui-icon{color:transparent;visibility:hidden}.ui-datepicker .ui-datepicker-next:hover,.ui-datepicker .ui-datepicker-prev:hover{background-color:#EEE;text-decoration:none}.ui-datepicker .ui-datepicker-next:before,.ui-datepicker .ui-datepicker-prev:before{display:inline;font-family:FontAwesome;font-size:14px;content:"\f060";color:#393939}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:2px}.ui-datepicker .ui-datepicker-next:before{content:"\f061"}.ui-datepicker .ui-datepicker-prev-hover{left:2px}.ui-datepicker .ui-datepicker-next-hover{right:2px}.ui-datepicker td{padding:0}.ui-datepicker td>a,.ui-datepicker td>span{display:inline-block;height:22px;min-width:24px;max-width:24px;text-align:center;color:#393939;font-size:13px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.ui-datepicker td>a:hover{background-color:#EEE}.ui-datepicker td>a.ui-state-highlight{background-color:#D5E5EF}.ui-datepicker td>a.ui-state-active{background-color:#2283c5;color:#FFF}.ui-datepicker td>a.ui-priority-secondary{color:#888}.ui-datepicker td>span{color:#999}.ui-datepicker td .ui-datepicker-title select{height:24px;line-height:24px;padding:2px 3px}.ui-datepicker td .ui-datepicker-buttonpane{background-color:#DDD;height:1px}.ui-widget-overlay{background:rgba(0,0,0,.25);opacity:1!important;filter:alpha(opacity=100)!important;z-index:1040!important}.ui-dialog,.ui-jqdialog{z-index:1050!important;background-color:#FFF;padding:0;border:1px solid #DDD;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.ui-dialog .ui-dialog-titlebar,.ui-dialog .ui-jqdialog-titlebar,.ui-jqdialog .ui-dialog-titlebar,.ui-jqdialog .ui-jqdialog-titlebar{background-color:#F1F1F1;font-size:16px;color:#669fc7;padding:0}.ui-dialog .ui-dialog-title,.ui-dialog .ui-jqdialog-title,.ui-jqdialog .ui-dialog-title,.ui-jqdialog .ui-jqdialog-title{float:none!important;width:auto}.ui-dialog .widget-header,.ui-jqdialog .widget-header{margin:0;border-width:0 0 1px}.ui-dialog .ui-dialog-buttonpane,.ui-dialog .ui-jqdialog-buttonpane,.ui-jqdialog .ui-dialog-buttonpane,.ui-jqdialog .ui-jqdialog-buttonpane{background-color:#eff3f8;border-top:1px solid #e4e9ee}.ui-dialog .ui-dialog-buttonpane button,.ui-dialog .ui-jqdialog-buttonpane button,.ui-jqdialog .ui-dialog-buttonpane button,.ui-jqdialog .ui-jqdialog-buttonpane button{font-size:14px}.ui-dialog .ui-dialog-titlebar-close,.ui-dialog .ui-jqdialog-titlebar-close,.ui-jqdialog .ui-dialog-titlebar-close,.ui-jqdialog .ui-jqdialog-titlebar-close{border:none;background:0 0;opacity:.4;color:#d15b47;padding:0;top:50%;right:8px!important;text-align:center}.ui-dialog .ui-dialog-titlebar-close:before,.ui-dialog .ui-jqdialog-titlebar-close:before,.ui-jqdialog .ui-dialog-titlebar-close:before,.ui-jqdialog .ui-jqdialog-titlebar-close:before{content:"\f00d";display:inline;font-family:FontAwesome;font-size:16px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-jqdialog-titlebar-close:hover,.ui-jqdialog .ui-dialog-titlebar-close:hover,.ui-jqdialog .ui-jqdialog-titlebar-close:hover{opacity:1;text-decoration:none;padding:0}.ui-dialog .ui-dialog-titlebar-close .ui-button-text,.ui-dialog .ui-jqdialog-titlebar-close .ui-button-text,.ui-jqdialog .ui-dialog-titlebar-close .ui-button-text,.ui-jqdialog .ui-jqdialog-titlebar-close .ui-button-text{text-indent:0;visibility:hidden}.ui-dialog .widget-header .ui-dialog-titlebar-close,.ui-dialog .widget-header .ui-jqdialog-titlebar-close,.ui-jqdialog .widget-header .ui-dialog-titlebar-close,.ui-jqdialog .widget-header .ui-jqdialog-titlebar-close{right:10px!important}.ui-accordion .ui-accordion-header{color:#478fca;font-weight:400;background-color:#F9F9F9;border:1px solid #cdd8e3;padding:8px 8px 9px 24px}.ui-accordion .ui-accordion-header:hover{color:#6ea6cc;background-color:#f1f8fd}.ui-accordion .ui-accordion-header.ui-state-active{color:#4c8fbd;background-color:#eef4f9;position:relative;font-weight:700}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{text-indent:0;margin-top:0;position:absolute;left:10px;top:7px}.ui-accordion .ui-accordion-header .ui-accordion-header-icon:before{display:inline;font-family:FontAwesome;font-size:15px;content:"\f0da"}.ui-accordion .ui-accordion-header.ui-state-active .ui-accordion-header-icon:before{content:"\f0d7";font-weight:400}.ui-accordion .ui-accordion-content{border:1px solid #cdd8e3;border-top-width:0;padding:11px 16px}.ui-tabs .ui-tabs-nav{padding:0;border-bottom:1px solid #C5D0DC}.ui-tabs .ui-tabs-nav li.ui-state-default>a{background-color:#F9F9F9;border:1px solid #C5D0DC;border-bottom-width:0;color:#999;line-height:16px;margin-right:-1px;z-index:11;padding:8px 12px;position:relative;top:2px}.ui-tabs .ui-tabs-nav li>a:focus{outline:0}.ui-tabs .ui-tabs-nav li.ui-tabs-active>a{background-color:#FFF;border:1px solid;border-color:#4C8FBD #C5D0DC transparent;border-top-width:2px;-webkit-box-shadow:0 -2px 3px 0 rgba(0,0,0,.15);box-shadow:0 -2px 3px 0 rgba(0,0,0,.15);color:#576373;position:relative;top:1px}.ui-tabs .ui-tabs-panel{border:1px solid #C5D0DC;border-top-width:0;margin:0;left:auto;right:auto;top:auto;bottom:auto}.ui-menu{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;width:150px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2);background-color:#FFF;border:1px solid rgba(0,0,0,.2);padding:3px}.ui-menu .ui-menu-item a{padding:4px 7px 5px;color:#444;cursor:pointer;-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}.ui-menu .ui-menu-item a .ui-menu-icon{float:right;position:relative;top:0;left:auto;right:auto;bottom:auto;text-indent:0}.ui-menu .ui-menu-item a .ui-menu-icon:before{content:"\f105";font-family:FontAwesome;font-size:14px;display:inline}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a:hover{background-color:#4f99c6;color:#FFF;margin:auto;font-weight:400}.ui-menu .ui-menu-item a.ui-state-active .ui-menu-icon,.ui-menu .ui-menu-item a.ui-state-focus .ui-menu-icon,.ui-menu .ui-menu-item a:hover .ui-menu-icon{color:#FFF}.ui-menu .ui-state-disabled a{color:#999;cursor:default}.ui-menu .ui-state-disabled a.ui-state-active,.ui-menu .ui-state-disabled a.ui-state-focus,.ui-menu .ui-state-disabled a:hover{background-color:#FFF;color:#999}.ui-autocomplete{background-color:#FFF;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.ui-autocomplete-category{padding:6px;position:relative;background-color:#eef4f9;color:#478fca;font-weight:bolder;border:1px solid #DAE6ED;border-width:1px 0}.ui-spinner-button{border-width:0!important;font-size:10px;height:14px;line-height:14px;width:18px;color:#FFF!important;text-shadow:0 -1px 0 rgba(0,0,0,.25)!important;display:inline-block;position:absolute;text-align:center;padding:0}.ui-spinner-button>.ace-icon{width:18px;display:inline-block}.ui-spinner-up{top:0;right:5px}.ui-spinner-down{bottom:3px;right:5px}.ui-spinner-input{margin-top:0;padding:5px;max-width:100px;font-size:14px}.ui-tooltip{background-color:#444;color:#FFF}.ui-progressbar{background-color:#f5f5f5;height:22px}.ui-progressbar .ui-progressbar-value{margin:0}.ui-progressbar .ui-progressbar-value[class=progress-bar]{background-color:#2a91d8}.ui-jqgrid .ui-jqgrid-view,.ui-jqgrid .ui-paging-info,.ui-jqgrid .ui-pg-selbox,.ui-jqgrid .ui-pg-table{font-size:13px}.ui-jqgrid .ui-jqgrid-title{float:left;margin:8px}.ui-jqgrid .ui-jqgrid-title-rtl{float:right;margin:8px}.ui-jqgrid-view>.ui-jqgrid-titlebar{height:40px;line-height:24px;color:#FFF;background:#307ecc;padding:0;font-size:15px}.ui-jqgrid tr.jqgrow.ui-row-rtl td:last-child{border-right:none;border-left:1px solid #E1E1E1}.ui-jqgrid .ui-jqgrid-hdiv{background-color:#eff3f8;border:1px solid #D3D3D3;border-width:1px 0 0 1px;line-height:15px;font-weight:700;color:#777;text-shadow:none}.ui-jqgrid .ui-jqgrid-htable thead{background-color:#eff3f8}.ui-jqgrid .ui-jqgrid-htable th span.ui-jqgrid-resize{height:45px!important}.ui-jqgrid .ui-jqgrid-htable th div{padding-top:12px;padding-bottom:12px}.ui-jqgrid-hdiv .ui-jqgrid-htable{border-top:1px solid #E1E1E1}.ui-jqgrid-titlebar{position:relative;top:1px;z-index:1}.ui-jqgrid tr.jqgrow,.ui-jqgrid tr.ui-row-ltr,.ui-jqgrid tr.ui-row-rtl{border:none}.ui-jqgrid tr.ui-row-ltr td,.ui-jqgrid tr.ui-row-rtl td{border-bottom:1px solid #E1E1E1;padding:6px 4px;border-color:#E1E1E1}.ui-jqgrid tr.ui-state-highlight.ui-row-ltr td{border-right-color:#C7D3A9}.ui-jqgrid tr.ui-state-highlight.ui-row-rtl td{border-left-color:#C7D3A9}.ui-jqgrid-btable .ui-widget-content.ui-priority-secondary{background-image:none;background-color:#F9F9F9;opacity:1}.ui-jqgrid-btable .ui-widget-content.ui-state-hover{background-image:none;background-color:#EFF4F7;opacity:1}.ui-jqgrid-btable .ui-widget-content.ui-state-highlight{background-color:#E4EFC9}.ui-jqgrid .ui-jqgrid-pager{line-height:15px;height:55px;padding-top:3px!important;padding-bottom:5px!important;background-color:#eff3f8!important;border-bottom:1px solid #E1E1E1!important;border-top:1px solid #E1E1E1!important}.ui-jqgrid .ui-pg-input{font-size:inherit;width:24px;height:20px;line-height:16px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;text-align:center;padding-top:1px;padding-bottom:1px}.ui-jqgrid .ui-pg-selbox{display:block;height:24px;width:60px;margin:0;padding:1px;line-height:normal}.ui-jqgrid .ui-jqgrid-htable th div{overflow:visible}.ui-jqgrid .ui-pager-control{height:50px;position:relative;padding-left:9px;padding-right:9px}.ui-jqgrid .ui-jqgrid-toppager{height:auto!important;background-color:#eff3f8;border-bottom:1px solid #E1E1E1!important}.ui-jqgrid .jqgrow .editable{max-width:90%;max-width:calc(92%)!important}.ui-pg-table .navtable .ui-corner-all{border-radius:0}.ui-jqgrid .ui-pg-button:hover{padding:1px}.ui-jqgrid .ui-pg-button .ui-separator{margin-left:4px;margin-right:4px;border-color:#C9D4DB}.ui-jqgrid .ui-jqgrid-btable{border-left:1px solid #E1E1E1}.ui-jqgrid .ui-jqgrid-bdiv{border-top:1px solid #E1E1E1}.ui-jqgrid .loading{position:absolute;top:45%;left:45%;width:auto;height:auto;z-index:101;padding:6px;margin:5px;text-align:center;font-weight:700;font-size:12px;background-color:#FFF;border:2px solid #8EB8D1;color:#E2B018}.ui-jqgrid .ui-search-toolbar{border-top:1px solid #E1E1E1}.ui-jqgrid .ui-jqgrid-labels{border-bottom:none;background:#F2F2F2 repeat-x;background-image:-webkit-linear-gradient(top,#f8f8f8 0,#ececec 100%);background-image:-o-linear-gradient(top,#f8f8f8 0,#ececec 100%);background-image:linear-gradient(to bottom,#f8f8f8 0,#ececec 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff8f8f8', endColorstr='#ffececec', GradientType=0);padding:0!important;border-left:1px solid #E1E1E1!important}.ui-jqgrid .ui-jqgrid-labels th{border-right:1px solid #E1E1E1!important;text-align:left!important}.ui-jqgrid-labels th[id*="_cb"]:first-child>div{padding-top:0;text-align:center!important}.ui-jqgrid-sortable{padding-left:4px;font-size:13px;color:#777;font-weight:700}.ui-jqgrid-sortable:hover{color:#547ea8}th[aria-selected=true]{background-image:-webkit-linear-gradient(top,#eff3f8 0,#e3e7ed 100%);background-image:-o-linear-gradient(top,#eff3f8 0,#e3e7ed 100%);background-image:linear-gradient(to bottom,#eff3f8 0,#e3e7ed 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeff3f8', endColorstr='#ffe3e7ed', GradientType=0)}th[aria-selected=true] .ui-jqgrid-sortable{color:#307ecc}.ui-icon{text-indent:0;color:#307ecc;float:none;right:2px}.rtl .ui-icon{right:auto;left:2px}.ui-grid-ico-sort:before{display:inline;content:"\f0d7";font-family:FontAwesome;font-size:12px}.ui-icon-asc:before{content:"\f0d8"}.ui-state-disabled{color:#BBB}.ui-pg-table>tbody>tr>.ui-pg-button>.ui-icon{display:inline-block;padding:0;width:24px;height:24px;line-height:22px;text-align:center;position:static;float:none;margin:0 2px!important;color:gray;border:1px solid #CCC;background-color:#FFF;border-radius:100%}.ui-pg-table>tbody>tr>.ui-pg-button>.ui-icon:hover{color:#699AB5;border-color:#699AB5}.ui-pg-table>tbody>tr>.ui-pg-button>.ui-icon:before{width:20px;text-align:center;display:inline-block}.ui-pg-table>tbody>tr>.ui-pg-button.ui-state-disabled .ui-icon{color:#B0B0B0;background-color:#F7F7F7;border-color:#DDD;-moz-transform:scale(0.9);-webkit-transform:scale(0.9);-o-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.ui-jqgrid-btable input,.ui-jqgrid-btable select,.ui-jqgrid-btable textarea{padding:2px;width:auto;max-width:100%;margin-bottom:0}.ui-jqgrid-btable select{padding:1px;height:25px;line-height:25px}.ui-pg-div .ui-icon{display:inline-block;width:18px;float:none;position:static;text-align:center;opacity:.85;-webkit-transition:all .12s;-o-transition:all .12s;transition:all .12s;margin:0 1px;vertical-align:middle;cursor:pointer;font-size:17px}.ui-pg-div .ui-icon:hover{-moz-transform:scale(1.2);-webkit-transform:scale(1.2);-o-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2);opacity:1;position:static;margin:0 1px}.ui-pg-div .ui-icon:before{font-family:FontAwesome;display:inline}.ui-icon-pencil{color:#478FCA}.ui-icon-pencil:before{content:"\f040"}.ui-icon-trash{color:#DD5A43}.ui-icon-trash:before{content:"\f014"}.ui-icon-disk{color:#69AA46}.ui-icon-disk:before{content:"\f00c"}.ui-icon-cancel{color:#DD5A43}.ui-icon-cancel:before{content:"\f00d"}.ui-jqdialog .ui-jqdialog-content,.ui-jqdialog-content{font-size:13px;padding:4px 0 0}.ui-jqdialog .ui-jqdialog-content .formdata,.ui-jqdialog-content .formdata{font-size:13px;padding:6px 12px}.ui-jqdialog .ui-jqdialog-content .form-view-data,.ui-jqdialog-content .form-view-data{vertical-align:middle;font-size:13px}.ui-jqdialog .ui-jqdialog-content[id*=alertcnt_],.ui-jqdialog-content[id*=alertcnt_]{padding:8px 11px}.ui-jqdialog-content .CaptionTD{font-size:12px;text-align:right;color:#666}.ui-jqdialog-content .FormData{border-bottom:1px dotted #E8E8E8}.ui-jqdialog-content .FormData:last-child{border-bottom:none}.ui-jqdialog-content .FormData>td{padding-top:6px;padding-bottom:6px}.ui-jqdialog-content input.FormElement{width:auto}.ui-jqdialog-content select.FormElement{padding:1px;height:25px;line-height:25px;width:auto}.ui-jqdialog-content td.EditButton{padding:8px}.EditTable{background-color:#eff3f8;border-top:1px solid #D6E1EA!important;padding:8px}.EditTable tr:first-child{display:none}.EditTable .navButton .fm-button{float:none!important;width:auto!important;margin:1px 1px 2px!important;background-color:transparent;border-radius:100%}.EditTable .navButton .fm-button:hover{background-color:transparent}.EditTable .navButton .fm-button:focus{outline:0}.EditTable .navButton .fm-button .ace-icon{display:inline-block;color:#999;border:1px solid #AAA;width:26px;height:26px;line-height:26px;text-align:center;border-radius:100%;background-color:#FFF}.EditTable .navButton .fm-button:hover .ace-icon{color:#699AB5;border-color:#699AB5}.EditTable .navButton .fm-button.ui-state-disabled .ace-icon,.EditTable .navButton .fm-button.ui-state-disabled:hover .ace-icon{color:#BBB;border-color:#CCC;-moz-transform:scale(0.88);-webkit-transform:scale(0.88);-o-transform:scale(0.88);-ms-transform:scale(0.88);transform:scale(0.88)}.FormGrid .EditTable{background-color:#FFF;border-top:none!important;padding:0}.FormGrid .EditTable tr:first-child{display:none}.ui-jqgrid .ui-jqgrid-view button,.ui-jqgrid .ui-jqgrid-view input,.ui-jqgrid .ui-jqgrid-view select,.ui-jqgrid .ui-jqgrid-view textarea{font-size:13px}.ui-jqdialog-content .searchFilter select{padding:1px;height:26px;line-height:26px;width:auto;max-width:95%;margin-bottom:0}.ui-jqdialog-content .searchFilter .input-elm{margin-bottom:0;height:18px;line-height:18px;width:95%!important;padding-left:1px;padding-right:1px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.ui-jqdialog-content .searchFilter table{margin-left:4px}.ui-jqdialog-content .searchFilter tr td{padding:5px 0}.ui-jqdialog-content .searchFilter .add-group,.ui-jqdialog-content .searchFilter .add-rule,.ui-jqdialog-content .searchFilter .delete-group{margin-left:4px!important;font-size:15px!important}.ui-jqdialog-content .searchFilter .delete-rule{border:none;background-color:#FFF;color:#D15B47;font-size:20px;width:22px;line-height:10px;padding:0;text-shadow:none!important;display:inline-block;-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s;opacity:.85}.ui-jqdialog-content .searchFilter .delete-rule:hover{-moz-transform:scale(1.1);-webkit-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1);color:#B74635;opacity:1}.ui-jqdialog-content .searchFilter .queryresult{margin-bottom:11px}.ui-jqdialog-content .searchFilter .queryresult td.query{padding:6px 11px;border:1px solid #E1E1E1;background-color:#EEE}.ui-jqdialog-content .searchFilter .queryresult td.query:empty{display:none}.ui-state-error{background-color:#f2dede;border:1px solid #ebccd1;color:#a94442;margin:4px 4px 8px;padding:6px 10px;text-shadow:0 1px 0 rgba(255,255,255,.5);font-size:13px}.ui-jqdialog .ui-widget-header{background-image:-webkit-linear-gradient(top,#fff 0,#eee 100%);background-image:-o-linear-gradient(top,#fff 0,#eee 100%);background-image:linear-gradient(to bottom,#fff 0,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);border-image:none;border-bottom:1px solid solid;color:#669FC7;min-height:38px;position:relative}.ui-jqdialog .ui-widget-header .ui-jqdialog-title{line-height:38px;margin:0;padding:0 0 0 12px;text-align:left}.widget-header .ui-jqdialog-title{padding-left:0!important;padding-right:0!important}.ui-jqdialog .ui-widget-header .widget-header{border-bottom:none}.ui-jqdialog .ui-jqdialog-titlebar{border-bottom:1px solid #DDD!important}.fm-button{margin:0 4px}.fm-button:not(.btn){background-color:#abbac3;border-radius:0;box-shadow:none;color:#FFF;cursor:pointer;display:inline-block;font-size:13px;line-height:28px;padding:0 12px 1px;margin:0 8px;position:relative;text-shadow:0 -1px 0 rgba(0,0,0,.25);-webkit-transition:all .15s;-o-transition:all .15s;transition:all .15s;vertical-align:middle}.fm-button.ui-state-default:hover{background-color:#8b9aa3}.ui-jqgrid .ui-jqgrid-htable .ui-search-toolbar th{height:30px;padding-top:2px;white-space:normal}.ui-jqgrid .ui-jqgrid-htable .ui-search-toolbar th div{padding-top:0;padding-bottom:0;height:30px;line-height:26px}.ui-jqgrid .ui-jqgrid-titlebar-close{top:10%;height:auto;padding:0;margin:2px 8px 0 0;text-align:center;border-radius:4px}.ui-jqgrid .ui-jqgrid-titlebar-close:hover{background-color:rgba(255,255,255,.2)}.ui-jqgrid .ui-jqgrid-titlebar-close .ui-icon:before{display:inline-block;font-family:FontAwesome;content:"\f077";color:#FFF}.ui-jqgrid .ui-jqgrid-titlebar-close .ui-icon-circle-triangle-s:before{content:"\f078"}.ui-jqgrid .tree-wrap-ltr{margin:0 4px;float:none;display:inline}.ui-jqgrid .tree-wrap-rtl{margin:2px 4px 0}.ui-jqgrid .ui-subgrid{border-bottom:1px solid #E1E1E1;background-color:#F6FAFF}.ui-jqgrid .ui-subgrid .ui-jqgrid-btable{background-color:#FFF}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-hdiv{background-color:transparent;margin-top:4px}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-hdiv .ui-jqgrid-htable .ui-jqgrid-labels{border-bottom:1px solid #E1E1E1;background:#F1F1F1}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-hdiv .ui-jqgrid-htable th[aria-selected=true]{background:#E5E9EF}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-hdiv .ui-jqgrid-htable th .ui-jqgrid-sortable{font-size:12px}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-hdiv .ui-jqgrid-htable th div{padding-top:8px;padding-bottom:8px}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-hdiv .ui-jqgrid-htable th span.ui-jqgrid-resize{height:36px!important}.ui-jqgrid .ui-subgrid .ui-jqgrid .ui-jqgrid-bdiv{height:auto!important;max-height:150px;margin-bottom:4px;border-top-width:0;border-bottom:1px solid #E1E1E1}.ui-jqgrid .ui-sgcollapsed>a:hover{text-decoration:none}@media only screen and (max-width:767px){.ui-jqgrid .ui-jqgrid-pager{height:90px}.ui-jqgrid .ui-jqgrid-pager>.ui-pager-control{height:85px;padding-top:9px}.ui-jqgrid .ui-jqgrid-pager>.ui-pager-control>.ui-pg-table>tbody>tr>td{vertical-align:top}.ui-jqgrid .ui-jqgrid-pager>.ui-pager-control>.ui-pg-table>tbody>tr>td#grid-pager_center{width:0!important;position:static}.ui-jqgrid .ui-jqgrid-pager>.ui-pager-control>.ui-pg-table>tbody>tr>td#grid-pager_center>.ui-pg-table{margin:36px auto 0;position:absolute;right:0;left:0;text-align:center}}@media only screen and (max-width:767px) and (-webkit-min-device-pixel-ratio:0){.ui-jqgrid .ui-jqgrid-pager>.ui-pager-control>.ui-pg-table>tbody>tr>td#grid-pager_center>.ui-pg-table{width:300px}}.dd{position:relative;display:block;margin:0;padding:0;max-width:600px;list-style:none;line-height:20px}.dd-list{display:block;position:relative;margin:0;padding:0;list-style:none}.dd-list .dd-list{padding-left:30px}.dd-collapsed .dd-list{display:none}.dd-empty,.dd-item,.dd-placeholder{display:block;position:relative;margin:0;padding:0;min-height:20px;line-height:20px}.dd-handle,.dd2-content{display:block;min-height:38px;margin:5px 0;padding:8px 12px;background:#F8FAFF;border:1px solid #DAE2EA;color:#7C9EB2;text-decoration:none;font-weight:700;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dd-handle:hover,.dd2-content:hover{color:#438EB9;background:#F4F6F7;border-color:#DCE2E8}.dd-handle[class*=btn-],.dd2-content[class*=btn-]{color:#FFF;border:none;padding:9px 12px}.dd-handle[class*=btn-]:hover,.dd2-content[class*=btn-]:hover{opacity:.85;color:#FFF}.dd2-handle+.dd2-content,.dd2-handle+.dd2-content[class*=btn-]{padding-left:44px}.dd-handle[class*=btn-]:hover,.dd2-content[class*=btn-] .dd2-handle[class*=btn-]:hover+.dd2-content[class*=btn-]{color:#FFF}.dd-item>button:hover~.dd-handle,.dd-item>button:hover~.dd2-content{color:#438EB9;background:#F4F6F7;border-color:#DCE2E8}.dd-item>button:hover~.dd-handle[class*=btn-],.dd-item>button:hover~.dd2-content[class*=btn-]{opacity:.85;color:#FFF}.dd2-handle:hover~.dd2-content{color:#438EB9;background:#F4F6F7;border-color:#DCE2E8}.dd2-handle:hover~.dd2-content[class*=btn-]{opacity:.85;color:#FFF}.dd2-item.dd-item>button{margin-left:34px}.dd-item>button{display:block;position:relative;z-index:1;cursor:pointer;float:left;width:25px;height:20px;margin:5px 1px 5px 5px;padding:0;text-indent:100%;white-space:nowrap;overflow:hidden;border:0;background:0 0;font-size:12px;line-height:1;text-align:center;font-weight:700;top:4px;left:1px;color:#707070}.dd-item>button:before{font-family:FontAwesome;content:'\f067';display:block;position:absolute;width:100%;text-align:center;text-indent:0;font-weight:400;font-size:14px}.dd-item>button[data-action=collapse]:before{content:'\f068'}.dd-item>button:hover{color:#707070}.dd-item.dd-colored>button,.dd-item.dd-colored>button:hover{color:#EEE}.dd-empty,.dd-placeholder{margin:5px 0;padding:0;min-height:30px;background:#F0F9FF;border:2px dashed #BED2DB;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dd-empty{border-color:#AAA;border-style:solid;background-color:#e5e5e5}.dd-dragel{position:absolute;pointer-events:none;z-index:999;opacity:.8}.dd-dragel>li>.dd-handle{color:#4B92BE;background:#F1F5FA;border-color:#D6E1EA;border-left:2px solid #777;position:relative}.dd-dragel>li>.dd-handle[class*=btn-]{color:#FFF}.dd-dragel>.dd-item>.dd-handle{margin-top:0}.dd-list>li[class*=item-]{border-width:0;padding:0}.dd-list>li[class*=item-]>.dd-handle{border-left:2px solid;border-left-color:inherit}.dd-list>li>.dd-handle .sticker{position:absolute;right:0;top:0}.dd-dragel>li>.dd2-handle,.dd2-handle{left:0;top:0;width:36px;margin:0;text-align:center;padding:0!important;line-height:38px;height:38px;background:#EBEDF2;border:1px solid #DEE4EA;cursor:pointer;overflow:hidden;position:absolute;z-index:1}.dd-dragel>li>.dd2-handle,.dd2-handle:hover{background:#E3E8ED}.dd2-content[class*=btn-]{text-shadow:none!important}.dd2-handle[class*=btn-]{text-shadow:none!important;background:rgba(0,0,0,.1)!important;border-right:1px solid #EEE}.dd2-handle[class*=btn-]:hover{background:rgba(0,0,0,.08)!important}.dd-dragel .dd2-handle[class*=btn-]{border-color:transparent #EEE transparent transparent}.dd2-handle.btn-yellow{text-shadow:none!important;background:rgba(0,0,0,.05)!important;border-right:1px solid #FFF}.dd2-handle.btn-yellow:hover{background:rgba(0,0,0,.08)!important}.dd-dragel .dd2-handle.btn-yellow{border-color:transparent #FFF transparent transparent}.dd-item>.dd2-handle .drag-icon{display:none}.dd-dragel>.dd-item>.dd2-handle .drag-icon{display:inline}.dd-dragel>.dd-item>.dd2-handle .normal-icon{display:none}.dropzone{border-radius:0;border:1px solid rgba(0,0,0,.06)}.dropzone .dz-default.dz-message{background-image:none;font-size:24px;text-align:center;line-height:32px;left:0;width:100%;margin-left:auto}.dropzone .dz-default.dz-message span{display:inline;color:#555}.dropzone .dz-default.dz-message span .upload-icon{opacity:.7;filter:alpha(opacity=70);margin-top:8px;cursor:pointer}.dropzone .dz-default.dz-message span .upload-icon:hover{opacity:1;filter:alpha(opacity=100)}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark,.dropzone-previews .dz-preview .dz-error-mark,.dropzone-previews .dz-preview .dz-success-mark{background-image:none;background-color:rgba(255,255,255,.8);border-radius:100%;text-align:center;line-height:35px}.dropzone .dz-preview .dz-error-mark:before,.dropzone-previews .dz-preview .dz-error-mark:before{font-family:FontAwesome;font-size:30px;color:#DB6262;content:"\f00d"}.dropzone .dz-preview .dz-success-mark:before,.dropzone-previews .dz-preview .dz-success-mark:before{font-family:FontAwesome;font-size:30px;color:#6DA552;content:"\f00c"}.dropzone a.dz-remove,.dropzone-previews a.dz-remove{border:none;border-radius:0;color:#FFF;background:#D15B47;cursor:pointer}.dropzone a.dz-remove:hover,.dropzone-previews a.dz-remove:hover{color:#FFF;background:#B74635}.dropzone .progress,.dropzone-previews .progress{margin-bottom:0}.dropzone .dz-preview.dz-error .progress,.dropzone .dz-preview.dz-success .progress,.dropzone-previews .dz-preview.dz-error .progress,.dropzone-previews .dz-preview.dz-success .progress{display:none}input.tt-hint,input.tt-query,input.typeahead{min-width:175px;font-size:16px;line-height:24px;border:1px solid #CCC;border-radius:0;outline:0}.form-group input.tt-hint,input.tt-hint{background-color:#FFF!important;color:#B0B0B0!important}.tt-dropdown-menu{text-align:left;position:absolute;left:0!important;right:0!important;min-width:175px;margin-top:2px;padding:8px 0;background-color:#FFF;border:1px solid #D0D0D0;border:1px solid rgba(0,0,0,.15);border-radius:0;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}.tt-suggestion{padding:3px 12px 4px;font-size:16px;line-height:24px}.tt-suggestion.tt-cursor{color:#FFF;background-color:#4F99C6;cursor:pointer}.tt-suggestion p{margin:0}input.typeahead.scrollable~.tt-dropdown-menu{max-height:200px;overflow-y:auto}.icon-animated-bell{display:inline-block;-moz-animation:ringing 2s 5 ease 1s;-webkit-animation:ringing 2s 5 ease 1s;-o-animation:ringing 2s 5 ease 1s;-ms-animation:ringing 2s 5 ease 1s;animation:ringing 2s 5 ease 1s;-moz-transform-origin:50% 0;-webkit-transform-origin:50% 0;-o-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0}@-moz-keyframes ringing{0%{-moz-transform:rotate(-15deg)}2%{-moz-transform:rotate(15deg)}4%{-moz-transform:rotate(-18deg)}6%{-moz-transform:rotate(18deg)}8%{-moz-transform:rotate(-22deg)}10%{-moz-transform:rotate(22deg)}12%{-moz-transform:rotate(-18deg)}14%{-moz-transform:rotate(18deg)}16%{-moz-transform:rotate(-12deg)}18%{-moz-transform:rotate(12deg)}20%{-moz-transform:rotate(0deg)}}@-webkit-keyframes ringing{0%{-webkit-transform:rotate(-15deg)}2%{-webkit-transform:rotate(15deg)}4%{-webkit-transform:rotate(-18deg)}6%{-webkit-transform:rotate(18deg)}8%{-webkit-transform:rotate(-22deg)}10%{-webkit-transform:rotate(22deg)}12%{-webkit-transform:rotate(-18deg)}14%{-webkit-transform:rotate(18deg)}16%{-webkit-transform:rotate(-12deg)}18%{-webkit-transform:rotate(12deg)}20%{-webkit-transform:rotate(0deg)}}@-ms-keyframes ringing{0%{-ms-transform:rotate(-15deg)}2%{-ms-transform:rotate(15deg)}4%{-ms-transform:rotate(-18deg)}6%{-ms-transform:rotate(18deg)}8%{-ms-transform:rotate(-22deg)}10%{-ms-transform:rotate(22deg)}12%{-ms-transform:rotate(-18deg)}14%{-ms-transform:rotate(18deg)}16%{-ms-transform:rotate(-12deg)}18%{-ms-transform:rotate(12deg)}20%{-ms-transform:rotate(0deg)}}@keyframes ringing{0%{transform:rotate(-15deg)}2%{transform:rotate(15deg)}4%{transform:rotate(-18deg)}6%{transform:rotate(18deg)}8%{transform:rotate(-22deg)}10%{transform:rotate(22deg)}12%{transform:rotate(-18deg)}14%{transform:rotate(18deg)}16%{transform:rotate(-12deg)}18%{transform:rotate(12deg)}20%{transform:rotate(0deg)}}.icon-animated-vertical{display:inline-block;-moz-animation:vertical 2s 5 ease 2s;-webkit-animation:vertical 2s 5 ease 2s;-o-animation:vertical 2s 5 ease 2s;-ms-animation:vertical 2s 5 ease 2s;animation:vertical 2s 5 ease 2s}@-moz-keyframes vertical{0%{-moz-transform:translate(0,-3px)}4%{-moz-transform:translate(0,3px)}8%{-moz-transform:translate(0,-3px)}12%{-moz-transform:translate(0,3px)}16%{-moz-transform:translate(0,-3px)}20%{-moz-transform:translate(0,3px)}22%{-moz-transform:translate(0,0)}}@-webkit-keyframes vertical{0%{-webkit-transform:translate(0,-3px)}4%{-webkit-transform:translate(0,3px)}8%{-webkit-transform:translate(0,-3px)}12%{-webkit-transform:translate(0,3px)}16%{-webkit-transform:translate(0,-3px)}20%{-webkit-transform:translate(0,3px)}22%{-webkit-transform:translate(0,0)}}@-ms-keyframes vertical{0%{-ms-transform:translate(0,-3px)}4%{-ms-transform:translate(0,3px)}8%{-ms-transform:translate(0,-3px)}12%{-ms-transform:translate(0,3px)}16%{-ms-transform:translate(0,-3px)}20%{-ms-transform:translate(0,3px)}22%{-ms-transform:translate(0,0)}}@keyframes vertical{0%{transform:translate(0,-3px)}4%{transform:translate(0,3px)}8%{transform:translate(0,-3px)}12%{transform:translate(0,3px)}16%{transform:translate(0,-3px)}20%{transform:translate(0,3px)}22%{transform:translate(0,0)}}.icon-animated-hand-pointer{display:inline-block;-moz-animation:hand-pointer 2s 4 ease 2s;-webkit-animation:hand-pointer 2s 4 ease 2s;-o-animation:hand-pointer 2s 4 ease 2s;-ms-animation:hand-pointer 2s 4 ease 2s;animation:hand-pointer 2s 4 ease 2s}@-moz-keyframes hand-pointer{0%{-moz-transform:translate(0,0)}6%{-moz-transform:translate(5px,0)}12%{-moz-transform:translate(0,0)}18%{-moz-transform:translate(5px,0)}24%{-moz-transform:translate(0,0)}30%{-moz-transform:translate(5px,0)}36%{-moz-transform:translate(0,0)}}.icon-animated-wrench{display:inline-block;-moz-animation:wrenching 2.5s 4 ease;-webkit-animation:wrenching 2.5s 4 ease;-o-animation:wrenching 2.5s 4 ease;-ms-animation:wrenching 2.5s 4 ease;animation:wrenching 2.5s 4 ease;-moz-transform-origin:90% 35%;-webkit-transform-origin:90% 35%;-o-transform-origin:90% 35%;-ms-transform-origin:90% 35%;transform-origin:90% 35%}@-moz-keyframes wrenching{0%{-moz-transform:rotate(-12deg)}8%{-moz-transform:rotate(12deg)}10%{-moz-transform:rotate(24deg)}18%,20%{-moz-transform:rotate(-24deg)}28%,30%{-moz-transform:rotate(24deg)}38%,40%{-moz-transform:rotate(-24deg)}48%,50%{-moz-transform:rotate(24deg)}58%,60%{-moz-transform:rotate(-24deg)}68%{-moz-transform:rotate(24deg)}75%{-moz-transform:rotate(0deg)}}@-webkit-keyframes wrenching{0%{-webkit-transform:rotate(-12deg)}8%{-webkit-transform:rotate(12deg)}10%{-webkit-transform:rotate(24deg)}18%,20%{-webkit-transform:rotate(-24deg)}28%,30%{-webkit-transform:rotate(24deg)}38%,40%{-webkit-transform:rotate(-24deg)}48%,50%{-webkit-transform:rotate(24deg)}58%,60%{-webkit-transform:rotate(-24deg)}68%{-webkit-transform:rotate(24deg)}75%{-webkit-transform:rotate(0deg)}}@-o-keyframes wrenching{0%{-o-transform:rotate(-12deg)}8%{-o-transform:rotate(12deg)}10%{-o-transform:rotate(24deg)}18%,20%{-o-transform:rotate(-24deg)}28%,30%{-o-transform:rotate(24deg)}38%,40%{-o-transform:rotate(-24deg)}48%,50%{-o-transform:rotate(24deg)}58%,60%{-o-transform:rotate(-24deg)}68%{-o-transform:rotate(24deg)}75%{-o-transform:rotate(0deg)}}@-ms-keyframes wrenching{0%{-ms-transform:rotate(-12deg)}8%{-ms-transform:rotate(12deg)}10%{-ms-transform:rotate(24deg)}18%,20%{-ms-transform:rotate(-24deg)}28%,30%{-ms-transform:rotate(24deg)}38%,40%{-ms-transform:rotate(-24deg)}48%,50%{-ms-transform:rotate(24deg)}58%,60%{-ms-transform:rotate(-24deg)}68%{-ms-transform:rotate(24deg)}75%{-ms-transform:rotate(0deg)}}@keyframes wrenching{0%{transform:rotate(-12deg)}8%{transform:rotate(12deg)}10%{transform:rotate(24deg)}18%,20%{transform:rotate(-24deg)}28%,30%{transform:rotate(24deg)}38%,40%{transform:rotate(-24deg)}48%,50%{transform:rotate(24deg)}58%,60%{transform:rotate(-24deg)}68%{transform:rotate(24deg)}75%{transform:rotate(0deg)}}@-moz-keyframes blinking{0%{opacity:1}40%{opacity:0}80%{opacity:1}}@-webkit-keyframes blinking{0%{opacity:1}40%{opacity:0}80%{opacity:1}}@-ms-keyframes blinking{0%{opacity:1}40%{opacity:0}80%{opacity:1}}@keyframes blinking{0%{opacity:1}40%{opacity:0}80%{opacity:1}}@-moz-keyframes pulsating{0%{-moz-transform:scale(1)}5%{-moz-transform:scale(0.75)}10%{-moz-transform:scale(1)}15%{-moz-transform:scale(1.25)}20%{-moz-transform:scale(1)}25%{-moz-transform:scale(0.75)}30%{-moz-transform:scale(1)}35%{-moz-transform:scale(1.25)}40%{-moz-transform:scale(1)}}@-webkit-keyframes pulsating{0%{-webkit-transform:scale(1)}5%{-webkit-transform:scale(0.75)}10%{-webkit-transform:scale(1)}15%{-webkit-transform:scale(1.25)}20%{-webkit-transform:scale(1)}25%{-webkit-transform:scale(0.75)}30%{-webkit-transform:scale(1)}35%{-webkit-transform:scale(1.25)}40%{-webkit-transform:scale(1)}}@-ms-keyframes pulsating{0%{-ms-transform:scale(1)}5%{-ms-transform:scale(0.75)}10%{-ms-transform:scale(1)}15%{-ms-transform:scale(1.25)}20%{-ms-transform:scale(1)}25%{-ms-transform:scale(0.75)}30%{-ms-transform:scale(1)}35%{-ms-transform:scale(1.25)}40%{-ms-transform:scale(1)}}@keyframes pulsating{0%{transform:scale(1)}5%{transform:scale(0.75)}10%{transform:scale(1)}15%{transform:scale(1.25)}20%{transform:scale(1)}25%{transform:scale(0.75)}30%{transform:scale(1)}35%{transform:scale(1.25)}40%{transform:scale(1)}}.btn-scroll-up{border-width:0;position:fixed;right:2px;z-index:99;-webkit-transition-duration:.3s;transition-duration:.3s;opacity:0;filter:alpha(opacity=0);bottom:-24px;visibility:hidden}.btn-scroll-up.display{opacity:.7;filter:alpha(opacity=70);bottom:2px;visibility:visible}.btn-scroll-up:hover{opacity:1;filter:alpha(opacity=100)}.btn-scroll-up:focus{outline:0}@media (min-width:768px){.main-container.container>.btn-scroll-up{right:auto;margin-left:714px}}@media (min-width:992px){.main-container.container>.btn-scroll-up{right:auto;margin-left:934px}}@media (min-width:1200px){.main-container.container>.btn-scroll-up{right:auto;margin-left:1134px}}.ace-settings-container{position:absolute;right:0;top:auto;z-index:12}.btn.ace-settings-btn{float:left;display:block;width:42px!important;text-align:center;border-radius:6px 0 0 6px!important;opacity:.55;vertical-align:top;margin:0}.btn.ace-settings-btn.open,.btn.ace-settings-btn:hover{opacity:1}.ace-settings-box{display:block;float:left;max-width:0;max-height:0;overflow:hidden;padding:0;-moz-transform:translate(0,0);-webkit-transform:translate(0,0);-o-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0);background-color:#FFF;border:0 solid #ffb34b;-webkit-transition:max-width .15s linear 0s,max-height 0s linear .15s,padding 0s linear .15s,border-width 0s linear .15s;-o-transition:max-width .15s linear 0s,max-height 0s linear .15s,padding 0s linear .15s,border-width 0s linear .15s;transition:max-width .15s linear 0s,max-height 0s linear .15s,padding 0s linear .15s,border-width 0s linear .15s}.ace-settings-box.open{max-width:320px;max-height:1000px;padding:0 14px;border-width:2px;-webkit-transition-delay:0s;-moz-transition-delay:0s;-o-transition-delay:0s;transition-delay:0s}.ace-settings-box.open .ace-settings-item{z-index:auto;min-width:140px}.ace-settings-box .ace-settings-item{margin:6px 0;color:#444;max-height:24px;position:relative;z-index:-1;white-space:nowrap}.ace-settings-box .ace-settings-item>label.lbl{font-size:13px}@media (max-width:480px){.ace-settings-container{text-align:right}.ace-settings-box{float:none!important;text-align:left}.btn.ace-settings-btn{float:none!important;display:inline-block}}@media (max-width:320px){.ace-settings-box>.clearfix>.pull-left,.ace-settings-box>.clearfix>.pull-right{float:none!important}}.grid2,.grid3,.grid4{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin:0 1%;padding:0 2%;float:left;border-left:1px solid #E3E3E3}.grid2:first-child,.grid3:first-child,.grid4:first-child{border-left:none}.grid2{width:48%}.grid3{width:31.33%}.grid4{width:23%;padding:0 1%}.draggable-placeholder{border:2px dashed #D9D9D9!important;background-color:#F7F7F7!important}.easy-pie-chart,.easyPieChart{position:relative;text-align:center}.easy-pie-chart canvas,.easyPieChart canvas{position:absolute;top:0;left:0}.knob-container{direction:ltr;text-align:left}.tags{display:inline-block;padding:4px 6px;color:#777;vertical-align:middle;background-color:#FFF;border:1px solid #d5d5d5;width:206px}.tags:hover{border-color:#b5b5b5}.tags-hover,.tags-hover:hover{border-color:#f59942;outline:0}.tags[class*=span]{float:none;margin-left:0}.tags input[type=text],.tags input[type=text]:focus{border:none;display:inline;outline:0;margin:0;padding:0;line-height:18px;-webkit-box-shadow:none;box-shadow:none;width:100%}.tags .tag{display:inline-block;position:relative;font-size:13px;font-weight:400;vertical-align:baseline;white-space:nowrap;background-color:#91b8d0;color:#FFF;text-shadow:1px 1px 1px rgba(0,0,0,.15);padding:4px 22px 5px 9px;margin-bottom:3px;margin-right:3px;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tags .tag:empty{display:none}.tags .tag-important{background-color:#d15b47}.tags .tag-warning{background-color:#ffb752}.tags .tag-success{background-color:#87b87f}.tags .tag-info{background-color:#6fb3e0}.tags .tag-inverse{background-color:#555}.tags .tag .close{font-size:15px;line-height:20px;opacity:1;filter:alpha(opacity=100);color:#FFF;text-shadow:none;float:none;position:absolute;right:0;top:0;bottom:0;width:18px;text-align:center}.tags .tag .close:hover{background-color:rgba(0,0,0,.2)}.page-content>.row .col-lg-12,.page-content>.row .col-md-12,.page-content>.row .col-sm-12,.page-content>.row .col-xs-12{float:left;max-width:100%}.col-xs-reset{width:auto;padding-left:0;padding-right:0;float:none!important}@media (min-width:768px){.col-sm-reset{width:auto;padding-left:0;padding-right:0;float:none!important}}@media (min-width:992px){.col-md-reset{width:auto;padding-left:0;padding-right:0;float:none!important}}@media (min-width:1200px){.col-lg-reset{width:auto;padding-left:0;padding-right:0;float:none!important}}.jqstooltip,.legendColorBox div{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.legendLabel{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:22px;padding-left:2px;font-size:10px}@media only screen and (max-width:991px){body{overflow-x:hidden}}.navbar-fixed-top+.main-container{padding-top:45px}@media (max-width:479px){.navbar-fixed-top+.main-container{padding-top:90px}.navbar-fixed-top.navbar-collapse+.main-container{padding-top:45px}}@media only screen and (max-width:360px){.grid2,.grid3,.grid4{float:none;display:block;width:96%;border-left-width:0;position:relative;margin-bottom:11px;border-bottom:1px solid #E3E3E3;padding-bottom:4px}.grid2>[class*=pull-],.grid3>[class*=pull-],.grid4>[class*=pull-]{float:none!important;display:inline-block;position:absolute;right:11px;top:0;margin-top:0}.grid2:last-child,.grid3:last-child,.grid4:last-child{border-bottom-width:0}}@media only screen and (max-width:480px){.hidden-480{display:none!important}}@media only screen and (max-width:320px){.hidden-320{display:none!important}}.no-skin .navbar .navbar-toggle{background-color:#75B3D7}.no-skin .navbar .navbar-toggle:focus{background-color:#75B3D7;border-color:transparent}.no-skin .navbar .navbar-toggle:hover{background-color:#61a8d1;border-color:rgba(255,255,255,.1)}.no-skin .navbar .navbar-toggle.display,.no-skin .navbar .navbar-toggle[data-toggle=collapse]:not(.collapsed){background-color:#4d9dcc;box-shadow:inset 1px 1px 2px 0 rgba(0,0,0,.25);border-color:rgba(255,255,255,.35)}.no-skin .sidebar{background-color:#f2f2f2;border-style:solid;border-color:#ccc;border-width:0 1px 0 0}.no-skin .nav-list .open>a,.no-skin .nav-list .open>a:focus,.no-skin .nav-list .open>a:hover{background-color:#fafafa}.no-skin .nav-list>li{border-color:#e5e5e5}.no-skin .nav-list>li>a{background-color:#f8f8f8;color:#585858}.no-skin .nav-list>li>a:focus{background-color:#f8f8f8;color:#1963aa}.no-skin .nav-list>li:hover>a{background-color:#fff;color:#266cad}.no-skin .nav-list>li.open>a{background-color:#fafafa;color:#1963aa}.no-skin .nav-list>li.active>a{font-weight:700;color:#2b7dbc}.no-skin .nav-list>li.active>a,.no-skin .nav-list>li.active>a:focus,.no-skin .nav-list>li.active>a:hover{background-color:#fff}.no-skin .nav-list>li .submenu{background-color:#fff;border-color:#e5e5e5}.no-skin .nav-list>li .submenu>li>a{border-top-color:#e4e4e4;background-color:#fff;color:#616161}.no-skin .nav-list>li .submenu>li>a:hover{color:#4b88b7;background-color:#f1f5f9}.no-skin .nav-list>li .submenu>li.active>a{color:#2b7dbc}.no-skin .nav-list>li .submenu>li.active>a>.menu-icon{color:#c86139}.no-skin .nav-list>li .submenu>li.active.open>a>.menu-icon{color:inherit}@media only screen and (min-width:992px){.no-skin .nav-list>li .submenu>li.active.hover>a.dropdown-toggle>.menu-icon{color:inherit}}.no-skin .nav-list>li .submenu>li.active:not(.open)>a{background-color:#f5f7fa}.no-skin .nav-list>li .submenu>li.active:not(.open)>a:hover{background-color:#f1f5f9}.no-skin .nav-list>li>.submenu .open>a,.no-skin .nav-list>li>.submenu .open>a:focus,.no-skin .nav-list>li>.submenu .open>a:hover{border-color:#e4e4e4}.no-skin .nav-list>li>.submenu li>.submenu>li a{color:#757575}.no-skin .nav-list>li>.submenu li>.submenu>li a:hover{color:#4b88b7;background-color:#f1f5f9}.no-skin .nav-list>li>.submenu li.open>a,.no-skin .nav-list>li>.submenu li>.submenu li.active>a,.no-skin .nav-list>li>.submenu li>.submenu li.open>a{color:#4b88b7}.no-skin .nav-list>li>.submenu:before,.no-skin .nav-list>li>.submenu>li:before{border-color:#9dbdd6}.no-skin .nav-list>li.active>.submenu:before,.no-skin .nav-list>li.active>.submenu>li:before{border-color:#8eb3d0}.no-skin .sidebar-toggle{background-color:#f3f3f3;border-color:#e0e0e0}.no-skin .sidebar-toggle>.ace-icon{border-color:#bbb;color:#aaa;background-color:#fff}.no-skin .sidebar-shortcuts{background-color:#fafafa}.no-skin .sidebar-fixed .sidebar-shortcuts{border-color:#ddd}.no-skin .sidebar-shortcuts-mini{background-color:#fff}.no-skin .nav-list li>.arrow:before{border-right-color:#B8B8B8;-moz-border-right-colors:#B8B8B8;border-width:10px 10px 10px 0;left:-11px}.no-skin .nav-list li>.arrow:after{border-right-color:#fff;-moz-border-right-colors:#fff;border-width:10px 10px 10px 0;left:-10px}.no-skin .nav-list>li.pull_up>.arrow:after{border-right-color:#fff!important;-moz-border-right-colors:#fff!important;border-width:10px 10px 10px 0!important;left:-10px!important}.no-skin .nav-list>li.pull_up>.arrow:before{border-width:10px 10px 10px 0!important;left:-11px!important}.no-skin .nav-list li.active>a:after{border-right-color:#2b7dbc;-moz-border-right-colors:#2b7dbc}.no-skin .nav-list>li.active:after{display:block;content:"";position:absolute;right:-2px;top:-1px;bottom:0;z-index:1;border:2px solid;border-width:0 2px 0 0;border-color:#2b7dbc}.no-skin .sidebar-scroll .nav-list>li.active:after{right:0}@media only screen and (max-width:991px){.no-skin .sidebar.responsive .nav-list>li.active.open>a:after{display:block}}.no-skin .sidebar.menu-min .nav-list>li>a>.menu-text{background-color:#f5f5f5;-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);border-color:#ccc}.no-skin .sidebar.menu-min .nav-list>li>a.dropdown-toggle>.menu-text{-webkit-box-shadow:2px 2px 2px 0 rgba(0,0,0,.1);box-shadow:2px 2px 2px 0 rgba(0,0,0,.1)}.no-skin .sidebar.menu-min .nav-list>li.active>.submenu{border-left-color:#83b6d1}.no-skin .sidebar.menu-min .nav-list>li>.submenu{background-color:#fff;border:1px solid #ccc;border-top-color:#e6e6e6;-webkit-box-shadow:2px 2px 2px 0 rgba(0,0,0,.1);box-shadow:2px 2px 2px 0 rgba(0,0,0,.1)}.no-skin .sidebar.menu-min .nav-list>li>.arrow:after{border-right-color:#f5f5f5;-moz-border-right-colors:#f5f5f5;border-width:8px 8px 8px 0;left:-8px}.no-skin .sidebar.menu-min .nav-list>li>.arrow:before{border-width:8px 8px 8px 0;left:-9px}.no-skin .sidebar.menu-min .nav-list>li.active>.arrow:before{border-right-color:#5a9ec2;-moz-border-right-colors:#5a9ec2}.no-skin .sidebar.menu-min .nav-list>li.active>a>.menu-text{border-left-color:#83b6d1}.no-skin .sidebar.menu-min .sidebar-shortcuts-large{background-color:#fff;-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);border-color:#ccc}.no-skin .sidebar.menu-min .sidebar-toggle>.ace-icon{border-color:#b1b1b1}@media (max-width:991px){.no-skin .sidebar.responsive-min .nav-list>li>a>.menu-text{background-color:#f5f5f5;-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);border-color:#ccc}.no-skin .sidebar.responsive-min .nav-list>li>a.dropdown-toggle>.menu-text{-webkit-box-shadow:2px 2px 2px 0 rgba(0,0,0,.1);box-shadow:2px 2px 2px 0 rgba(0,0,0,.1)}.no-skin .sidebar.responsive-min .nav-list>li.active>.submenu{border-left-color:#83b6d1}.no-skin .sidebar.responsive-min .nav-list>li>.submenu{background-color:#fff;border:1px solid #ccc;border-top-color:#e6e6e6;-webkit-box-shadow:2px 2px 2px 0 rgba(0,0,0,.1);box-shadow:2px 2px 2px 0 rgba(0,0,0,.1)}.no-skin .sidebar.responsive-min .nav-list>li>.arrow:after{border-right-color:#f5f5f5;-moz-border-right-colors:#f5f5f5;border-width:8px 8px 8px 0;left:-8px}.no-skin .sidebar.responsive-min .nav-list>li>.arrow:before{border-width:8px 8px 8px 0;left:-9px}.no-skin .sidebar.responsive-min .nav-list>li.active>.arrow:before{border-right-color:#5a9ec2;-moz-border-right-colors:#5a9ec2}.no-skin .sidebar.responsive-min .nav-list>li.active>a>.menu-text{border-left-color:#83b6d1}.no-skin .sidebar.responsive-min .sidebar-shortcuts-large{background-color:#fff;-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);border-color:#ccc}.no-skin .sidebar.responsive-min .sidebar-toggle>.ace-icon{border-color:#b1b1b1}}@media only screen and (min-width:992px){.no-skin .nav-list li.hover>.submenu{-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);border-color:#ccc}.no-skin .nav-list li.hover>.submenu>li.active>a{background-color:#f5f5f5}.no-skin .nav-list li.hover>.submenu>li:hover>a{background-color:#eef3f7;color:#2e7db4}}@media only screen and (min-width:992px) and (max-width:991px){.no-skin .sidebar.navbar-collapse .nav-list li li.hover.active.open>a,.no-skin .sidebar.navbar-collapse .nav-list li li.hover:hover>a{background-color:#fff}.no-skin .sidebar.navbar-collapse .nav-list li li.hover.open.active>a:hover,.no-skin .sidebar.navbar-collapse .nav-list li li.hover.open>a:hover,.no-skin .sidebar.navbar-collapse .nav-list li li.hover>a:hover{background-color:#f1f5f9}.no-skin .sidebar.navbar-collapse .nav-list>li .submenu>li.active.hover>a.dropdown-toggle>.menu-icon{color:#c86139}.no-skin .sidebar.navbar-collapse .nav-list>li .submenu>li.active.open.hover>a.dropdown-toggle>.menu-icon{color:inherit}}@media only screen and (min-width:992px){.no-skin .sidebar.navbar-collapse .nav-list>li.open.hover:not(:hover):not(:focus):not(.active)>a{color:#585858}.no-skin .sidebar.navbar-collapse .nav-list>li.open.hover:not(:hover):not(:focus):not(.active)>a>.arrow{color:inherit}.no-skin .sidebar.navbar-collapse .nav-list>li.open.hover:hover>a{background-color:#fff}.no-skin .sidebar.navbar-collapse .nav-list>li>.submenu li.open.hover:not(:hover):not(:focus):not(.active)>a{color:#616161}.no-skin .sidebar.navbar-collapse .nav-list>li>.submenu li.open.hover:not(:hover):not(:focus):not(.active)>a>.arrow{color:inherit}}@media only screen and (min-width:992px) and (max-width:991px){.no-skin .sidebar.navbar-collapse .nav-list li.hover>.submenu{border-top-color:#e5e5e5;background-color:#fff}.no-skin .nav-list li.hover>.submenu>li.active:not(.open)>a{background-color:#f5f7fa}.no-skin .nav-list li.hover>.submenu>li.active:not(.open)>a:hover{background-color:#f1f5f9}}@media only screen and (min-width:992px){.no-skin .sidebar.h-sidebar{background-color:#f8f8f8}.no-skin .sidebar.h-sidebar:before{background-color:#e4e4e4;-webkit-box-shadow:0 -1px 1px 0 rgba(0,0,0,.05) inset;box-shadow:0 -1px 1px 0 rgba(0,0,0,.05) inset}.no-skin .sidebar.h-sidebar .nav-list>li:hover{border-color:#cedde5}.no-skin .sidebar.h-sidebar .nav-list>li.active{border-color:#79b0ce}.no-skin .sidebar.h-sidebar .nav-list>li.active:before{background-color:#2b7dbc}.no-skin .sidebar.h-sidebar .nav-list>li.active>a:after{border-width:0 0 3px;border-color:transparent transparent #FFF;left:0;right:0;top:auto;bottom:-3px}.no-skin .sidebar.h-sidebar .sidebar-shortcuts-large{background-color:#FFF;border-color:#CCC;-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.1);box-shadow:2px 1px 2px 0 rgba(0,0,0,.1)}.no-skin .sidebar.h-sidebar .sidebar-shortcuts-large:after{border-bottom-color:#FFF;-moz-border-bottom-colors:#FFF}.no-skin .sidebar.h-sidebar .nav-list>li.hover>.submenu{border-color:#ccc}.no-skin .sidebar.h-sidebar .nav-list>li.hover>.arrow:after{border-color:transparent transparent #FFF;-moz-border-right-colors:none;-moz-border-top-colors:none;-moz-border-left-colors:none;-moz-border-bottom-colors:#FFF}.no-skin .sidebar.h-sidebar .nav-list>li.hover>.arrow:before{border-color:transparent transparent #B8B8B8;-moz-border-right-colors:none;-moz-border-top-colors:none;-moz-border-left-colors:none;-moz-border-bottom-colors:#B8B8B8}}@media only screen and (max-width:991px){.no-skin .sidebar{border-width:0 1px 1px 0;border-top-color:#d6d6d6}.no-skin .menu-toggler+.sidebar.responsive{border-top-width:1px}.no-skin .sidebar.responsive-min{border-width:0 1px 0 0}.no-skin .sidebar.navbar-collapse{border-width:0;border-bottom-width:1px!important;border-bottom-color:#ccc;-webkit-box-shadow:0 2px 2px rgba(0,0,0,.1)!important;box-shadow:0 2px 2px rgba(0,0,0,.1)!important}.no-skin .sidebar.navbar-collapse.menu-min .nav-list>li>.submenu{background-color:#fff}}.no-skin .sidebar-scroll .sidebar-shortcuts{border-bottom-color:#ddd}.no-skin .sidebar-scroll .sidebar-toggle{border-top-color:#ddd}.no-skin .main-container .menu-toggler{background-color:#444}.no-skin .main-container .menu-toggler:before{border-top-color:#87b87f;border-bottom-color:#6fb3e0}.no-skin .main-container .menu-toggler:after{border-top-color:#ffa24d;border-bottom-color:#d15b47}.no-skin .main-container .menu-toggler>.toggler-text{border-top-color:#444;-moz-border-top-colors:#444}.no-skin .nav-list>li.disabled:before{display:none!important}.no-skin .nav-list>li.disabled>a{background-color:#ebebeb!important;color:#656565!important}.no-skin .nav-list li .submenu>li.disabled>a,.no-skin .nav-list li.disabled .submenu>li>a{background-color:#f2f2f2!important;color:#7a7a7a!important;cursor:not-allowed!important}.no-skin .nav-list li .submenu>li.disabled>a>.menu-icon,.no-skin .nav-list li.disabled .submenu>li>a>.menu-icon{display:none}.nav-list li li.highlight.active>a:after,.nav-list li li.highlight.active>a:before,.nav-list li.highlight li.active>a:after,.nav-list li.highlight li.active>a:before{display:none!important}.nav-list>li.highlight.active>a:after,.nav-list>li.highlight.active>a:before{display:block!important}.sidebar-scroll .nav-list>li.active.highlight>a:after,.sidebar-scroll .nav-list>li.active.highlight>a:before{display:none!important}.no-skin .nav-list>li.highlight.active,.no-skin .nav-list>li.highlight:hover{border-color:#c8d8e2}.no-skin .nav-list>li.highlight.active+li,.no-skin .nav-list>li.highlight:hover+li{border-top-color:#c8d8e2}.no-skin .nav-list>li.highlight.active>a,.no-skin .nav-list>li.highlight:hover>a{background-color:#FFF}.no-skin .nav-list>li.highlight.active:after{display:none}.no-skin .nav-list>li.highlight.active:before{display:block;background-color:#4f90c2}.no-skin .nav-list>li.highlight.active>a{background-color:#f2f6f9!important}.no-skin .nav-list>li.highlight.active>a:after,.no-skin .nav-list>li.highlight.active>a:before{display:block;content:"";position:absolute;top:-1px;right:-10px;bottom:auto;z-index:1;border-style:solid;border-width:20px 0 21px 10px;border-color:transparent}.no-skin .nav-list>li.highlight.active>a:before{border-left-color:#a0bccd;-moz-border-left-colors:#a0bccd;right:-11px}.no-skin .nav-list>li.highlight.active>a:after{border-left-color:#f2f6f9;-moz-border-left-colors:#f2f6f9}.no-skin .nav-list li li.highlight.active>a{background-color:#f2f6f9}.no-skin .nav-list li li.highlight.active.open>a{background-color:#FFF}.no-skin .nav-list li li.highlight.active.open>a:hover{background-color:#f1f5f9}@media (min-width:992px){.no-skin .sidebar.h-sidebar .nav-list>li.highlight.active>a:after{display:block;content:"";position:absolute;top:auto;right:auto;bottom:-2px;left:50%;margin-left:-7px;border-color:transparent transparent #FFF;-moz-border-right-colors:none;-moz-border-left-colors:none;-moz-border-top-colors:none;border-width:8px 7px;-moz-border-bottom-colors:#FFF}.no-skin .sidebar.h-sidebar .nav-list>li.highlight.active>a:before{content:"";position:absolute;display:block;top:auto;right:auto;bottom:-1px;left:50%;margin-left:-7px;border-width:8px;border-color:transparent transparent #74add7;-moz-border-right-colors:none;-moz-border-left-colors:none;-moz-border-top-colors:none;-moz-border-bottom-colors:#74add7}.no-skin .sidebar.h-sidebar .nav-list>li.highlight.active:hover>a:after,.no-skin .sidebar.h-sidebar .nav-list>li.highlight.active:hover>a:before{display:none}}@media (min-width:992px){.sidebar.compact .nav-list li.highlight.active>a:after,.sidebar.compact .nav-list li.highlight.active>a:before{display:none!important}}@media (min-width:992px){.sidebar.h-sidebar .nav-list li.highlight.active>a:after,.sidebar.h-sidebar .nav-list li.highlight.active>a:before{display:block!important;border-width:8px!important;-moz-border-left-colors:none!important;-moz-border-right-colors:none!important;border-left-color:transparent!important;border-right-color:transparent!important}.sidebar.h-sidebar .nav-list>li.highlight.active:hover>a:after,.sidebar.h-sidebar .nav-list>li.highlight.active:hover>a:before{display:none!important}}.sidebar.menu-min .nav-list>li.highlight.active>a:after,.sidebar.menu-min .nav-list>li.highlight.active>a:before{display:block!important;top:-1px;border-width:20px 0 21px 10px}@media (max-width:991px){.sidebar.responsive-min .nav-list>li.highlight.active>a:after,.sidebar.responsive-min .nav-list>li.highlight.active>a:before{display:block!important;top:-1px;border-width:20px 0 21px 10px}}.onpage-help-backdrop{position:absolute;z-index:99990;top:0;bottom:0;left:0;right:0;background-color:#000;filter:alpha(opacity=5);background-color:rgba(0,0,0,.05)}.onpage-help-section{display:block;position:absolute;z-index:100000;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#4DFFFFFF', endColorstr='#4DFFFFFF', GradientType=0);background-color:rgba(255,255,255,.3);border:1px dashed #8BBCD3;border-radius:4px;transition:background-color .2s,border-color .2s;-webkit-transition:background-color .2s,border-color .2s;text-align:center;vertical-align:middle;outline:0!important}.onpage-help-section>.ie-hover-fix{display:block;position:absolute;top:0;bottom:0;left:0;right:0;background-color:#FFF;filter:alpha(opacity=1)}.onpage-help-section:active,.onpage-help-section:focus{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#33C9D8EA', endColorstr='#33C9D8EA', GradientType=0);background-color:rgba(201,216,234,.2);border-color:#77ACC4}.onpage-help-section:hover{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#66C9D8EA', endColorstr='#66C9D8EA', GradientType=0);background-color:rgba(201,216,234,.4);border-color:#77ACC4;border-style:solid}.onpage-help-section>.help-icon-1{font-size:36px;display:inline-block;position:absolute;z-index:1;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);opacity:0;filter:alpha(opacity=0);color:#FFF;text-shadow:0 0 2px #000;background-color:#85B8DB;border:2px solid #FFF;border-radius:100%;box-shadow:0 0 2px 1px rgba(0,0,0,.4);width:48px;height:48px;line-height:46px;transition:opacity .2s;-webkit-transition:opacity .2s}.onpage-help-section:active>.help-icon-1,.onpage-help-section:focus>.help-icon-1{opacity:.5}.onpage-help-section:hover>.help-icon-1{opacity:1;filter:alpha(opacity=100)}.onpage-help-section.help-section-small>.help-icon-1{font-size:18px;width:28px;height:28px;line-height:26px;border-radius:12px}.onpage-help-section.help-section-smaller>.help-icon-1{font-size:14px;width:20px;height:20px;line-height:17px;border-radius:8px}.onpage-help-section>.help-icon-2{position:absolute;z-index:2;left:-4px;top:-4px;width:18px;height:18px;line-height:16px;display:block;font-size:16px;color:orange;background-color:#FFF;border:1px solid orange;border-radius:4px;opacity:1;transition:all .2s;-webkit-transition:all .2s}.onpage-help-section:hover>.help-icon-2{color:#59A34E;border-color:#59A34E;transform:scale(1.25);-webkit-transform:scale(1.25)}.onpage-help-modal{z-index:100010}.onpage-help-modal+.modal-backdrop{z-index:100009}.onpage-help-modal-buttons button{border-radius:100%;border-width:2px!important}.onpage-help-modal-buttons button:focus{outline:0!important}.onpage-help-modal-buttons button.disabled{transform:scale(0.9);-webkit-transform:scale(0.9)}.onpage-help-content{max-width:800px;margin:0 auto}.code-modal.onpage-help-modal .modal-dialog{margin-top:6px;margin-bottom:6px}.code-modal.onpage-help-modal .modal-header{padding-top:6px;padding-bottom:6px}.code-modal.onpage-help-modal .modal-body{padding:10px 12px}.onpage-help-modal pre{border-width:0;box-shadow:none;border-radius:0;margin-top:8px}.onpage-help-modal .modal-title code{font-size:13px}.onpage-help-modal .modal-body{font-size:14px}@media print{.navbar,.sidebar{display:none!important}.main-content{margin-left:0!important;margin-right:0!important}.main-content .nav-search{display:none!important}.main-content .breadcrumbs{float:right;border-width:0!important}.main-content .breadcrumbs .breadcrumb>li+li:before{content:"/"}.main-content .breadcrumbs .breadcrumb .home-icon{display:none}.ace-settings-container{display:none!important}.footer{width:100%;height:auto;position:relative}.footer .footer-inner,.footer .footer-inner .footer-content{width:100%}.btn-scroll-up{display:none!important}.btn,.btn.btn-app{background:0 0!important;border-width:1px!important;border-radius:0!important;color:#555!important}.label{border:1px solid #666!important}.label[class*=arrowed]:after,.label[class*=arrowed]:before{display:none!important}} \ No newline at end of file diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_alerts.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_alerts.scssc new file mode 100644 index 0000000..b63edc5 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_alerts.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_background-variant.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_background-variant.scssc new file mode 100644 index 0000000..b543bbc Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_background-variant.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_border-radius.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_border-radius.scssc new file mode 100644 index 0000000..61b88bf Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_border-radius.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_buttons.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_buttons.scssc new file mode 100644 index 0000000..84951e5 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_buttons.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_center-block.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_center-block.scssc new file mode 100644 index 0000000..6f938b8 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_center-block.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_clearfix.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_clearfix.scssc new file mode 100644 index 0000000..d0f876b Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_clearfix.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_forms.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_forms.scssc new file mode 100644 index 0000000..8cf5d96 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_forms.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_gradients.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_gradients.scssc new file mode 100644 index 0000000..c87f18b Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_gradients.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_grid-framework.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_grid-framework.scssc new file mode 100644 index 0000000..64eaf39 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_grid-framework.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_grid.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_grid.scssc new file mode 100644 index 0000000..69f0b93 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_grid.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_hide-text.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_hide-text.scssc new file mode 100644 index 0000000..1dab38e Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_hide-text.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_image.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_image.scssc new file mode 100644 index 0000000..a318f29 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_image.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_labels.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_labels.scssc new file mode 100644 index 0000000..7612080 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_labels.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_list-group.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_list-group.scssc new file mode 100644 index 0000000..c050836 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_list-group.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_nav-divider.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_nav-divider.scssc new file mode 100644 index 0000000..42a1b35 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_nav-divider.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_nav-vertical-align.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_nav-vertical-align.scssc new file mode 100644 index 0000000..a385485 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_nav-vertical-align.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_opacity.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_opacity.scssc new file mode 100644 index 0000000..b65e1b6 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_opacity.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_pagination.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_pagination.scssc new file mode 100644 index 0000000..01efdb0 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_pagination.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_panels.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_panels.scssc new file mode 100644 index 0000000..ebab3be Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_panels.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_progress-bar.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_progress-bar.scssc new file mode 100644 index 0000000..c82f47e Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_progress-bar.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_reset-filter.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_reset-filter.scssc new file mode 100644 index 0000000..13b51b3 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_reset-filter.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_resize.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_resize.scssc new file mode 100644 index 0000000..224169f Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_resize.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_responsive-visibility.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_responsive-visibility.scssc new file mode 100644 index 0000000..08ee1ab Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_responsive-visibility.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_size.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_size.scssc new file mode 100644 index 0000000..1e8b0cd Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_size.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_tab-focus.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_tab-focus.scssc new file mode 100644 index 0000000..3ea9a72 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_tab-focus.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_table-row.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_table-row.scssc new file mode 100644 index 0000000..2b5468a Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_table-row.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_text-emphasis.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_text-emphasis.scssc new file mode 100644 index 0000000..df1c1b3 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_text-emphasis.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_text-overflow.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_text-overflow.scssc new file mode 100644 index 0000000..bae4059 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_text-overflow.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_vendor-prefixes.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_vendor-prefixes.scssc new file mode 100644 index 0000000..ae524e0 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/86c1908123397cf1005de81f48cf5488379aee2b/_vendor-prefixes.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/a3fc55010a1edcf08f2f14e264cea00e2e5d53de/bootstrap.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/a3fc55010a1edcf08f2f14e264cea00e2e5d53de/bootstrap.scssc new file mode 100644 index 0000000..440a857 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/a3fc55010a1edcf08f2f14e264cea00e2e5d53de/bootstrap.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/a3fc55010a1edcf08f2f14e264cea00e2e5d53de/bootstrapV320.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/a3fc55010a1edcf08f2f14e264cea00e2e5d53de/bootstrapV320.scssc new file mode 100644 index 0000000..5375215 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/a3fc55010a1edcf08f2f14e264cea00e2e5d53de/bootstrapV320.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_alerts.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_alerts.scssc new file mode 100644 index 0000000..8a82726 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_alerts.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_badges.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_badges.scssc new file mode 100644 index 0000000..c990a5f Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_badges.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_breadcrumbs.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_breadcrumbs.scssc new file mode 100644 index 0000000..e764c17 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_breadcrumbs.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_button-groups.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_button-groups.scssc new file mode 100644 index 0000000..0d29699 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_button-groups.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_buttons.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_buttons.scssc new file mode 100644 index 0000000..8ceb10b Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_buttons.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_carousel.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_carousel.scssc new file mode 100644 index 0000000..ec37352 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_carousel.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_close.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_close.scssc new file mode 100644 index 0000000..06e5125 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_close.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_code.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_code.scssc new file mode 100644 index 0000000..cbe0fd9 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_code.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_component-animations.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_component-animations.scssc new file mode 100644 index 0000000..29fd9f6 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_component-animations.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_dropdowns.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_dropdowns.scssc new file mode 100644 index 0000000..5aeb1e6 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_dropdowns.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_forms.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_forms.scssc new file mode 100644 index 0000000..a403b69 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_forms.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_glyphicons.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_glyphicons.scssc new file mode 100644 index 0000000..ea34b5a Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_glyphicons.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_grid.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_grid.scssc new file mode 100644 index 0000000..71456cc Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_grid.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_input-groups.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_input-groups.scssc new file mode 100644 index 0000000..f769231 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_input-groups.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_jumbotron.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_jumbotron.scssc new file mode 100644 index 0000000..c6821e7 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_jumbotron.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_labels.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_labels.scssc new file mode 100644 index 0000000..959a717 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_labels.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_list-group.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_list-group.scssc new file mode 100644 index 0000000..b2865d6 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_list-group.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_media.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_media.scssc new file mode 100644 index 0000000..6aaf552 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_media.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_mixins.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_mixins.scssc new file mode 100644 index 0000000..87d4e96 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_mixins.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_modals.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_modals.scssc new file mode 100644 index 0000000..2638948 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_modals.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_navbar.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_navbar.scssc new file mode 100644 index 0000000..dc3ad15 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_navbar.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_navs.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_navs.scssc new file mode 100644 index 0000000..93d3497 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_navs.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_normalize.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_normalize.scssc new file mode 100644 index 0000000..3f0f4dc Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_normalize.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_pager.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_pager.scssc new file mode 100644 index 0000000..c9bbedc Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_pager.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_pagination.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_pagination.scssc new file mode 100644 index 0000000..e92d2fb Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_pagination.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_panels.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_panels.scssc new file mode 100644 index 0000000..7d22b7d Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_panels.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_popovers.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_popovers.scssc new file mode 100644 index 0000000..dcf4b72 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_popovers.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_print.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_print.scssc new file mode 100644 index 0000000..28e1a44 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_print.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_progress-bars.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_progress-bars.scssc new file mode 100644 index 0000000..fde5318 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_progress-bars.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_responsive-embed.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_responsive-embed.scssc new file mode 100644 index 0000000..2b3e659 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_responsive-embed.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_responsive-utilities.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_responsive-utilities.scssc new file mode 100644 index 0000000..6b50f0e Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_responsive-utilities.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_scaffolding.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_scaffolding.scssc new file mode 100644 index 0000000..8845fee Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_scaffolding.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_tables.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_tables.scssc new file mode 100644 index 0000000..ab1a1b9 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_tables.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_thumbnails.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_thumbnails.scssc new file mode 100644 index 0000000..cff2371 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_thumbnails.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_tooltip.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_tooltip.scssc new file mode 100644 index 0000000..0ae05e8 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_tooltip.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_type.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_type.scssc new file mode 100644 index 0000000..e2f00b5 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_type.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_utilities.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_utilities.scssc new file mode 100644 index 0000000..1808fe1 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_utilities.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_variables.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_variables.scssc new file mode 100644 index 0000000..b5a5d89 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_variables.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_wells.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_wells.scssc new file mode 100644 index 0000000..472a2d8 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/_wells.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/bootstrap.scssc b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/bootstrap.scssc new file mode 100644 index 0000000..07dd4c8 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/.sass-cache/f36248dd960f1a9339c30cc05a0df413bcc543e4/bootstrap.scssc differ diff --git a/smartsnippets/static/libs/bootstrap/config.rb b/smartsnippets/static/libs/bootstrap/config.rb new file mode 100644 index 0000000..d6c05c2 --- /dev/null +++ b/smartsnippets/static/libs/bootstrap/config.rb @@ -0,0 +1,23 @@ +# Require any additional compass plugins here. + +http_path = "/" +css_dir = "css" +sass_dir = "sass" +images_dir = "images" +javascripts_dir = "javascripts" + +# You can select your preferred output style here (can be overridden via the command line): +# output_style = :expanded or :nested or :compact or :compressed + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +# line_comments = false + + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass diff --git a/smartsnippets/static/libs/bootstrap/css/bootstrap.css b/smartsnippets/static/libs/bootstrap/css/bootstrap.css new file mode 100644 index 0000000..da94498 --- /dev/null +++ b/smartsnippets/static/libs/bootstrap/css/bootstrap.css @@ -0,0 +1,8076 @@ +@charset "UTF-8"; +/* Bootstrap v3.2.0 */ +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +/* line 9, ../sass/bootstrap/_normalize.scss */ +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +/* line 19, ../sass/bootstrap/_normalize.scss */ +body { + margin: 0; +} + +/* line 32, ../sass/bootstrap/_normalize.scss */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/* line 52, ../sass/bootstrap/_normalize.scss */ +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +/* line 65, ../sass/bootstrap/_normalize.scss */ +audio:not([controls]) { + display: none; + height: 0; +} + +/* line 75, ../sass/bootstrap/_normalize.scss */ +[hidden], +template { + display: none; +} + +/* line 87, ../sass/bootstrap/_normalize.scss */ +a { + background: transparent; +} + +/* line 95, ../sass/bootstrap/_normalize.scss */ +a:active, +a:hover { + outline: 0; +} + +/* line 107, ../sass/bootstrap/_normalize.scss */ +abbr[title] { + border-bottom: 1px dotted; +} + +/* line 115, ../sass/bootstrap/_normalize.scss */ +b, +strong { + font-weight: bold; +} + +/* line 124, ../sass/bootstrap/_normalize.scss */ +dfn { + font-style: italic; +} + +/* line 133, ../sass/bootstrap/_normalize.scss */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* line 142, ../sass/bootstrap/_normalize.scss */ +mark { + background: #ff0; + color: #000; +} + +/* line 151, ../sass/bootstrap/_normalize.scss */ +small { + font-size: 80%; +} + +/* line 159, ../sass/bootstrap/_normalize.scss */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +/* line 167, ../sass/bootstrap/_normalize.scss */ +sup { + top: -0.5em; +} + +/* line 171, ../sass/bootstrap/_normalize.scss */ +sub { + bottom: -0.25em; +} + +/* line 182, ../sass/bootstrap/_normalize.scss */ +img { + border: 0; +} + +/* line 190, ../sass/bootstrap/_normalize.scss */ +svg:not(:root) { + overflow: hidden; +} + +/* line 201, ../sass/bootstrap/_normalize.scss */ +figure { + margin: 1em 40px; +} + +/* line 209, ../sass/bootstrap/_normalize.scss */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/* line 219, ../sass/bootstrap/_normalize.scss */ +pre { + overflow: auto; +} + +/* line 227, ../sass/bootstrap/_normalize.scss */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* line 250, ../sass/bootstrap/_normalize.scss */ +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0; +} + +/* line 264, ../sass/bootstrap/_normalize.scss */ +button { + overflow: visible; +} + +/* line 275, ../sass/bootstrap/_normalize.scss */ +button, +select { + text-transform: none; +} + +/* line 288, ../sass/bootstrap/_normalize.scss */ +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +/* line 300, ../sass/bootstrap/_normalize.scss */ +button[disabled], +html input[disabled] { + cursor: default; +} + +/* line 309, ../sass/bootstrap/_normalize.scss */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/* line 320, ../sass/bootstrap/_normalize.scss */ +input { + line-height: normal; +} + +/* line 332, ../sass/bootstrap/_normalize.scss */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +/* line 344, ../sass/bootstrap/_normalize.scss */ +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/* line 355, ../sass/bootstrap/_normalize.scss */ +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +/* line 368, ../sass/bootstrap/_normalize.scss */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* line 377, ../sass/bootstrap/_normalize.scss */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/* line 388, ../sass/bootstrap/_normalize.scss */ +legend { + border: 0; + padding: 0; +} + +/* line 397, ../sass/bootstrap/_normalize.scss */ +textarea { + overflow: auto; +} + +/* line 406, ../sass/bootstrap/_normalize.scss */ +optgroup { + font-weight: bold; +} + +/* line 417, ../sass/bootstrap/_normalize.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 422, ../sass/bootstrap/_normalize.scss */ +td, +th { + padding: 0; +} + +@media print { + /* line 8, ../sass/bootstrap/_print.scss */ + * { + text-shadow: none !important; + color: #000 !important; + background: transparent !important; + box-shadow: none !important; + } + + /* line 15, ../sass/bootstrap/_print.scss */ + a, + a:visited { + text-decoration: underline; + } + + /* line 20, ../sass/bootstrap/_print.scss */ + a[href]:after { + content: " (" attr(href) ")"; + } + + /* line 24, ../sass/bootstrap/_print.scss */ + abbr[title]:after { + content: " (" attr(title) ")"; + } + + /* line 29, ../sass/bootstrap/_print.scss */ + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + /* line 34, ../sass/bootstrap/_print.scss */ + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + /* line 40, ../sass/bootstrap/_print.scss */ + thead { + display: table-header-group; + } + + /* line 44, ../sass/bootstrap/_print.scss */ + tr, + img { + page-break-inside: avoid; + } + + /* line 49, ../sass/bootstrap/_print.scss */ + img { + max-width: 100% !important; + } + + /* line 53, ../sass/bootstrap/_print.scss */ + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + /* line 60, ../sass/bootstrap/_print.scss */ + h2, + h3 { + page-break-after: avoid; + } + + /* line 67, ../sass/bootstrap/_print.scss */ + select { + background: #fff !important; + } + + /* line 72, ../sass/bootstrap/_print.scss */ + .navbar { + display: none; + } + + /* line 76, ../sass/bootstrap/_print.scss */ + .table td, + .table th { + background-color: #fff !important; + } + + /* line 83, ../sass/bootstrap/_print.scss */ + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + + /* line 87, ../sass/bootstrap/_print.scss */ + .label { + border: 1px solid #000; + } + + /* line 91, ../sass/bootstrap/_print.scss */ + .table { + border-collapse: collapse !important; + } + + /* line 95, ../sass/bootstrap/_print.scss */ + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + src: url("bootstrap/glyphicons-halflings-regular.eot"); + src: url("bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("bootstrap/glyphicons-halflings-regular.woff") format("woff"), url("bootstrap/glyphicons-halflings-regular.ttf") format("truetype"), url("bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); +} +/* line 25, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* line 38, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-asterisk:before { + content: "\2a"; +} + +/* line 39, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-plus:before { + content: "\2b"; +} + +/* line 40, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-euro:before { + content: "\20ac"; +} + +/* line 41, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-minus:before { + content: "\2212"; +} + +/* line 42, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-cloud:before { + content: "\2601"; +} + +/* line 43, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-envelope:before { + content: "\2709"; +} + +/* line 44, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-pencil:before { + content: "\270f"; +} + +/* line 45, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-glass:before { + content: "\e001"; +} + +/* line 46, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-music:before { + content: "\e002"; +} + +/* line 47, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-search:before { + content: "\e003"; +} + +/* line 48, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-heart:before { + content: "\e005"; +} + +/* line 49, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-star:before { + content: "\e006"; +} + +/* line 50, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-star-empty:before { + content: "\e007"; +} + +/* line 51, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-user:before { + content: "\e008"; +} + +/* line 52, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-film:before { + content: "\e009"; +} + +/* line 53, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-th-large:before { + content: "\e010"; +} + +/* line 54, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-th:before { + content: "\e011"; +} + +/* line 55, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-th-list:before { + content: "\e012"; +} + +/* line 56, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-ok:before { + content: "\e013"; +} + +/* line 57, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-remove:before { + content: "\e014"; +} + +/* line 58, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-zoom-in:before { + content: "\e015"; +} + +/* line 59, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-zoom-out:before { + content: "\e016"; +} + +/* line 60, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-off:before { + content: "\e017"; +} + +/* line 61, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-signal:before { + content: "\e018"; +} + +/* line 62, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-cog:before { + content: "\e019"; +} + +/* line 63, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-trash:before { + content: "\e020"; +} + +/* line 64, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-home:before { + content: "\e021"; +} + +/* line 65, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-file:before { + content: "\e022"; +} + +/* line 66, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-time:before { + content: "\e023"; +} + +/* line 67, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-road:before { + content: "\e024"; +} + +/* line 68, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-download-alt:before { + content: "\e025"; +} + +/* line 69, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-download:before { + content: "\e026"; +} + +/* line 70, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-upload:before { + content: "\e027"; +} + +/* line 71, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-inbox:before { + content: "\e028"; +} + +/* line 72, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-play-circle:before { + content: "\e029"; +} + +/* line 73, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-repeat:before { + content: "\e030"; +} + +/* line 74, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-refresh:before { + content: "\e031"; +} + +/* line 75, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-list-alt:before { + content: "\e032"; +} + +/* line 76, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-lock:before { + content: "\e033"; +} + +/* line 77, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-flag:before { + content: "\e034"; +} + +/* line 78, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-headphones:before { + content: "\e035"; +} + +/* line 79, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-volume-off:before { + content: "\e036"; +} + +/* line 80, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-volume-down:before { + content: "\e037"; +} + +/* line 81, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-volume-up:before { + content: "\e038"; +} + +/* line 82, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-qrcode:before { + content: "\e039"; +} + +/* line 83, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-barcode:before { + content: "\e040"; +} + +/* line 84, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tag:before { + content: "\e041"; +} + +/* line 85, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tags:before { + content: "\e042"; +} + +/* line 86, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-book:before { + content: "\e043"; +} + +/* line 87, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-bookmark:before { + content: "\e044"; +} + +/* line 88, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-print:before { + content: "\e045"; +} + +/* line 89, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-camera:before { + content: "\e046"; +} + +/* line 90, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-font:before { + content: "\e047"; +} + +/* line 91, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-bold:before { + content: "\e048"; +} + +/* line 92, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-italic:before { + content: "\e049"; +} + +/* line 93, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-text-height:before { + content: "\e050"; +} + +/* line 94, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-text-width:before { + content: "\e051"; +} + +/* line 95, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-align-left:before { + content: "\e052"; +} + +/* line 96, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-align-center:before { + content: "\e053"; +} + +/* line 97, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-align-right:before { + content: "\e054"; +} + +/* line 98, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-align-justify:before { + content: "\e055"; +} + +/* line 99, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-list:before { + content: "\e056"; +} + +/* line 100, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-indent-left:before { + content: "\e057"; +} + +/* line 101, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-indent-right:before { + content: "\e058"; +} + +/* line 102, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-facetime-video:before { + content: "\e059"; +} + +/* line 103, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-picture:before { + content: "\e060"; +} + +/* line 104, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-map-marker:before { + content: "\e062"; +} + +/* line 105, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-adjust:before { + content: "\e063"; +} + +/* line 106, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tint:before { + content: "\e064"; +} + +/* line 107, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-edit:before { + content: "\e065"; +} + +/* line 108, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-share:before { + content: "\e066"; +} + +/* line 109, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-check:before { + content: "\e067"; +} + +/* line 110, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-move:before { + content: "\e068"; +} + +/* line 111, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-step-backward:before { + content: "\e069"; +} + +/* line 112, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-fast-backward:before { + content: "\e070"; +} + +/* line 113, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-backward:before { + content: "\e071"; +} + +/* line 114, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-play:before { + content: "\e072"; +} + +/* line 115, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-pause:before { + content: "\e073"; +} + +/* line 116, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-stop:before { + content: "\e074"; +} + +/* line 117, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-forward:before { + content: "\e075"; +} + +/* line 118, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-fast-forward:before { + content: "\e076"; +} + +/* line 119, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-step-forward:before { + content: "\e077"; +} + +/* line 120, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-eject:before { + content: "\e078"; +} + +/* line 121, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-chevron-left:before { + content: "\e079"; +} + +/* line 122, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-chevron-right:before { + content: "\e080"; +} + +/* line 123, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-plus-sign:before { + content: "\e081"; +} + +/* line 124, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-minus-sign:before { + content: "\e082"; +} + +/* line 125, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-remove-sign:before { + content: "\e083"; +} + +/* line 126, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-ok-sign:before { + content: "\e084"; +} + +/* line 127, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-question-sign:before { + content: "\e085"; +} + +/* line 128, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-info-sign:before { + content: "\e086"; +} + +/* line 129, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-screenshot:before { + content: "\e087"; +} + +/* line 130, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-remove-circle:before { + content: "\e088"; +} + +/* line 131, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-ok-circle:before { + content: "\e089"; +} + +/* line 132, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-ban-circle:before { + content: "\e090"; +} + +/* line 133, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-arrow-left:before { + content: "\e091"; +} + +/* line 134, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-arrow-right:before { + content: "\e092"; +} + +/* line 135, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-arrow-up:before { + content: "\e093"; +} + +/* line 136, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-arrow-down:before { + content: "\e094"; +} + +/* line 137, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-share-alt:before { + content: "\e095"; +} + +/* line 138, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-resize-full:before { + content: "\e096"; +} + +/* line 139, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-resize-small:before { + content: "\e097"; +} + +/* line 140, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +/* line 141, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-gift:before { + content: "\e102"; +} + +/* line 142, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-leaf:before { + content: "\e103"; +} + +/* line 143, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-fire:before { + content: "\e104"; +} + +/* line 144, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-eye-open:before { + content: "\e105"; +} + +/* line 145, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-eye-close:before { + content: "\e106"; +} + +/* line 146, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-warning-sign:before { + content: "\e107"; +} + +/* line 147, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-plane:before { + content: "\e108"; +} + +/* line 148, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-calendar:before { + content: "\e109"; +} + +/* line 149, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-random:before { + content: "\e110"; +} + +/* line 150, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-comment:before { + content: "\e111"; +} + +/* line 151, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-magnet:before { + content: "\e112"; +} + +/* line 152, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-chevron-up:before { + content: "\e113"; +} + +/* line 153, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-chevron-down:before { + content: "\e114"; +} + +/* line 154, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-retweet:before { + content: "\e115"; +} + +/* line 155, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +/* line 156, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-folder-close:before { + content: "\e117"; +} + +/* line 157, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-folder-open:before { + content: "\e118"; +} + +/* line 158, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +/* line 159, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +/* line 160, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-hdd:before { + content: "\e121"; +} + +/* line 161, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-bullhorn:before { + content: "\e122"; +} + +/* line 162, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-bell:before { + content: "\e123"; +} + +/* line 163, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-certificate:before { + content: "\e124"; +} + +/* line 164, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +/* line 165, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +/* line 166, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-hand-right:before { + content: "\e127"; +} + +/* line 167, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-hand-left:before { + content: "\e128"; +} + +/* line 168, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-hand-up:before { + content: "\e129"; +} + +/* line 169, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-hand-down:before { + content: "\e130"; +} + +/* line 170, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +/* line 171, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +/* line 172, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +/* line 173, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +/* line 174, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-globe:before { + content: "\e135"; +} + +/* line 175, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-wrench:before { + content: "\e136"; +} + +/* line 176, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tasks:before { + content: "\e137"; +} + +/* line 177, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-filter:before { + content: "\e138"; +} + +/* line 178, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-briefcase:before { + content: "\e139"; +} + +/* line 179, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-fullscreen:before { + content: "\e140"; +} + +/* line 180, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-dashboard:before { + content: "\e141"; +} + +/* line 181, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-paperclip:before { + content: "\e142"; +} + +/* line 182, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-heart-empty:before { + content: "\e143"; +} + +/* line 183, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-link:before { + content: "\e144"; +} + +/* line 184, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-phone:before { + content: "\e145"; +} + +/* line 185, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-pushpin:before { + content: "\e146"; +} + +/* line 186, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-usd:before { + content: "\e148"; +} + +/* line 187, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-gbp:before { + content: "\e149"; +} + +/* line 188, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort:before { + content: "\e150"; +} + +/* line 189, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +/* line 190, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +/* line 191, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +/* line 192, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +/* line 193, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +/* line 194, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +/* line 195, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-unchecked:before { + content: "\e157"; +} + +/* line 196, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-expand:before { + content: "\e158"; +} + +/* line 197, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-collapse-down:before { + content: "\e159"; +} + +/* line 198, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-collapse-up:before { + content: "\e160"; +} + +/* line 199, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-log-in:before { + content: "\e161"; +} + +/* line 200, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-flash:before { + content: "\e162"; +} + +/* line 201, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-log-out:before { + content: "\e163"; +} + +/* line 202, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-new-window:before { + content: "\e164"; +} + +/* line 203, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-record:before { + content: "\e165"; +} + +/* line 204, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-save:before { + content: "\e166"; +} + +/* line 205, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-open:before { + content: "\e167"; +} + +/* line 206, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-saved:before { + content: "\e168"; +} + +/* line 207, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-import:before { + content: "\e169"; +} + +/* line 208, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-export:before { + content: "\e170"; +} + +/* line 209, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-send:before { + content: "\e171"; +} + +/* line 210, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +/* line 211, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +/* line 212, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +/* line 213, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-floppy-save:before { + content: "\e175"; +} + +/* line 214, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-floppy-open:before { + content: "\e176"; +} + +/* line 215, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-credit-card:before { + content: "\e177"; +} + +/* line 216, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-transfer:before { + content: "\e178"; +} + +/* line 217, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-cutlery:before { + content: "\e179"; +} + +/* line 218, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-header:before { + content: "\e180"; +} + +/* line 219, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-compressed:before { + content: "\e181"; +} + +/* line 220, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-earphone:before { + content: "\e182"; +} + +/* line 221, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-phone-alt:before { + content: "\e183"; +} + +/* line 222, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tower:before { + content: "\e184"; +} + +/* line 223, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-stats:before { + content: "\e185"; +} + +/* line 224, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sd-video:before { + content: "\e186"; +} + +/* line 225, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-hd-video:before { + content: "\e187"; +} + +/* line 226, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-subtitles:before { + content: "\e188"; +} + +/* line 227, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +/* line 228, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +/* line 229, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +/* line 230, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +/* line 231, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +/* line 232, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +/* line 233, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-registration-mark:before { + content: "\e195"; +} + +/* line 234, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-cloud-download:before { + content: "\e197"; +} + +/* line 235, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +/* line 236, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +/* line 237, ../sass/bootstrap/_glyphicons.scss */ +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +/* line 11, ../sass/bootstrap/_scaffolding.scss */ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 14, ../sass/bootstrap/_scaffolding.scss */ +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 22, ../sass/bootstrap/_scaffolding.scss */ +html { + font-size: 10px; + -webkit-tap-highlight-color: transparent; +} + +/* line 27, ../sass/bootstrap/_scaffolding.scss */ +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857; + color: #333333; + background-color: #fff; +} + +/* line 36, ../sass/bootstrap/_scaffolding.scss */ +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +/* line 48, ../sass/bootstrap/_scaffolding.scss */ +a { + color: #428bca; + text-decoration: none; +} +/* line 52, ../sass/bootstrap/_scaffolding.scss */ +a:hover, a:focus { + color: #2a6496; + text-decoration: underline; +} +/* line 58, ../sass/bootstrap/_scaffolding.scss */ +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +/* line 69, ../sass/bootstrap/_scaffolding.scss */ +figure { + margin: 0; +} + +/* line 76, ../sass/bootstrap/_scaffolding.scss */ +img { + vertical-align: middle; +} + +/* line 81, ../sass/bootstrap/_scaffolding.scss */ +.img-responsive { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; +} + +/* line 86, ../sass/bootstrap/_scaffolding.scss */ +.img-rounded { + border-radius: 6px; +} + +/* line 93, ../sass/bootstrap/_scaffolding.scss */ +.img-thumbnail { + padding: 4px; + line-height: 1.42857; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + display: inline-block; + width: 100% \9; + max-width: 100%; + height: auto; +} + +/* line 106, ../sass/bootstrap/_scaffolding.scss */ +.img-circle { + border-radius: 50%; +} + +/* line 113, ../sass/bootstrap/_scaffolding.scss */ +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +/* line 125, ../sass/bootstrap/_scaffolding.scss */ +.sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +/* line 141, ../sass/bootstrap/_scaffolding.scss */ +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +/* line 9, ../sass/bootstrap/_type.scss */ +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +/* line 16, ../sass/bootstrap/_type.scss */ +h1 small, +h1 .small, h2 small, +h2 .small, h3 small, +h3 .small, h4 small, +h4 .small, h5 small, +h5 .small, h6 small, +h6 .small, +.h1 small, +.h1 .small, .h2 small, +.h2 .small, .h3 small, +.h3 .small, .h4 small, +.h4 .small, .h5 small, +.h5 .small, .h6 small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777777; +} + +/* line 24, ../sass/bootstrap/_type.scss */ +h1, .h1, +h2, .h2, +h3, .h3 { + margin-top: 20px; + margin-bottom: 10px; +} +/* line 30, ../sass/bootstrap/_type.scss */ +h1 small, +h1 .small, .h1 small, +.h1 .small, +h2 small, +h2 .small, .h2 small, +.h2 .small, +h3 small, +h3 .small, .h3 small, +.h3 .small { + font-size: 65%; +} + +/* line 35, ../sass/bootstrap/_type.scss */ +h4, .h4, +h5, .h5, +h6, .h6 { + margin-top: 10px; + margin-bottom: 10px; +} +/* line 41, ../sass/bootstrap/_type.scss */ +h4 small, +h4 .small, .h4 small, +.h4 .small, +h5 small, +h5 .small, .h5 small, +.h5 .small, +h6 small, +h6 .small, .h6 small, +.h6 .small { + font-size: 75%; +} + +/* line 47, ../sass/bootstrap/_type.scss */ +h1, .h1 { + font-size: 36px; +} + +/* line 48, ../sass/bootstrap/_type.scss */ +h2, .h2 { + font-size: 30px; +} + +/* line 49, ../sass/bootstrap/_type.scss */ +h3, .h3 { + font-size: 24px; +} + +/* line 50, ../sass/bootstrap/_type.scss */ +h4, .h4 { + font-size: 18px; +} + +/* line 51, ../sass/bootstrap/_type.scss */ +h5, .h5 { + font-size: 14px; +} + +/* line 52, ../sass/bootstrap/_type.scss */ +h6, .h6 { + font-size: 12px; +} + +/* line 58, ../sass/bootstrap/_type.scss */ +p { + margin: 0 0 10px; +} + +/* line 62, ../sass/bootstrap/_type.scss */ +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + /* line 62, ../sass/bootstrap/_type.scss */ + .lead { + font-size: 21px; + } +} + +/* line 78, ../sass/bootstrap/_type.scss */ +small, +.small { + font-size: 85%; +} + +/* line 84, ../sass/bootstrap/_type.scss */ +cite { + font-style: normal; +} + +/* line 88, ../sass/bootstrap/_type.scss */ +mark, +.mark { + background-color: #fcf8e3; + padding: .2em; +} + +/* line 95, ../sass/bootstrap/_type.scss */ +.text-left { + text-align: left; +} + +/* line 96, ../sass/bootstrap/_type.scss */ +.text-right { + text-align: right; +} + +/* line 97, ../sass/bootstrap/_type.scss */ +.text-center { + text-align: center; +} + +/* line 98, ../sass/bootstrap/_type.scss */ +.text-justify { + text-align: justify; +} + +/* line 99, ../sass/bootstrap/_type.scss */ +.text-nowrap { + white-space: nowrap; +} + +/* line 102, ../sass/bootstrap/_type.scss */ +.text-lowercase { + text-transform: lowercase; +} + +/* line 103, ../sass/bootstrap/_type.scss */ +.text-uppercase { + text-transform: uppercase; +} + +/* line 104, ../sass/bootstrap/_type.scss */ +.text-capitalize { + text-transform: capitalize; +} + +/* line 107, ../sass/bootstrap/_type.scss */ +.text-muted { + color: #777777; +} + +/* line 5, ../sass/bootstrap/mixins/_text-emphasis.scss */ +.text-primary { + color: #428bca; +} + +/* line 8, ../sass/bootstrap/mixins/_text-emphasis.scss */ +a.text-primary:hover { + color: #3071a9; +} + +/* line 5, ../sass/bootstrap/mixins/_text-emphasis.scss */ +.text-success { + color: #3c763d; +} + +/* line 8, ../sass/bootstrap/mixins/_text-emphasis.scss */ +a.text-success:hover { + color: #2b542c; +} + +/* line 5, ../sass/bootstrap/mixins/_text-emphasis.scss */ +.text-info { + color: #31708f; +} + +/* line 8, ../sass/bootstrap/mixins/_text-emphasis.scss */ +a.text-info:hover { + color: #245269; +} + +/* line 5, ../sass/bootstrap/mixins/_text-emphasis.scss */ +.text-warning { + color: #8a6d3b; +} + +/* line 8, ../sass/bootstrap/mixins/_text-emphasis.scss */ +a.text-warning:hover { + color: #66512c; +} + +/* line 5, ../sass/bootstrap/mixins/_text-emphasis.scss */ +.text-danger { + color: #a94442; +} + +/* line 8, ../sass/bootstrap/mixins/_text-emphasis.scss */ +a.text-danger:hover { + color: #843534; +} + +/* line 124, ../sass/bootstrap/_type.scss */ +.bg-primary { + color: #fff; +} + +/* line 5, ../sass/bootstrap/mixins/_background-variant.scss */ +.bg-primary { + background-color: #428bca; +} + +/* line 8, ../sass/bootstrap/mixins/_background-variant.scss */ +a.bg-primary:hover { + background-color: #3071a9; +} + +/* line 5, ../sass/bootstrap/mixins/_background-variant.scss */ +.bg-success { + background-color: #dff0d8; +} + +/* line 8, ../sass/bootstrap/mixins/_background-variant.scss */ +a.bg-success:hover { + background-color: #c1e2b3; +} + +/* line 5, ../sass/bootstrap/mixins/_background-variant.scss */ +.bg-info { + background-color: #d9edf7; +} + +/* line 8, ../sass/bootstrap/mixins/_background-variant.scss */ +a.bg-info:hover { + background-color: #afd9ee; +} + +/* line 5, ../sass/bootstrap/mixins/_background-variant.scss */ +.bg-warning { + background-color: #fcf8e3; +} + +/* line 8, ../sass/bootstrap/mixins/_background-variant.scss */ +a.bg-warning:hover { + background-color: #f7ecb5; +} + +/* line 5, ../sass/bootstrap/mixins/_background-variant.scss */ +.bg-danger { + background-color: #f2dede; +} + +/* line 8, ../sass/bootstrap/mixins/_background-variant.scss */ +a.bg-danger:hover { + background-color: #e4b9b9; +} + +/* line 143, ../sass/bootstrap/_type.scss */ +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +/* line 154, ../sass/bootstrap/_type.scss */ +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +/* line 158, ../sass/bootstrap/_type.scss */ +ul ul, +ul ol, +ol ul, +ol ol { + margin-bottom: 0; +} + +/* line 167, ../sass/bootstrap/_type.scss */ +.list-unstyled, .list-inline { + padding-left: 0; + list-style: none; +} + +/* line 173, ../sass/bootstrap/_type.scss */ +.list-inline { + margin-left: -5px; +} +/* line 177, ../sass/bootstrap/_type.scss */ +.list-inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +/* line 185, ../sass/bootstrap/_type.scss */ +dl { + margin-top: 0; + margin-bottom: 20px; +} + +/* line 189, ../sass/bootstrap/_type.scss */ +dt, +dd { + line-height: 1.42857; +} + +/* line 193, ../sass/bootstrap/_type.scss */ +dt { + font-weight: bold; +} + +/* line 196, ../sass/bootstrap/_type.scss */ +dd { + margin-left: 0; +} + +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.dl-horizontal dd:before, .dl-horizontal dd:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.dl-horizontal dd:after { + clear: both; +} +@media (min-width: 768px) { + /* line 211, ../sass/bootstrap/_type.scss */ + .dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + /* line 218, ../sass/bootstrap/_type.scss */ + .dl-horizontal dd { + margin-left: 180px; + } +} + +/* line 229, ../sass/bootstrap/_type.scss */ +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777777; +} + +/* line 235, ../sass/bootstrap/_type.scss */ +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +/* line 241, ../sass/bootstrap/_type.scss */ +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eeeeee; +} +/* line 250, ../sass/bootstrap/_type.scss */ +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +/* line 257, ../sass/bootstrap/_type.scss */ +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857; + color: #777777; +} +/* line 265, ../sass/bootstrap/_type.scss */ +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} + +/* line 274, ../sass/bootstrap/_type.scss */ +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; + text-align: right; +} +/* line 286, ../sass/bootstrap/_type.scss */ +.blockquote-reverse footer:before, +.blockquote-reverse small:before, +.blockquote-reverse .small:before, +blockquote.pull-right footer:before, +blockquote.pull-right small:before, +blockquote.pull-right .small:before { + content: ''; +} +/* line 287, ../sass/bootstrap/_type.scss */ +.blockquote-reverse footer:after, +.blockquote-reverse small:after, +.blockquote-reverse .small:after, +blockquote.pull-right footer:after, +blockquote.pull-right small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} + +/* line 294, ../sass/bootstrap/_type.scss */ +blockquote:before, +blockquote:after { + content: ""; +} + +/* line 300, ../sass/bootstrap/_type.scss */ +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857; +} + +/* line 7, ../sass/bootstrap/_code.scss */ +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +/* line 15, ../sass/bootstrap/_code.scss */ +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} + +/* line 24, ../sass/bootstrap/_code.scss */ +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +/* line 32, ../sass/bootstrap/_code.scss */ +kbd kbd { + padding: 0; + font-size: 100%; + box-shadow: none; +} + +/* line 40, ../sass/bootstrap/_code.scss */ +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857; + word-break: break-all; + word-wrap: break-word; + color: #333333; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +/* line 54, ../sass/bootstrap/_code.scss */ +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} + +/* line 65, ../sass/bootstrap/_code.scss */ +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +/* line 10, ../sass/bootstrap/_grid.scss */ +.container { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.container:before, .container:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.container:after { + clear: both; +} +@media (min-width: 768px) { + /* line 10, ../sass/bootstrap/_grid.scss */ + .container { + width: 750px; + } +} +@media (min-width: 992px) { + /* line 10, ../sass/bootstrap/_grid.scss */ + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + /* line 10, ../sass/bootstrap/_grid.scss */ + .container { + width: 1170px; + } +} + +/* line 30, ../sass/bootstrap/_grid.scss */ +.container-fluid { + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.container-fluid:before, .container-fluid:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.container-fluid:after { + clear: both; +} + +/* line 39, ../sass/bootstrap/_grid.scss */ +.row { + margin-left: -15px; + margin-right: -15px; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.row:before, .row:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.row:after { + clear: both; +} + +/* line 11, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-left: 15px; + padding-right: 15px; +} + +/* line 27, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-1 { + width: 8.33333%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-2 { + width: 16.66667%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-3 { + width: 25%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-4 { + width: 33.33333%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-5 { + width: 41.66667%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-6 { + width: 50%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-7 { + width: 58.33333%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-8 { + width: 66.66667%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-9 { + width: 75%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-10 { + width: 83.33333%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-11 { + width: 91.66667%; +} + +/* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-12 { + width: 100%; +} + +/* line 55, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-0 { + right: auto; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-1 { + right: 8.33333%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-2 { + right: 16.66667%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-3 { + right: 25%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-4 { + right: 33.33333%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-5 { + right: 41.66667%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-6 { + right: 50%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-7 { + right: 58.33333%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-8 { + right: 66.66667%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-9 { + right: 75%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-10 { + right: 83.33333%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-11 { + right: 91.66667%; +} + +/* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-pull-12 { + right: 100%; +} + +/* line 45, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-0 { + left: auto; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-1 { + left: 8.33333%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-2 { + left: 16.66667%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-3 { + left: 25%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-4 { + left: 33.33333%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-5 { + left: 41.66667%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-6 { + left: 50%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-7 { + left: 58.33333%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-8 { + left: 66.66667%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-9 { + left: 75%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-10 { + left: 83.33333%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-11 { + left: 91.66667%; +} + +/* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-push-12 { + left: 100%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-0 { + margin-left: 0%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-1 { + margin-left: 8.33333%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-2 { + margin-left: 16.66667%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-3 { + margin-left: 25%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-4 { + margin-left: 33.33333%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-5 { + margin-left: 41.66667%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-6 { + margin-left: 50%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-7 { + margin-left: 58.33333%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-8 { + margin-left: 66.66667%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-9 { + margin-left: 75%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-10 { + margin-left: 83.33333%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-11 { + margin-left: 91.66667%; +} + +/* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ +.col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 768px) { + /* line 27, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-1 { + width: 8.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-2 { + width: 16.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-3 { + width: 25%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-4 { + width: 33.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-5 { + width: 41.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-6 { + width: 50%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-7 { + width: 58.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-8 { + width: 66.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-9 { + width: 75%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-10 { + width: 83.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-11 { + width: 91.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-12 { + width: 100%; + } + + /* line 55, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-0 { + right: auto; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-1 { + right: 8.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-2 { + right: 16.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-3 { + right: 25%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-4 { + right: 33.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-5 { + right: 41.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-6 { + right: 50%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-7 { + right: 58.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-8 { + right: 66.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-9 { + right: 75%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-10 { + right: 83.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-11 { + right: 91.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-pull-12 { + right: 100%; + } + + /* line 45, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-0 { + left: auto; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-1 { + left: 8.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-2 { + left: 16.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-3 { + left: 25%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-4 { + left: 33.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-5 { + left: 41.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-6 { + left: 50%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-7 { + left: 58.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-8 { + left: 66.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-9 { + left: 75%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-10 { + left: 83.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-11 { + left: 91.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-push-12 { + left: 100%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-0 { + margin-left: 0%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-1 { + margin-left: 8.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-2 { + margin-left: 16.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-3 { + margin-left: 25%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-4 { + margin-left: 33.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-5 { + margin-left: 41.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-6 { + margin-left: 50%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-7 { + margin-left: 58.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-8 { + margin-left: 66.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-9 { + margin-left: 75%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-10 { + margin-left: 83.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-11 { + margin-left: 91.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-sm-offset-12 { + margin-left: 100%; + } +} +@media (min-width: 992px) { + /* line 27, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-1 { + width: 8.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-2 { + width: 16.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-3 { + width: 25%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-4 { + width: 33.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-5 { + width: 41.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-6 { + width: 50%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-7 { + width: 58.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-8 { + width: 66.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-9 { + width: 75%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-10 { + width: 83.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-11 { + width: 91.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-12 { + width: 100%; + } + + /* line 55, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-0 { + right: auto; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-1 { + right: 8.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-2 { + right: 16.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-3 { + right: 25%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-4 { + right: 33.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-5 { + right: 41.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-6 { + right: 50%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-7 { + right: 58.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-8 { + right: 66.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-9 { + right: 75%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-10 { + right: 83.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-11 { + right: 91.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-pull-12 { + right: 100%; + } + + /* line 45, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-0 { + left: auto; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-1 { + left: 8.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-2 { + left: 16.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-3 { + left: 25%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-4 { + left: 33.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-5 { + left: 41.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-6 { + left: 50%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-7 { + left: 58.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-8 { + left: 66.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-9 { + left: 75%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-10 { + left: 83.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-11 { + left: 91.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-push-12 { + left: 100%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-0 { + margin-left: 0%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-1 { + margin-left: 8.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-2 { + margin-left: 16.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-3 { + margin-left: 25%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-4 { + margin-left: 33.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-5 { + margin-left: 41.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-6 { + margin-left: 50%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-7 { + margin-left: 58.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-8 { + margin-left: 66.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-9 { + margin-left: 75%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-10 { + margin-left: 83.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-11 { + margin-left: 91.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-md-offset-12 { + margin-left: 100%; + } +} +@media (min-width: 1200px) { + /* line 27, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-1 { + width: 8.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-2 { + width: 16.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-3 { + width: 25%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-4 { + width: 33.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-5 { + width: 41.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-6 { + width: 50%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-7 { + width: 58.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-8 { + width: 66.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-9 { + width: 75%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-10 { + width: 83.33333%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-11 { + width: 91.66667%; + } + + /* line 35, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-12 { + width: 100%; + } + + /* line 55, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-0 { + right: auto; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-1 { + right: 8.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-2 { + right: 16.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-3 { + right: 25%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-4 { + right: 33.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-5 { + right: 41.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-6 { + right: 50%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-7 { + right: 58.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-8 { + right: 66.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-9 { + right: 75%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-10 { + right: 83.33333%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-11 { + right: 91.66667%; + } + + /* line 50, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-pull-12 { + right: 100%; + } + + /* line 45, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-0 { + left: auto; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-1 { + left: 8.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-2 { + left: 16.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-3 { + left: 25%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-4 { + left: 33.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-5 { + left: 41.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-6 { + left: 50%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-7 { + left: 58.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-8 { + left: 66.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-9 { + left: 75%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-10 { + left: 83.33333%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-11 { + left: 91.66667%; + } + + /* line 40, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-push-12 { + left: 100%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-0 { + margin-left: 0%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-1 { + margin-left: 8.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-2 { + margin-left: 16.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-3 { + margin-left: 25%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-4 { + margin-left: 33.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-5 { + margin-left: 41.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-6 { + margin-left: 50%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-7 { + margin-left: 58.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-8 { + margin-left: 66.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-9 { + margin-left: 75%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-10 { + margin-left: 83.33333%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-11 { + margin-left: 91.66667%; + } + + /* line 60, ../sass/bootstrap/mixins/_grid-framework.scss */ + .col-lg-offset-12 { + margin-left: 100%; + } +} +/* line 6, ../sass/bootstrap/_tables.scss */ +table { + background-color: transparent; +} + +/* line 9, ../sass/bootstrap/_tables.scss */ +th { + text-align: left; +} + +/* line 16, ../sass/bootstrap/_tables.scss */ +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +/* line 25, ../sass/bootstrap/_tables.scss */ +.table > thead > tr > th, +.table > thead > tr > td, +.table > tbody > tr > th, +.table > tbody > tr > td, +.table > tfoot > tr > th, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857; + vertical-align: top; + border-top: 1px solid #ddd; +} +/* line 35, ../sass/bootstrap/_tables.scss */ +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +/* line 44, ../sass/bootstrap/_tables.scss */ +.table > caption + thead > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > th, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +/* line 51, ../sass/bootstrap/_tables.scss */ +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +/* line 56, ../sass/bootstrap/_tables.scss */ +.table .table { + background-color: #fff; +} + +/* line 69, ../sass/bootstrap/_tables.scss */ +.table-condensed > thead > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > th, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > th, +.table-condensed > tfoot > tr > td { + padding: 5px; +} + +/* line 82, ../sass/bootstrap/_tables.scss */ +.table-bordered { + border: 1px solid #ddd; +} +/* line 88, ../sass/bootstrap/_tables.scss */ +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > th, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > th, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +/* line 95, ../sass/bootstrap/_tables.scss */ +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +/* line 109, ../sass/bootstrap/_tables.scss */ +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +/* line 123, ../sass/bootstrap/_tables.scss */ +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +/* line 135, ../sass/bootstrap/_tables.scss */ +table col[class*="col-"] { + position: static; + float: none; + display: table-column; +} + +/* line 143, ../sass/bootstrap/_tables.scss */ +table td[class*="col-"], +table th[class*="col-"] { + position: static; + float: none; + display: table-cell; +} + +/* line 9, ../sass/bootstrap/mixins/_table-row.scss */ +.table > thead > tr > td.active, +.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th, +.table > tbody > tr > td.active, +.table > tbody > tr > th.active, +.table > tbody > tr.active > td, +.table > tbody > tr.active > th, +.table > tfoot > tr > td.active, +.table > tfoot > tr > th.active, +.table > tfoot > tr.active > td, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +/* line 20, ../sass/bootstrap/mixins/_table-row.scss */ +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr:hover > .active, .table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} + +/* line 9, ../sass/bootstrap/mixins/_table-row.scss */ +.table > thead > tr > td.success, +.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th, +.table > tbody > tr > td.success, +.table > tbody > tr > th.success, +.table > tbody > tr.success > td, +.table > tbody > tr.success > th, +.table > tfoot > tr > td.success, +.table > tfoot > tr > th.success, +.table > tfoot > tr.success > td, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} + +/* line 20, ../sass/bootstrap/mixins/_table-row.scss */ +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr:hover > .success, .table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} + +/* line 9, ../sass/bootstrap/mixins/_table-row.scss */ +.table > thead > tr > td.info, +.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th, +.table > tbody > tr > td.info, +.table > tbody > tr > th.info, +.table > tbody > tr.info > td, +.table > tbody > tr.info > th, +.table > tfoot > tr > td.info, +.table > tfoot > tr > th.info, +.table > tfoot > tr.info > td, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} + +/* line 20, ../sass/bootstrap/mixins/_table-row.scss */ +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr:hover > .info, .table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} + +/* line 9, ../sass/bootstrap/mixins/_table-row.scss */ +.table > thead > tr > td.warning, +.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th, +.table > tbody > tr > td.warning, +.table > tbody > tr > th.warning, +.table > tbody > tr.warning > td, +.table > tbody > tr.warning > th, +.table > tfoot > tr > td.warning, +.table > tfoot > tr > th.warning, +.table > tfoot > tr.warning > td, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} + +/* line 20, ../sass/bootstrap/mixins/_table-row.scss */ +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr:hover > .warning, .table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} + +/* line 9, ../sass/bootstrap/mixins/_table-row.scss */ +.table > thead > tr > td.danger, +.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th, +.table > tbody > tr > td.danger, +.table > tbody > tr > th.danger, +.table > tbody > tr.danger > td, +.table > tbody > tr.danger > th, +.table > tfoot > tr > td.danger, +.table > tfoot > tr > th.danger, +.table > tfoot > tr.danger > td, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} + +/* line 20, ../sass/bootstrap/mixins/_table-row.scss */ +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} + +@media screen and (max-width: 767px) { + /* line 171, ../sass/bootstrap/_tables.scss */ + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + -webkit-overflow-scrolling: touch; + } + /* line 182, ../sass/bootstrap/_tables.scss */ + .table-responsive > .table { + margin-bottom: 0; + } + /* line 190, ../sass/bootstrap/_tables.scss */ + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + /* line 199, ../sass/bootstrap/_tables.scss */ + .table-responsive > .table-bordered { + border: 0; + } + /* line 207, ../sass/bootstrap/_tables.scss */ + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + /* line 211, ../sass/bootstrap/_tables.scss */ + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + /* line 224, ../sass/bootstrap/_tables.scss */ + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +/* line 10, ../sass/bootstrap/_forms.scss */ +fieldset { + padding: 0; + margin: 0; + border: 0; + min-width: 0; +} + +/* line 20, ../sass/bootstrap/_forms.scss */ +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +/* line 32, ../sass/bootstrap/_forms.scss */ +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} + +/* line 47, ../sass/bootstrap/_forms.scss */ +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 52, ../sass/bootstrap/_forms.scss */ +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} + +/* line 60, ../sass/bootstrap/_forms.scss */ +input[type="file"] { + display: block; +} + +/* line 65, ../sass/bootstrap/_forms.scss */ +input[type="range"] { + display: block; + width: 100%; +} + +/* line 71, ../sass/bootstrap/_forms.scss */ +select[multiple], +select[size] { + height: auto; +} + +/* line 77, ../sass/bootstrap/_forms.scss */ +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +/* line 84, ../sass/bootstrap/_forms.scss */ +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857; + color: #555555; +} + +/* line 115, ../sass/bootstrap/_forms.scss */ +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857; + color: #555555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} +/* line 53, ../sass/bootstrap/mixins/_forms.scss */ +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} +/* line 102, ../sass/bootstrap/mixins/_vendor-prefixes.scss */ +.form-control::-moz-placeholder { + color: #777777; + opacity: 1; +} +/* line 104, ../sass/bootstrap/mixins/_vendor-prefixes.scss */ +.form-control:-ms-input-placeholder { + color: #777777; +} +/* line 105, ../sass/bootstrap/mixins/_vendor-prefixes.scss */ +.form-control::-webkit-input-placeholder { + color: #777777; +} +/* line 141, ../sass/bootstrap/_forms.scss */ +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; + opacity: 1; +} + +/* line 153, ../sass/bootstrap/_forms.scss */ +textarea.form-control { + height: auto; +} + +/* line 165, ../sass/bootstrap/_forms.scss */ +input[type="search"] { + -webkit-appearance: none; +} + +/* line 178, ../sass/bootstrap/_forms.scss */ +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 34px; + line-height: 1.42857 \0; +} +/* line 186, ../sass/bootstrap/_forms.scss */ +input[type="date"].input-sm, .form-horizontal .form-group-sm input[type="date"].form-control, .input-group-sm > input[type="date"].form-control, +.input-group-sm > input[type="date"].input-group-addon, +.input-group-sm > .input-group-btn > input[type="date"].btn, +input[type="time"].input-sm, +.form-horizontal .form-group-sm input[type="time"].form-control, +.input-group-sm > input[type="time"].form-control, +.input-group-sm > input[type="time"].input-group-addon, +.input-group-sm > .input-group-btn > input[type="time"].btn, +input[type="datetime-local"].input-sm, +.form-horizontal .form-group-sm input[type="datetime-local"].form-control, +.input-group-sm > input[type="datetime-local"].form-control, +.input-group-sm > input[type="datetime-local"].input-group-addon, +.input-group-sm > .input-group-btn > input[type="datetime-local"].btn, +input[type="month"].input-sm, +.form-horizontal .form-group-sm input[type="month"].form-control, +.input-group-sm > input[type="month"].form-control, +.input-group-sm > input[type="month"].input-group-addon, +.input-group-sm > .input-group-btn > input[type="month"].btn { + line-height: 30px; +} +/* line 189, ../sass/bootstrap/_forms.scss */ +input[type="date"].input-lg, .form-horizontal .form-group-lg input[type="date"].form-control, .input-group-lg > input[type="date"].form-control, +.input-group-lg > input[type="date"].input-group-addon, +.input-group-lg > .input-group-btn > input[type="date"].btn, +input[type="time"].input-lg, +.form-horizontal .form-group-lg input[type="time"].form-control, +.input-group-lg > input[type="time"].form-control, +.input-group-lg > input[type="time"].input-group-addon, +.input-group-lg > .input-group-btn > input[type="time"].btn, +input[type="datetime-local"].input-lg, +.form-horizontal .form-group-lg input[type="datetime-local"].form-control, +.input-group-lg > input[type="datetime-local"].form-control, +.input-group-lg > input[type="datetime-local"].input-group-addon, +.input-group-lg > .input-group-btn > input[type="datetime-local"].btn, +input[type="month"].input-lg, +.form-horizontal .form-group-lg input[type="month"].form-control, +.input-group-lg > input[type="month"].form-control, +.input-group-lg > input[type="month"].input-group-addon, +.input-group-lg > .input-group-btn > input[type="month"].btn { + line-height: 46px; +} + +/* line 200, ../sass/bootstrap/_forms.scss */ +.form-group { + margin-bottom: 15px; +} + +/* line 209, ../sass/bootstrap/_forms.scss */ +.radio, +.checkbox { + position: relative; + display: block; + min-height: 20px; + margin-top: 10px; + margin-bottom: 10px; +} +/* line 217, ../sass/bootstrap/_forms.scss */ +.radio label, +.checkbox label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +/* line 224, ../sass/bootstrap/_forms.scss */ +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} + +/* line 233, ../sass/bootstrap/_forms.scss */ +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +/* line 239, ../sass/bootstrap/_forms.scss */ +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +/* line 248, ../sass/bootstrap/_forms.scss */ +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +/* line 260, ../sass/bootstrap/_forms.scss */ +input[type="radio"][disabled], input[type="radio"].disabled, fieldset[disabled] input[type="radio"], +input[type="checkbox"][disabled], +input[type="checkbox"].disabled, fieldset[disabled] +input[type="checkbox"] { + cursor: not-allowed; +} + +/* line 269, ../sass/bootstrap/_forms.scss */ +.radio-inline.disabled, fieldset[disabled] .radio-inline, +.checkbox-inline.disabled, fieldset[disabled] +.checkbox-inline { + cursor: not-allowed; +} + +/* line 279, ../sass/bootstrap/_forms.scss */ +.radio.disabled label, fieldset[disabled] .radio label, +.checkbox.disabled label, fieldset[disabled] +.checkbox label { + cursor: not-allowed; +} + +/* line 291, ../sass/bootstrap/_forms.scss */ +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +/* line 298, ../sass/bootstrap/_forms.scss */ +.form-control-static.input-lg, .form-horizontal .form-group-lg .form-control-static.form-control, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .form-horizontal .form-group-sm .form-control-static.form-control, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn { + padding-left: 0; + padding-right: 0; +} + +/* line 67, ../sass/bootstrap/mixins/_forms.scss */ +.input-sm, .form-horizontal .form-group-sm .form-control, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +/* line 75, ../sass/bootstrap/mixins/_forms.scss */ +select.input-sm, .form-horizontal .form-group-sm select.form-control, .input-group-sm > select.form-control, +.input-group-sm > select.input-group-addon, +.input-group-sm > .input-group-btn > select.btn { + height: 30px; + line-height: 30px; +} + +/* line 80, ../sass/bootstrap/mixins/_forms.scss */ +textarea.input-sm, .form-horizontal .form-group-sm textarea.form-control, .input-group-sm > textarea.form-control, +.input-group-sm > textarea.input-group-addon, +.input-group-sm > .input-group-btn > textarea.btn, +select[multiple].input-sm, +.form-horizontal .form-group-sm select[multiple].form-control, +.input-group-sm > select[multiple].form-control, +.input-group-sm > select[multiple].input-group-addon, +.input-group-sm > .input-group-btn > select[multiple].btn { + height: auto; +} + +/* line 67, ../sass/bootstrap/mixins/_forms.scss */ +.input-lg, .form-horizontal .form-group-lg .form-control, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +/* line 75, ../sass/bootstrap/mixins/_forms.scss */ +select.input-lg, .form-horizontal .form-group-lg select.form-control, .input-group-lg > select.form-control, +.input-group-lg > select.input-group-addon, +.input-group-lg > .input-group-btn > select.btn { + height: 46px; + line-height: 46px; +} + +/* line 80, ../sass/bootstrap/mixins/_forms.scss */ +textarea.input-lg, .form-horizontal .form-group-lg textarea.form-control, .input-group-lg > textarea.form-control, +.input-group-lg > textarea.input-group-addon, +.input-group-lg > .input-group-btn > textarea.btn, +select[multiple].input-lg, +.form-horizontal .form-group-lg select[multiple].form-control, +.input-group-lg > select[multiple].form-control, +.input-group-lg > select[multiple].input-group-addon, +.input-group-lg > .input-group-btn > select[multiple].btn { + height: auto; +} + +/* line 320, ../sass/bootstrap/_forms.scss */ +.has-feedback { + position: relative; +} +/* line 325, ../sass/bootstrap/_forms.scss */ +.has-feedback .form-control { + padding-right: 42.5px; +} + +/* line 330, ../sass/bootstrap/_forms.scss */ +.form-control-feedback { + position: absolute; + top: 25px; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; +} + +/* line 341, ../sass/bootstrap/_forms.scss */ +.input-lg + .form-control-feedback, .form-horizontal .form-group-lg .form-control + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback, +.input-group-lg > .input-group-addon + .form-control-feedback, +.input-group-lg > .input-group-btn > .btn + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} + +/* line 346, ../sass/bootstrap/_forms.scss */ +.input-sm + .form-control-feedback, .form-horizontal .form-group-sm .form-control + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback, +.input-group-sm > .input-group-addon + .form-control-feedback, +.input-group-sm > .input-group-btn > .btn + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} + +/* line 8, ../sass/bootstrap/mixins/_forms.scss */ +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #3c763d; +} +/* line 17, ../sass/bootstrap/mixins/_forms.scss */ +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +/* line 20, ../sass/bootstrap/mixins/_forms.scss */ +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +/* line 27, ../sass/bootstrap/mixins/_forms.scss */ +.has-success .input-group-addon { + color: #3c763d; + border-color: #3c763d; + background-color: #dff0d8; +} +/* line 33, ../sass/bootstrap/mixins/_forms.scss */ +.has-success .form-control-feedback { + color: #3c763d; +} + +/* line 8, ../sass/bootstrap/mixins/_forms.scss */ +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #8a6d3b; +} +/* line 17, ../sass/bootstrap/mixins/_forms.scss */ +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +/* line 20, ../sass/bootstrap/mixins/_forms.scss */ +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +/* line 27, ../sass/bootstrap/mixins/_forms.scss */ +.has-warning .input-group-addon { + color: #8a6d3b; + border-color: #8a6d3b; + background-color: #fcf8e3; +} +/* line 33, ../sass/bootstrap/mixins/_forms.scss */ +.has-warning .form-control-feedback { + color: #8a6d3b; +} + +/* line 8, ../sass/bootstrap/mixins/_forms.scss */ +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #a94442; +} +/* line 17, ../sass/bootstrap/mixins/_forms.scss */ +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +/* line 20, ../sass/bootstrap/mixins/_forms.scss */ +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +/* line 27, ../sass/bootstrap/mixins/_forms.scss */ +.has-error .input-group-addon { + color: #a94442; + border-color: #a94442; + background-color: #f2dede; +} +/* line 33, ../sass/bootstrap/mixins/_forms.scss */ +.has-error .form-control-feedback { + color: #a94442; +} + +/* line 365, ../sass/bootstrap/_forms.scss */ +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} + +/* line 375, ../sass/bootstrap/_forms.scss */ +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + /* line 400, ../sass/bootstrap/_forms.scss */ + .form-inline .form-group, .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + /* line 407, ../sass/bootstrap/_forms.scss */ + .form-inline .form-control, .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + /* line 413, ../sass/bootstrap/_forms.scss */ + .form-inline .input-group, .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + /* line 417, ../sass/bootstrap/_forms.scss */ + .form-inline .input-group .input-group-addon, .navbar-form .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .navbar-form .input-group .input-group-btn, + .form-inline .input-group .form-control, + .navbar-form .input-group .form-control { + width: auto; + } + /* line 425, ../sass/bootstrap/_forms.scss */ + .form-inline .input-group > .form-control, .navbar-form .input-group > .form-control { + width: 100%; + } + /* line 429, ../sass/bootstrap/_forms.scss */ + .form-inline .control-label, .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + /* line 437, ../sass/bootstrap/_forms.scss */ + .form-inline .radio, .navbar-form .radio, + .form-inline .checkbox, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + /* line 444, ../sass/bootstrap/_forms.scss */ + .form-inline .radio label, .navbar-form .radio label, + .form-inline .checkbox label, + .navbar-form .checkbox label { + padding-left: 0; + } + /* line 448, ../sass/bootstrap/_forms.scss */ + .form-inline .radio input[type="radio"], .navbar-form .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + /* line 458, ../sass/bootstrap/_forms.scss */ + .form-inline .has-feedback .form-control-feedback, .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} + +/* line 475, ../sass/bootstrap/_forms.scss */ +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + margin-top: 0; + margin-bottom: 0; + padding-top: 7px; +} +/* line 485, ../sass/bootstrap/_forms.scss */ +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +/* line 491, ../sass/bootstrap/_forms.scss */ +.form-horizontal .form-group { + margin-left: -15px; + margin-right: -15px; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.form-horizontal .form-group:before, .form-horizontal .form-group:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.form-horizontal .form-group:after { + clear: both; +} +@media (min-width: 768px) { + /* line 498, ../sass/bootstrap/_forms.scss */ + .form-horizontal .control-label { + text-align: right; + margin-bottom: 0; + padding-top: 7px; + } +} +/* line 509, ../sass/bootstrap/_forms.scss */ +.form-horizontal .has-feedback .form-control-feedback { + top: 0; + right: 15px; +} +@media (min-width: 768px) { + /* line 520, ../sass/bootstrap/_forms.scss */ + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + /* line 530, ../sass/bootstrap/_forms.scss */ + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} + +/* line 9, ../sass/bootstrap/_buttons.scss */ +.btn { + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +/* line 25, ../sass/bootstrap/_buttons.scss */ +.btn:focus, .btn:active:focus, .btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +/* line 30, ../sass/bootstrap/_buttons.scss */ +.btn:hover, .btn:focus { + color: #333; + text-decoration: none; +} +/* line 36, ../sass/bootstrap/_buttons.scss */ +.btn:active, .btn.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +/* line 43, ../sass/bootstrap/_buttons.scss */ +.btn.disabled, .btn[disabled], fieldset[disabled] .btn { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +/* line 57, ../sass/bootstrap/_buttons.scss */ +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +/* line 11, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +/* line 20, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-default:active, .btn-default.active, .open > .btn-default.dropdown-toggle { + background-image: none; +} +/* line 28, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +/* line 38, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-default .badge { + color: #fff; + background-color: #333; +} + +/* line 60, ../sass/bootstrap/_buttons.scss */ +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd; +} +/* line 11, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #3071a9; + border-color: #285e8e; +} +/* line 20, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-primary:active, .btn-primary.active, .open > .btn-primary.dropdown-toggle { + background-image: none; +} +/* line 28, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} +/* line 38, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-primary .badge { + color: #428bca; + background-color: #fff; +} + +/* line 64, ../sass/bootstrap/_buttons.scss */ +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +/* line 11, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +/* line 20, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-success:active, .btn-success.active, .open > .btn-success.dropdown-toggle { + background-image: none; +} +/* line 28, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +/* line 38, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} + +/* line 68, ../sass/bootstrap/_buttons.scss */ +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +/* line 11, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +/* line 20, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-info:active, .btn-info.active, .open > .btn-info.dropdown-toggle { + background-image: none; +} +/* line 28, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +/* line 38, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} + +/* line 72, ../sass/bootstrap/_buttons.scss */ +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +/* line 11, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +/* line 20, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-warning:active, .btn-warning.active, .open > .btn-warning.dropdown-toggle { + background-image: none; +} +/* line 28, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +/* line 38, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} + +/* line 76, ../sass/bootstrap/_buttons.scss */ +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +/* line 11, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +/* line 20, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-danger:active, .btn-danger.active, .open > .btn-danger.dropdown-toggle { + background-image: none; +} +/* line 28, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +/* line 38, ../sass/bootstrap/mixins/_buttons.scss */ +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} + +/* line 85, ../sass/bootstrap/_buttons.scss */ +.btn-link { + color: #428bca; + font-weight: normal; + cursor: pointer; + border-radius: 0; +} +/* line 91, ../sass/bootstrap/_buttons.scss */ +.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 98, ../sass/bootstrap/_buttons.scss */ +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent; +} +/* line 104, ../sass/bootstrap/_buttons.scss */ +.btn-link:hover, .btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} +/* line 112, ../sass/bootstrap/_buttons.scss */ +.btn-link[disabled]:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:hover, fieldset[disabled] .btn-link:focus { + color: #777777; + text-decoration: none; +} + +/* line 124, ../sass/bootstrap/_buttons.scss */ +.btn-lg, .btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +/* line 128, ../sass/bootstrap/_buttons.scss */ +.btn-sm, .btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +/* line 132, ../sass/bootstrap/_buttons.scss */ +.btn-xs, .btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +/* line 140, ../sass/bootstrap/_buttons.scss */ +.btn-block { + display: block; + width: 100%; +} + +/* line 146, ../sass/bootstrap/_buttons.scss */ +.btn-block + .btn-block { + margin-top: 5px; +} + +/* line 154, ../sass/bootstrap/_buttons.scss */ +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +/* line 10, ../sass/bootstrap/_component-animations.scss */ +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +/* line 13, ../sass/bootstrap/_component-animations.scss */ +.fade.in { + opacity: 1; +} + +/* line 18, ../sass/bootstrap/_component-animations.scss */ +.collapse { + display: none; +} +/* line 21, ../sass/bootstrap/_component-animations.scss */ +.collapse.in { + display: block; +} + +/* line 26, ../sass/bootstrap/_component-animations.scss */ +tr.collapse.in { + display: table-row; +} + +/* line 28, ../sass/bootstrap/_component-animations.scss */ +tbody.collapse.in { + display: table-row-group; +} + +/* line 30, ../sass/bootstrap/_component-animations.scss */ +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +/* line 7, ../sass/bootstrap/_dropdowns.scss */ +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} + +/* line 19, ../sass/bootstrap/_dropdowns.scss */ +.dropdown { + position: relative; +} + +/* line 24, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-toggle:focus { + outline: 0; +} + +/* line 29, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + font-size: 14px; + text-align: left; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} +/* line 52, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +/* line 58, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +/* line 63, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857; + color: #333333; + white-space: nowrap; +} + +/* line 76, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + text-decoration: none; + color: #262626; + background-color: #f5f5f5; +} + +/* line 86, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + outline: 0; + background-color: #428bca; +} + +/* line 101, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #777777; +} + +/* line 109, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: not-allowed; +} + +/* line 122, ../sass/bootstrap/_dropdowns.scss */ +.open > .dropdown-menu { + display: block; +} +/* line 127, ../sass/bootstrap/_dropdowns.scss */ +.open > a { + outline: 0; +} + +/* line 136, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu-right { + left: auto; + right: 0; +} + +/* line 146, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-menu-left { + left: 0; + right: auto; +} + +/* line 152, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857; + color: #777777; + white-space: nowrap; +} + +/* line 162, ../sass/bootstrap/_dropdowns.scss */ +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: 990; +} + +/* line 172, ../sass/bootstrap/_dropdowns.scss */ +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +/* line 185, ../sass/bootstrap/_dropdowns.scss */ +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid; + content: ""; +} +/* line 191, ../sass/bootstrap/_dropdowns.scss */ +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + /* line 205, ../sass/bootstrap/_dropdowns.scss */ + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + /* line 210, ../sass/bootstrap/_dropdowns.scss */ + .navbar-right .dropdown-menu-left { + left: 0; + right: auto; + } +} +/* line 6, ../sass/bootstrap/_button-groups.scss */ +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +/* line 11, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +/* line 15, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +/* line 21, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} + +/* line 30, ../sass/bootstrap/_button-groups.scss */ +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +/* line 39, ../sass/bootstrap/_button-groups.scss */ +.btn-toolbar { + margin-left: -5px; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.btn-toolbar:before, .btn-toolbar:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.btn-toolbar:after { + clear: both; +} +/* line 43, ../sass/bootstrap/_button-groups.scss */ +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +/* line 47, ../sass/bootstrap/_button-groups.scss */ +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} + +/* line 54, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +/* line 59, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn:first-child { + margin-left: 0; +} +/* line 61, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +/* line 66, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +/* line 72, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn-group { + float: left; +} + +/* line 75, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +/* line 79, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +/* line 84, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +/* line 89, ../sass/bootstrap/_button-groups.scss */ +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +/* line 108, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} + +/* line 112, ../sass/bootstrap/_button-groups.scss */ +.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +/* line 119, ../sass/bootstrap/_button-groups.scss */ +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +/* line 123, ../sass/bootstrap/_button-groups.scss */ +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} + +/* line 130, ../sass/bootstrap/_button-groups.scss */ +.btn .caret { + margin-left: 0; +} + +/* line 134, ../sass/bootstrap/_button-groups.scss */ +.btn-lg .caret, .btn-group-lg > .btn .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +/* line 139, ../sass/bootstrap/_button-groups.scss */ +.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { + border-width: 0 5px 5px; +} + +/* line 148, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.btn-group-vertical > .btn-group:after { + clear: both; +} +/* line 160, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn-group > .btn { + float: none; +} +/* line 165, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +/* line 175, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +/* line 178, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +/* line 182, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 4px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +/* line 187, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +/* line 191, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +/* line 196, ../sass/bootstrap/_button-groups.scss */ +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +/* line 205, ../sass/bootstrap/_button-groups.scss */ +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +/* line 210, ../sass/bootstrap/_button-groups.scss */ +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + float: none; + display: table-cell; + width: 1%; +} +/* line 216, ../sass/bootstrap/_button-groups.scss */ +.btn-group-justified > .btn-group .btn { + width: 100%; +} +/* line 220, ../sass/bootstrap/_button-groups.scss */ +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} + +/* line 235, ../sass/bootstrap/_button-groups.scss */ +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + opacity: 0; + filter: alpha(opacity=0); +} + +/* line 7, ../sass/bootstrap/_input-groups.scss */ +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +/* line 13, ../sass/bootstrap/_input-groups.scss */ +.input-group[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; +} +/* line 19, ../sass/bootstrap/_input-groups.scss */ +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} + +/* line 54, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +/* line 59, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +/* line 64, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +/* line 73, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555555; + text-align: center; + background-color: #eeeeee; + border: 1px solid #ccc; + border-radius: 4px; +} +/* line 85, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon.input-sm, .form-horizontal .form-group-sm .input-group-addon.form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +/* line 90, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon.input-lg, .form-horizontal .form-group-lg .input-group-addon.form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +/* line 97, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +/* line 104, ../sass/bootstrap/_input-groups.scss */ +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +/* line 113, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon:first-child { + border-right: 0; +} + +/* line 116, ../sass/bootstrap/_input-groups.scss */ +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +/* line 125, ../sass/bootstrap/_input-groups.scss */ +.input-group-addon:last-child { + border-left: 0; +} + +/* line 131, ../sass/bootstrap/_input-groups.scss */ +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +/* line 140, ../sass/bootstrap/_input-groups.scss */ +.input-group-btn > .btn { + position: relative; +} +/* line 142, ../sass/bootstrap/_input-groups.scss */ +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +/* line 146, ../sass/bootstrap/_input-groups.scss */ +.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active { + z-index: 2; +} +/* line 155, ../sass/bootstrap/_input-groups.scss */ +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +/* line 161, ../sass/bootstrap/_input-groups.scss */ +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} + +/* line 9, ../sass/bootstrap/_navs.scss */ +.nav { + margin-bottom: 0; + padding-left: 0; + list-style: none; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.nav:before, .nav:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.nav:after { + clear: both; +} +/* line 15, ../sass/bootstrap/_navs.scss */ +.nav > li { + position: relative; + display: block; +} +/* line 19, ../sass/bootstrap/_navs.scss */ +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +/* line 23, ../sass/bootstrap/_navs.scss */ +.nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +/* line 31, ../sass/bootstrap/_navs.scss */ +.nav > li.disabled > a { + color: #777777; +} +/* line 34, ../sass/bootstrap/_navs.scss */ +.nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #777777; + text-decoration: none; + background-color: transparent; + cursor: not-allowed; +} +/* line 46, ../sass/bootstrap/_navs.scss */ +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} +/* line 59, ../sass/bootstrap/_navs.scss */ +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +/* line 66, ../sass/bootstrap/_navs.scss */ +.nav > li > a > img { + max-width: none; +} + +/* line 76, ../sass/bootstrap/_navs.scss */ +.nav-tabs { + border-bottom: 1px solid #ddd; +} +/* line 78, ../sass/bootstrap/_navs.scss */ +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +/* line 84, ../sass/bootstrap/_navs.scss */ +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +/* line 89, ../sass/bootstrap/_navs.scss */ +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #ddd; +} +/* line 96, ../sass/bootstrap/_navs.scss */ +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #555555; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +/* line 118, ../sass/bootstrap/_navs.scss */ +.nav-pills > li { + float: left; +} +/* line 122, ../sass/bootstrap/_navs.scss */ +.nav-pills > li > a { + border-radius: 4px; +} +/* line 125, ../sass/bootstrap/_navs.scss */ +.nav-pills > li + li { + margin-left: 2px; +} +/* line 131, ../sass/bootstrap/_navs.scss */ +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca; +} + +/* line 144, ../sass/bootstrap/_navs.scss */ +.nav-stacked > li { + float: none; +} +/* line 146, ../sass/bootstrap/_navs.scss */ +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +/* line 160, ../sass/bootstrap/_navs.scss */ +.nav-justified, .nav-tabs.nav-justified { + width: 100%; +} +/* line 163, ../sass/bootstrap/_navs.scss */ +.nav-justified > li, .nav-tabs.nav-justified > li { + float: none; +} +/* line 165, ../sass/bootstrap/_navs.scss */ +.nav-justified > li > a, .nav-tabs.nav-justified > li > a { + text-align: center; + margin-bottom: 5px; +} +/* line 171, ../sass/bootstrap/_navs.scss */ +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + /* line 177, ../sass/bootstrap/_navs.scss */ + .nav-justified > li, .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + /* line 180, ../sass/bootstrap/_navs.scss */ + .nav-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} + +/* line 190, ../sass/bootstrap/_navs.scss */ +.nav-tabs-justified, .nav-tabs.nav-justified { + border-bottom: 0; +} +/* line 193, ../sass/bootstrap/_navs.scss */ +.nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +/* line 199, ../sass/bootstrap/_navs.scss */ +.nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + /* line 206, ../sass/bootstrap/_navs.scss */ + .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + /* line 210, ../sass/bootstrap/_navs.scss */ + .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} + +/* line 224, ../sass/bootstrap/_navs.scss */ +.tab-content > .tab-pane { + display: none; +} +/* line 227, ../sass/bootstrap/_navs.scss */ +.tab-content > .active { + display: block; +} + +/* line 237, ../sass/bootstrap/_navs.scss */ +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +/* line 11, ../sass/bootstrap/_navbar.scss */ +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.navbar:before, .navbar:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.navbar:after { + clear: both; +} +@media (min-width: 768px) { + /* line 11, ../sass/bootstrap/_navbar.scss */ + .navbar { + border-radius: 4px; + } +} + +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.navbar-header:before, .navbar-header:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.navbar-header:after { + clear: both; +} +@media (min-width: 768px) { + /* line 31, ../sass/bootstrap/_navbar.scss */ + .navbar-header { + float: left; + } +} + +/* line 50, ../sass/bootstrap/_navbar.scss */ +.navbar-collapse { + overflow-x: visible; + padding-right: 15px; + padding-left: 15px; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.navbar-collapse:before, .navbar-collapse:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.navbar-collapse:after { + clear: both; +} +/* line 59, ../sass/bootstrap/_navbar.scss */ +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + /* line 50, ../sass/bootstrap/_navbar.scss */ + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + /* line 68, ../sass/bootstrap/_navbar.scss */ + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + /* line 75, ../sass/bootstrap/_navbar.scss */ + .navbar-collapse.in { + overflow-y: visible; + } + /* line 81, ../sass/bootstrap/_navbar.scss */ + .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { + padding-left: 0; + padding-right: 0; + } +} + +/* line 92, ../sass/bootstrap/_navbar.scss */ +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-width: 480px) and (orientation: landscape) { + /* line 92, ../sass/bootstrap/_navbar.scss */ + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} + +/* line 108, ../sass/bootstrap/_navbar.scss */ +.container > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-header, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + /* line 108, ../sass/bootstrap/_navbar.scss */ + .container > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-header, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +/* line 128, ../sass/bootstrap/_navbar.scss */ +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + /* line 128, ../sass/bootstrap/_navbar.scss */ + .navbar-static-top { + border-radius: 0; + } +} + +/* line 138, ../sass/bootstrap/_navbar.scss */ +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + /* line 138, ../sass/bootstrap/_navbar.scss */ + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +/* line 151, ../sass/bootstrap/_navbar.scss */ +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} + +/* line 155, ../sass/bootstrap/_navbar.scss */ +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} + +/* line 164, ../sass/bootstrap/_navbar.scss */ +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; + height: 50px; +} +/* line 171, ../sass/bootstrap/_navbar.scss */ +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} +@media (min-width: 768px) { + /* line 177, ../sass/bootstrap/_navbar.scss */ + .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} + +/* line 190, ../sass/bootstrap/_navbar.scss */ +.navbar-toggle { + position: relative; + float: right; + margin-right: 15px; + padding: 9px 10px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +/* line 203, ../sass/bootstrap/_navbar.scss */ +.navbar-toggle:focus { + outline: 0; +} +/* line 208, ../sass/bootstrap/_navbar.scss */ +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +/* line 214, ../sass/bootstrap/_navbar.scss */ +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + /* line 190, ../sass/bootstrap/_navbar.scss */ + .navbar-toggle { + display: none; + } +} + +/* line 229, ../sass/bootstrap/_navbar.scss */ +.navbar-nav { + margin: 7.5px -15px; +} +/* line 232, ../sass/bootstrap/_navbar.scss */ +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + /* line 240, ../sass/bootstrap/_navbar.scss */ + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + /* line 248, ../sass/bootstrap/_navbar.scss */ + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + /* line 252, ../sass/bootstrap/_navbar.scss */ + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + /* line 254, ../sass/bootstrap/_navbar.scss */ + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + /* line 229, ../sass/bootstrap/_navbar.scss */ + .navbar-nav { + float: left; + margin: 0; + } + /* line 267, ../sass/bootstrap/_navbar.scss */ + .navbar-nav > li { + float: left; + } + /* line 269, ../sass/bootstrap/_navbar.scss */ + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } + /* line 275, ../sass/bootstrap/_navbar.scss */ + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } +} + +@media (min-width: 768px) { + /* line 289, ../sass/bootstrap/_navbar.scss */ + .navbar-left { + float: left !important; + } + + /* line 292, ../sass/bootstrap/_navbar.scss */ + .navbar-right { + float: right !important; + } +} +/* line 303, ../sass/bootstrap/_navbar.scss */ +.navbar-form { + margin-left: -15px; + margin-right: -15px; + padding: 10px 15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + margin-top: 8px; + margin-bottom: 8px; +} +@media (max-width: 767px) { + /* line 315, ../sass/bootstrap/_navbar.scss */ + .navbar-form .form-group { + margin-bottom: 5px; + } +} +@media (min-width: 768px) { + /* line 303, ../sass/bootstrap/_navbar.scss */ + .navbar-form { + width: auto; + border: 0; + margin-left: 0; + margin-right: 0; + padding-top: 0; + padding-bottom: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + /* line 335, ../sass/bootstrap/_navbar.scss */ + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } +} + +/* line 345, ../sass/bootstrap/_navbar.scss */ +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +/* line 350, ../sass/bootstrap/_navbar.scss */ +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +/* line 359, ../sass/bootstrap/_navbar.scss */ +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +/* line 362, ../sass/bootstrap/_navbar.scss */ +.navbar-btn.btn-sm, .btn-group-sm > .navbar-btn.btn { + margin-top: 10px; + margin-bottom: 10px; +} +/* line 365, ../sass/bootstrap/_navbar.scss */ +.navbar-btn.btn-xs, .btn-group-xs > .navbar-btn.btn { + margin-top: 14px; + margin-bottom: 14px; +} + +/* line 375, ../sass/bootstrap/_navbar.scss */ +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + /* line 375, ../sass/bootstrap/_navbar.scss */ + .navbar-text { + float: left; + margin-left: 15px; + margin-right: 15px; + } + /* line 384, ../sass/bootstrap/_navbar.scss */ + .navbar-text.navbar-right:last-child { + margin-right: 0; + } +} + +/* line 394, ../sass/bootstrap/_navbar.scss */ +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +/* line 398, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-brand { + color: #777; +} +/* line 400, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +/* line 407, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-text { + color: #777; +} +/* line 412, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-nav > li > a { + color: #777; +} +/* line 415, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +/* line 422, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +/* line 430, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +/* line 439, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-toggle { + border-color: #ddd; +} +/* line 441, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +/* line 445, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +/* line 450, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +/* line 459, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + background-color: #e7e7e7; + color: #555; +} +@media (max-width: 767px) { + /* line 470, ../sass/bootstrap/_navbar.scss */ + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + /* line 472, ../sass/bootstrap/_navbar.scss */ + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + /* line 479, ../sass/bootstrap/_navbar.scss */ + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + /* line 487, ../sass/bootstrap/_navbar.scss */ + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +/* line 503, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-link { + color: #777; +} +/* line 505, ../sass/bootstrap/_navbar.scss */ +.navbar-default .navbar-link:hover { + color: #333; +} +/* line 510, ../sass/bootstrap/_navbar.scss */ +.navbar-default .btn-link { + color: #777; +} +/* line 512, ../sass/bootstrap/_navbar.scss */ +.navbar-default .btn-link:hover, .navbar-default .btn-link:focus { + color: #333; +} +/* line 518, ../sass/bootstrap/_navbar.scss */ +.navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .navbar-default .btn-link:hover, fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} + +/* line 528, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse { + background-color: #222; + border-color: #090909; +} +/* line 532, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-brand { + color: #777777; +} +/* line 534, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +/* line 541, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-text { + color: #777777; +} +/* line 546, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-nav > li > a { + color: #777777; +} +/* line 549, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +/* line 556, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #090909; +} +/* line 564, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +/* line 574, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-toggle { + border-color: #333; +} +/* line 576, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +/* line 580, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +/* line 585, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +/* line 593, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + background-color: #090909; + color: #fff; +} +@media (max-width: 767px) { + /* line 604, ../sass/bootstrap/_navbar.scss */ + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #090909; + } + /* line 607, ../sass/bootstrap/_navbar.scss */ + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #090909; + } + /* line 610, ../sass/bootstrap/_navbar.scss */ + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + /* line 612, ../sass/bootstrap/_navbar.scss */ + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + /* line 619, ../sass/bootstrap/_navbar.scss */ + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #090909; + } + /* line 627, ../sass/bootstrap/_navbar.scss */ + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +/* line 638, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-link { + color: #777777; +} +/* line 640, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .navbar-link:hover { + color: #fff; +} +/* line 645, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .btn-link { + color: #777777; +} +/* line 647, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { + color: #fff; +} +/* line 653, ../sass/bootstrap/_navbar.scss */ +.navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .navbar-inverse .btn-link:hover, fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} + +/* line 6, ../sass/bootstrap/_breadcrumbs.scss */ +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +/* line 13, ../sass/bootstrap/_breadcrumbs.scss */ +.breadcrumb > li { + display: inline-block; +} +/* line 16, ../sass/bootstrap/_breadcrumbs.scss */ +.breadcrumb > li + li:before { + content: "/ "; + padding: 0 5px; + color: #ccc; +} +/* line 23, ../sass/bootstrap/_breadcrumbs.scss */ +.breadcrumb > .active { + color: #777777; +} + +/* line 4, ../sass/bootstrap/_pagination.scss */ +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +/* line 10, ../sass/bootstrap/_pagination.scss */ +.pagination > li { + display: inline; +} +/* line 12, ../sass/bootstrap/_pagination.scss */ +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857; + text-decoration: none; + color: #428bca; + background-color: #fff; + border: 1px solid #ddd; + margin-left: -1px; +} +/* line 25, ../sass/bootstrap/_pagination.scss */ +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +/* line 32, ../sass/bootstrap/_pagination.scss */ +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +/* line 41, ../sass/bootstrap/_pagination.scss */ +.pagination > li > a:hover, .pagination > li > a:focus, +.pagination > li > span:hover, +.pagination > li > span:focus { + color: #2a6496; + background-color: #eeeeee; + border-color: #ddd; +} +/* line 51, ../sass/bootstrap/_pagination.scss */ +.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, +.pagination > .active > span, +.pagination > .active > span:hover, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; + cursor: default; +} +/* line 63, ../sass/bootstrap/_pagination.scss */ +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777777; + background-color: #fff; + border-color: #ddd; + cursor: not-allowed; +} + +/* line 5, ../sass/bootstrap/mixins/_pagination.scss */ +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +/* line 11, ../sass/bootstrap/mixins/_pagination.scss */ +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} +/* line 17, ../sass/bootstrap/mixins/_pagination.scss */ +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-bottom-right-radius: 6px; + border-top-right-radius: 6px; +} + +/* line 5, ../sass/bootstrap/mixins/_pagination.scss */ +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +/* line 11, ../sass/bootstrap/mixins/_pagination.scss */ +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +/* line 17, ../sass/bootstrap/mixins/_pagination.scss */ +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} + +/* line 6, ../sass/bootstrap/_pager.scss */ +.pager { + padding-left: 0; + margin: 20px 0; + list-style: none; + text-align: center; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.pager:before, .pager:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.pager:after { + clear: both; +} +/* line 12, ../sass/bootstrap/_pager.scss */ +.pager li { + display: inline; +} +/* line 14, ../sass/bootstrap/_pager.scss */ +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +/* line 23, ../sass/bootstrap/_pager.scss */ +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} +/* line 31, ../sass/bootstrap/_pager.scss */ +.pager .next > a, +.pager .next > span { + float: right; +} +/* line 38, ../sass/bootstrap/_pager.scss */ +.pager .previous > a, +.pager .previous > span { + float: left; +} +/* line 45, ../sass/bootstrap/_pager.scss */ +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777777; + background-color: #fff; + cursor: not-allowed; +} + +/* line 5, ../sass/bootstrap/_labels.scss */ +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +/* line 20, ../sass/bootstrap/_labels.scss */ +.label:empty { + display: none; +} +/* line 25, ../sass/bootstrap/_labels.scss */ +.btn .label { + position: relative; + top: -1px; +} + +/* line 33, ../sass/bootstrap/_labels.scss */ +a.label:hover, a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +/* line 44, ../sass/bootstrap/_labels.scss */ +.label-default { + background-color: #777777; +} +/* line 7, ../sass/bootstrap/mixins/_labels.scss */ +.label-default[href]:hover, .label-default[href]:focus { + background-color: #5e5e5e; +} + +/* line 48, ../sass/bootstrap/_labels.scss */ +.label-primary { + background-color: #428bca; +} +/* line 7, ../sass/bootstrap/mixins/_labels.scss */ +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #3071a9; +} + +/* line 52, ../sass/bootstrap/_labels.scss */ +.label-success { + background-color: #5cb85c; +} +/* line 7, ../sass/bootstrap/mixins/_labels.scss */ +.label-success[href]:hover, .label-success[href]:focus { + background-color: #449d44; +} + +/* line 56, ../sass/bootstrap/_labels.scss */ +.label-info { + background-color: #5bc0de; +} +/* line 7, ../sass/bootstrap/mixins/_labels.scss */ +.label-info[href]:hover, .label-info[href]:focus { + background-color: #31b0d5; +} + +/* line 60, ../sass/bootstrap/_labels.scss */ +.label-warning { + background-color: #f0ad4e; +} +/* line 7, ../sass/bootstrap/mixins/_labels.scss */ +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #ec971f; +} + +/* line 64, ../sass/bootstrap/_labels.scss */ +.label-danger { + background-color: #d9534f; +} +/* line 7, ../sass/bootstrap/mixins/_labels.scss */ +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #c9302c; +} + +/* line 7, ../sass/bootstrap/_badges.scss */ +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: baseline; + white-space: nowrap; + text-align: center; + background-color: #777777; + border-radius: 10px; +} +/* line 22, ../sass/bootstrap/_badges.scss */ +.badge:empty { + display: none; +} +/* line 27, ../sass/bootstrap/_badges.scss */ +.btn .badge { + position: relative; + top: -1px; +} +/* line 31, ../sass/bootstrap/_badges.scss */ +.btn-xs .badge, .btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +/* line 39, ../sass/bootstrap/_badges.scss */ +a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff; +} +/* line 44, ../sass/bootstrap/_badges.scss */ +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +/* line 51, ../sass/bootstrap/_badges.scss */ +a.badge:hover, a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +/* line 6, ../sass/bootstrap/_jumbotron.scss */ +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eeeeee; +} +/* line 12, ../sass/bootstrap/_jumbotron.scss */ +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +/* line 16, ../sass/bootstrap/_jumbotron.scss */ +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +/* line 22, ../sass/bootstrap/_jumbotron.scss */ +.jumbotron > hr { + border-top-color: #d5d5d5; +} +/* line 26, ../sass/bootstrap/_jumbotron.scss */ +.container .jumbotron { + border-radius: 6px; +} +/* line 30, ../sass/bootstrap/_jumbotron.scss */ +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + /* line 6, ../sass/bootstrap/_jumbotron.scss */ + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + /* line 38, ../sass/bootstrap/_jumbotron.scss */ + .container .jumbotron { + padding-left: 60px; + padding-right: 60px; + } + /* line 43, ../sass/bootstrap/_jumbotron.scss */ + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} + +/* line 7, ../sass/bootstrap/_thumbnails.scss */ +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +/* line 17, ../sass/bootstrap/_thumbnails.scss */ +.thumbnail > img, +.thumbnail a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; + margin-left: auto; + margin-right: auto; +} +/* line 27, ../sass/bootstrap/_thumbnails.scss */ +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +/* line 34, ../sass/bootstrap/_thumbnails.scss */ +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} + +/* line 9, ../sass/bootstrap/_alerts.scss */ +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +/* line 16, ../sass/bootstrap/_alerts.scss */ +.alert h4 { + margin-top: 0; + color: inherit; +} +/* line 22, ../sass/bootstrap/_alerts.scss */ +.alert .alert-link { + font-weight: bold; +} +/* line 27, ../sass/bootstrap/_alerts.scss */ +.alert > p, +.alert > ul { + margin-bottom: 0; +} +/* line 31, ../sass/bootstrap/_alerts.scss */ +.alert > p + p { + margin-top: 5px; +} + +/* line 40, ../sass/bootstrap/_alerts.scss */ +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +/* line 45, ../sass/bootstrap/_alerts.scss */ +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +/* line 57, ../sass/bootstrap/_alerts.scss */ +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #3c763d; +} +/* line 8, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-success hr { + border-top-color: #c9e2b3; +} +/* line 11, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-success .alert-link { + color: #2b542c; +} + +/* line 60, ../sass/bootstrap/_alerts.scss */ +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #31708f; +} +/* line 8, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-info hr { + border-top-color: #a6e1ec; +} +/* line 11, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-info .alert-link { + color: #245269; +} + +/* line 63, ../sass/bootstrap/_alerts.scss */ +.alert-warning { + background-color: #fcf8e3; + border-color: #faebcc; + color: #8a6d3b; +} +/* line 8, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-warning hr { + border-top-color: #f7e1b5; +} +/* line 11, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-warning .alert-link { + color: #66512c; +} + +/* line 66, ../sass/bootstrap/_alerts.scss */ +.alert-danger { + background-color: #f2dede; + border-color: #ebccd1; + color: #a94442; +} +/* line 8, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-danger hr { + border-top-color: #e4b9c0; +} +/* line 11, ../sass/bootstrap/mixins/_alerts.scss */ +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +/* line 27, ../sass/bootstrap/_progress-bars.scss */ +.progress { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +/* line 37, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar { + float: left; + width: 0%; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +/* line 55, ../sass/bootstrap/_progress-bars.scss */ +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +/* line 65, ../sass/bootstrap/_progress-bars.scss */ +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +/* line 72, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar[aria-valuenow="1"], .progress-bar[aria-valuenow="2"] { + min-width: 30px; +} +/* line 77, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar[aria-valuenow="0"] { + color: #777777; + min-width: 30px; + background-color: transparent; + background-image: none; + box-shadow: none; +} + +/* line 91, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar-success { + background-color: #5cb85c; +} +/* line 7, ../sass/bootstrap/mixins/_progress-bar.scss */ +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +/* line 95, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar-info { + background-color: #5bc0de; +} +/* line 7, ../sass/bootstrap/mixins/_progress-bar.scss */ +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +/* line 99, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar-warning { + background-color: #f0ad4e; +} +/* line 7, ../sass/bootstrap/mixins/_progress-bar.scss */ +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +/* line 103, ../sass/bootstrap/_progress-bars.scss */ +.progress-bar-danger { + background-color: #d9534f; +} +/* line 7, ../sass/bootstrap/mixins/_progress-bar.scss */ +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +/* line 10, ../sass/bootstrap/_media.scss */ +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +/* line 17, ../sass/bootstrap/_media.scss */ +.media, +.media .media { + margin-top: 15px; +} + +/* line 21, ../sass/bootstrap/_media.scss */ +.media:first-child { + margin-top: 0; +} + +/* line 26, ../sass/bootstrap/_media.scss */ +.media-object { + display: block; +} + +/* line 31, ../sass/bootstrap/_media.scss */ +.media-heading { + margin: 0 0 5px; +} + +/* line 40, ../sass/bootstrap/_media.scss */ +.media > .pull-left { + margin-right: 10px; +} +/* line 43, ../sass/bootstrap/_media.scss */ +.media > .pull-right { + margin-left: 10px; +} + +/* line 53, ../sass/bootstrap/_media.scss */ +.media-list { + padding-left: 0; + list-style: none; +} + +/* line 10, ../sass/bootstrap/_list-group.scss */ +.list-group { + margin-bottom: 20px; + padding-left: 0; +} + +/* line 21, ../sass/bootstrap/_list-group.scss */ +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +/* line 31, ../sass/bootstrap/_list-group.scss */ +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} +/* line 34, ../sass/bootstrap/_list-group.scss */ +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +/* line 40, ../sass/bootstrap/_list-group.scss */ +.list-group-item > .badge { + float: right; +} +/* line 43, ../sass/bootstrap/_list-group.scss */ +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +/* line 54, ../sass/bootstrap/_list-group.scss */ +a.list-group-item { + color: #555; +} +/* line 57, ../sass/bootstrap/_list-group.scss */ +a.list-group-item .list-group-item-heading { + color: #333; +} +/* line 62, ../sass/bootstrap/_list-group.scss */ +a.list-group-item:hover, a.list-group-item:focus { + text-decoration: none; + color: #555; + background-color: #f5f5f5; +} + +/* line 72, ../sass/bootstrap/_list-group.scss */ +.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus { + background-color: #eeeeee; + color: #777777; +} +/* line 79, ../sass/bootstrap/_list-group.scss */ +.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +/* line 82, ../sass/bootstrap/_list-group.scss */ +.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text { + color: #777777; +} +/* line 88, ../sass/bootstrap/_list-group.scss */ +.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +/* line 97, ../sass/bootstrap/_list-group.scss */ +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +/* line 102, ../sass/bootstrap/_list-group.scss */ +.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} + +/* line 4, ../sass/bootstrap/mixins/_list-group.scss */ +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +/* line 11, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-success { + color: #3c763d; +} +/* line 14, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +/* line 18, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-success:hover, a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +/* line 23, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +/* line 4, ../sass/bootstrap/mixins/_list-group.scss */ +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +/* line 11, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-info { + color: #31708f; +} +/* line 14, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +/* line 18, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-info:hover, a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +/* line 23, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +/* line 4, ../sass/bootstrap/mixins/_list-group.scss */ +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +/* line 11, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-warning { + color: #8a6d3b; +} +/* line 14, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +/* line 18, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-warning:hover, a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +/* line 23, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +/* line 4, ../sass/bootstrap/mixins/_list-group.scss */ +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +/* line 11, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-danger { + color: #a94442; +} +/* line 14, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +/* line 18, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-danger:hover, a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +/* line 23, ../sass/bootstrap/mixins/_list-group.scss */ +a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +/* line 124, ../sass/bootstrap/_list-group.scss */ +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +/* line 128, ../sass/bootstrap/_list-group.scss */ +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +/* line 7, ../sass/bootstrap/_panels.scss */ +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +/* line 16, ../sass/bootstrap/_panels.scss */ +.panel-body { + padding: 15px; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.panel-body:before, .panel-body:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.panel-body:after { + clear: both; +} + +/* line 22, ../sass/bootstrap/_panels.scss */ +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +/* line 27, ../sass/bootstrap/_panels.scss */ +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} + +/* line 33, ../sass/bootstrap/_panels.scss */ +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +/* line 39, ../sass/bootstrap/_panels.scss */ +.panel-title > a { + color: inherit; +} + +/* line 45, ../sass/bootstrap/_panels.scss */ +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +/* line 59, ../sass/bootstrap/_panels.scss */ +.panel > .list-group { + margin-bottom: 0; +} +/* line 62, ../sass/bootstrap/_panels.scss */ +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +/* line 69, ../sass/bootstrap/_panels.scss */ +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +/* line 76, ../sass/bootstrap/_panels.scss */ +.panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +/* line 85, ../sass/bootstrap/_panels.scss */ +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +/* line 89, ../sass/bootstrap/_panels.scss */ +.list-group + .panel-footer { + border-top-width: 0; +} + +/* line 99, ../sass/bootstrap/_panels.scss */ +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +/* line 105, ../sass/bootstrap/_panels.scss */ +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +/* line 112, ../sass/bootstrap/_panels.scss */ +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +/* line 116, ../sass/bootstrap/_panels.scss */ +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +/* line 124, ../sass/bootstrap/_panels.scss */ +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +/* line 131, ../sass/bootstrap/_panels.scss */ +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +/* line 135, ../sass/bootstrap/_panels.scss */ +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +/* line 142, ../sass/bootstrap/_panels.scss */ +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #ddd; +} +/* line 146, ../sass/bootstrap/_panels.scss */ +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +/* line 150, ../sass/bootstrap/_panels.scss */ +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +/* line 157, ../sass/bootstrap/_panels.scss */ +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +/* line 161, ../sass/bootstrap/_panels.scss */ +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +/* line 170, ../sass/bootstrap/_panels.scss */ +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +/* line 179, ../sass/bootstrap/_panels.scss */ +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +/* line 186, ../sass/bootstrap/_panels.scss */ +.panel > .table-responsive { + border: 0; + margin-bottom: 0; +} + +/* line 198, ../sass/bootstrap/_panels.scss */ +.panel-group { + margin-bottom: 20px; +} +/* line 202, ../sass/bootstrap/_panels.scss */ +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +/* line 205, ../sass/bootstrap/_panels.scss */ +.panel-group .panel + .panel { + margin-top: 5px; +} +/* line 210, ../sass/bootstrap/_panels.scss */ +.panel-group .panel-heading { + border-bottom: 0; +} +/* line 212, ../sass/bootstrap/_panels.scss */ +.panel-group .panel-heading + .panel-collapse > .panel-body { + border-top: 1px solid #ddd; +} +/* line 216, ../sass/bootstrap/_panels.scss */ +.panel-group .panel-footer { + border-top: 0; +} +/* line 218, ../sass/bootstrap/_panels.scss */ +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} + +/* line 226, ../sass/bootstrap/_panels.scss */ +.panel-default { + border-color: #ddd; +} +/* line 6, ../sass/bootstrap/mixins/_panels.scss */ +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #ddd; +} +/* line 11, ../sass/bootstrap/mixins/_panels.scss */ +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +/* line 14, ../sass/bootstrap/mixins/_panels.scss */ +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +/* line 20, ../sass/bootstrap/mixins/_panels.scss */ +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} + +/* line 229, ../sass/bootstrap/_panels.scss */ +.panel-primary { + border-color: #428bca; +} +/* line 6, ../sass/bootstrap/mixins/_panels.scss */ +.panel-primary > .panel-heading { + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +/* line 11, ../sass/bootstrap/mixins/_panels.scss */ +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; +} +/* line 14, ../sass/bootstrap/mixins/_panels.scss */ +.panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #fff; +} +/* line 20, ../sass/bootstrap/mixins/_panels.scss */ +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; +} + +/* line 232, ../sass/bootstrap/_panels.scss */ +.panel-success { + border-color: #d6e9c6; +} +/* line 6, ../sass/bootstrap/mixins/_panels.scss */ +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +/* line 11, ../sass/bootstrap/mixins/_panels.scss */ +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +/* line 14, ../sass/bootstrap/mixins/_panels.scss */ +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +/* line 20, ../sass/bootstrap/mixins/_panels.scss */ +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} + +/* line 235, ../sass/bootstrap/_panels.scss */ +.panel-info { + border-color: #bce8f1; +} +/* line 6, ../sass/bootstrap/mixins/_panels.scss */ +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +/* line 11, ../sass/bootstrap/mixins/_panels.scss */ +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +/* line 14, ../sass/bootstrap/mixins/_panels.scss */ +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +/* line 20, ../sass/bootstrap/mixins/_panels.scss */ +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} + +/* line 238, ../sass/bootstrap/_panels.scss */ +.panel-warning { + border-color: #faebcc; +} +/* line 6, ../sass/bootstrap/mixins/_panels.scss */ +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +/* line 11, ../sass/bootstrap/mixins/_panels.scss */ +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +/* line 14, ../sass/bootstrap/mixins/_panels.scss */ +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +/* line 20, ../sass/bootstrap/mixins/_panels.scss */ +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} + +/* line 241, ../sass/bootstrap/_panels.scss */ +.panel-danger { + border-color: #ebccd1; +} +/* line 6, ../sass/bootstrap/mixins/_panels.scss */ +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +/* line 11, ../sass/bootstrap/mixins/_panels.scss */ +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +/* line 14, ../sass/bootstrap/mixins/_panels.scss */ +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +/* line 20, ../sass/bootstrap/mixins/_panels.scss */ +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} + +/* line 5, ../sass/bootstrap/_responsive-embed.scss */ +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +/* line 12, ../sass/bootstrap/_responsive-embed.scss */ +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object { + position: absolute; + top: 0; + left: 0; + bottom: 0; + height: 100%; + width: 100%; + border: 0; +} +/* line 26, ../sass/bootstrap/_responsive-embed.scss */ +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +/* line 31, ../sass/bootstrap/_responsive-embed.scss */ +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} + +/* line 7, ../sass/bootstrap/_wells.scss */ +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +/* line 15, ../sass/bootstrap/_wells.scss */ +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +/* line 22, ../sass/bootstrap/_wells.scss */ +.well-lg { + padding: 24px; + border-radius: 6px; +} + +/* line 26, ../sass/bootstrap/_wells.scss */ +.well-sm { + padding: 9px; + border-radius: 3px; +} + +/* line 6, ../sass/bootstrap/_close.scss */ +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.2; + filter: alpha(opacity=20); +} +/* line 15, ../sass/bootstrap/_close.scss */ +.close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +/* line 29, ../sass/bootstrap/_close.scss */ +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +/* line 11, ../sass/bootstrap/_modals.scss */ +.modal-open { + overflow: hidden; +} + +/* line 16, ../sass/bootstrap/_modals.scss */ +.modal { + display: none; + overflow: hidden; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + -webkit-overflow-scrolling: touch; + outline: 0; +} +/* line 32, ../sass/bootstrap/_modals.scss */ +.modal.fade .modal-dialog { + -webkit-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} +/* line 36, ../sass/bootstrap/_modals.scss */ +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +/* line 38, ../sass/bootstrap/_modals.scss */ +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +/* line 44, ../sass/bootstrap/_modals.scss */ +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +/* line 51, ../sass/bootstrap/_modals.scss */ +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; + outline: 0; +} + +/* line 64, ../sass/bootstrap/_modals.scss */ +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +/* line 73, ../sass/bootstrap/_modals.scss */ +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} +/* line 74, ../sass/bootstrap/_modals.scss */ +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +/* line 79, ../sass/bootstrap/_modals.scss */ +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; + min-height: 16.42857px; +} + +/* line 85, ../sass/bootstrap/_modals.scss */ +.modal-header .close { + margin-top: -2px; +} + +/* line 90, ../sass/bootstrap/_modals.scss */ +.modal-title { + margin: 0; + line-height: 1.42857; +} + +/* line 97, ../sass/bootstrap/_modals.scss */ +.modal-body { + position: relative; + padding: 15px; +} + +/* line 103, ../sass/bootstrap/_modals.scss */ +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.modal-footer:before, .modal-footer:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.modal-footer:after { + clear: both; +} +/* line 110, ../sass/bootstrap/_modals.scss */ +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +/* line 115, ../sass/bootstrap/_modals.scss */ +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +/* line 119, ../sass/bootstrap/_modals.scss */ +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +/* line 125, ../sass/bootstrap/_modals.scss */ +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 768px) { + /* line 136, ../sass/bootstrap/_modals.scss */ + .modal-dialog { + width: 600px; + margin: 30px auto; + } + + /* line 140, ../sass/bootstrap/_modals.scss */ + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + + /* line 145, ../sass/bootstrap/_modals.scss */ + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + /* line 149, ../sass/bootstrap/_modals.scss */ + .modal-lg { + width: 900px; + } +} +/* line 7, ../sass/bootstrap/_tooltip.scss */ +.tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); +} +/* line 16, ../sass/bootstrap/_tooltip.scss */ +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} +/* line 17, ../sass/bootstrap/_tooltip.scss */ +.tooltip.top { + margin-top: -3px; + padding: 5px 0; +} +/* line 18, ../sass/bootstrap/_tooltip.scss */ +.tooltip.right { + margin-left: 3px; + padding: 0 5px; +} +/* line 19, ../sass/bootstrap/_tooltip.scss */ +.tooltip.bottom { + margin-top: 3px; + padding: 5px 0; +} +/* line 20, ../sass/bootstrap/_tooltip.scss */ +.tooltip.left { + margin-left: -3px; + padding: 0 5px; +} + +/* line 24, ../sass/bootstrap/_tooltip.scss */ +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} + +/* line 35, ../sass/bootstrap/_tooltip.scss */ +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +/* line 43, ../sass/bootstrap/_tooltip.scss */ +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +/* line 50, ../sass/bootstrap/_tooltip.scss */ +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +/* line 56, ../sass/bootstrap/_tooltip.scss */ +.tooltip.top-right .tooltip-arrow { + bottom: 0; + right: 5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +/* line 62, ../sass/bootstrap/_tooltip.scss */ +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +/* line 69, ../sass/bootstrap/_tooltip.scss */ +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +/* line 76, ../sass/bootstrap/_tooltip.scss */ +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +/* line 83, ../sass/bootstrap/_tooltip.scss */ +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +/* line 89, ../sass/bootstrap/_tooltip.scss */ +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +/* line 6, ../sass/bootstrap/_popovers.scss */ +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +/* line 26, ../sass/bootstrap/_popovers.scss */ +.popover.top { + margin-top: -10px; +} +/* line 27, ../sass/bootstrap/_popovers.scss */ +.popover.right { + margin-left: 10px; +} +/* line 28, ../sass/bootstrap/_popovers.scss */ +.popover.bottom { + margin-top: 10px; +} +/* line 29, ../sass/bootstrap/_popovers.scss */ +.popover.left { + margin-left: -10px; +} + +/* line 32, ../sass/bootstrap/_popovers.scss */ +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +/* line 43, ../sass/bootstrap/_popovers.scss */ +.popover-content { + padding: 9px 14px; +} + +/* line 52, ../sass/bootstrap/_popovers.scss */ +.popover > .arrow, .popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +/* line 62, ../sass/bootstrap/_popovers.scss */ +.popover > .arrow { + border-width: 11px; +} + +/* line 65, ../sass/bootstrap/_popovers.scss */ +.popover > .arrow:after { + border-width: 10px; + content: ""; +} + +/* line 71, ../sass/bootstrap/_popovers.scss */ +.popover.top > .arrow { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +/* line 78, ../sass/bootstrap/_popovers.scss */ +.popover.top > .arrow:after { + content: " "; + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #fff; +} +/* line 86, ../sass/bootstrap/_popovers.scss */ +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); +} +/* line 93, ../sass/bootstrap/_popovers.scss */ +.popover.right > .arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; +} +/* line 101, ../sass/bootstrap/_popovers.scss */ +.popover.bottom > .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +/* line 108, ../sass/bootstrap/_popovers.scss */ +.popover.bottom > .arrow:after { + content: " "; + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #fff; +} +/* line 117, ../sass/bootstrap/_popovers.scss */ +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); +} +/* line 124, ../sass/bootstrap/_popovers.scss */ +.popover.left > .arrow:after { + content: " "; + right: 1px; + border-right-width: 0; + border-left-color: #fff; + bottom: -10px; +} + +/* line 7, ../sass/bootstrap/_carousel.scss */ +.carousel { + position: relative; +} + +/* line 11, ../sass/bootstrap/_carousel.scss */ +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; +} +/* line 16, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +/* line 22, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; + line-height: 1; +} +/* line 29, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +/* line 35, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .active { + left: 0; +} +/* line 39, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +/* line 46, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .next { + left: 100%; +} +/* line 49, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .prev { + left: -100%; +} +/* line 52, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +/* line 57, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .active.left { + left: -100%; +} +/* line 60, ../sass/bootstrap/_carousel.scss */ +.carousel-inner > .active.right { + left: 100%; +} + +/* line 69, ../sass/bootstrap/_carousel.scss */ +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 15%; + opacity: 0.5; + filter: alpha(opacity=50); + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +/* line 84, ../sass/bootstrap/_carousel.scss */ +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} +/* line 87, ../sass/bootstrap/_carousel.scss */ +.carousel-control.right { + left: auto; + right: 0; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} +/* line 94, ../sass/bootstrap/_carousel.scss */ +.carousel-control:hover, .carousel-control:focus { + outline: 0; + color: #fff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +/* line 103, ../sass/bootstrap/_carousel.scss */ +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +/* line 112, ../sass/bootstrap/_carousel.scss */ +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +/* line 117, ../sass/bootstrap/_carousel.scss */ +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +/* line 122, ../sass/bootstrap/_carousel.scss */ +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +/* line 132, ../sass/bootstrap/_carousel.scss */ +.carousel-control .icon-prev:before { + content: '\2039'; +} +/* line 137, ../sass/bootstrap/_carousel.scss */ +.carousel-control .icon-next:before { + content: '\203a'; +} + +/* line 148, ../sass/bootstrap/_carousel.scss */ +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; +} +/* line 159, ../sass/bootstrap/_carousel.scss */ +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid #fff; + border-radius: 10px; + cursor: pointer; + background-color: #000 \9; + background-color: transparent; +} +/* line 180, ../sass/bootstrap/_carousel.scss */ +.carousel-indicators .active { + margin: 0; + width: 12px; + height: 12px; + background-color: #fff; +} + +/* line 191, ../sass/bootstrap/_carousel.scss */ +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +/* line 202, ../sass/bootstrap/_carousel.scss */ +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + /* line 213, ../sass/bootstrap/_carousel.scss */ + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + /* line 222, ../sass/bootstrap/_carousel.scss */ + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + /* line 226, ../sass/bootstrap/_carousel.scss */ + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + + /* line 233, ../sass/bootstrap/_carousel.scss */ + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + /* line 240, ../sass/bootstrap/_carousel.scss */ + .carousel-indicators { + bottom: 20px; + } +} +/* line 14, ../sass/bootstrap/mixins/_clearfix.scss */ +.clearfix:before, .clearfix:after { + content: " "; + display: table; +} +/* line 19, ../sass/bootstrap/mixins/_clearfix.scss */ +.clearfix:after { + clear: both; +} + +/* line 12, ../sass/bootstrap/_utilities.scss */ +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +/* line 15, ../sass/bootstrap/_utilities.scss */ +.pull-right { + float: right !important; +} + +/* line 18, ../sass/bootstrap/_utilities.scss */ +.pull-left { + float: left !important; +} + +/* line 27, ../sass/bootstrap/_utilities.scss */ +.hide { + display: none !important; +} + +/* line 30, ../sass/bootstrap/_utilities.scss */ +.show { + display: block !important; +} + +/* line 33, ../sass/bootstrap/_utilities.scss */ +.invisible { + visibility: hidden; +} + +/* line 36, ../sass/bootstrap/_utilities.scss */ +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +/* line 45, ../sass/bootstrap/_utilities.scss */ +.hidden { + display: none !important; + visibility: hidden !important; +} + +/* line 54, ../sass/bootstrap/_utilities.scss */ +.affix { + position: fixed; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +@-ms-viewport { + width: device-width; +} +/* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ +.visible-xs, .visible-sm, .visible-md, .visible-lg { + display: none !important; +} + +/* line 31, ../sass/bootstrap/_responsive-utilities.scss */ +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} + +@media (max-width: 767px) { + /* line 7, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .visible-xs { + display: block !important; + } + + /* line 10, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + table.visible-xs { + display: table; + } + + /* line 11, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + tr.visible-xs { + display: table-row !important; + } + + /* line 12, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + /* line 49, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-xs-block { + display: block !important; + } +} + +@media (max-width: 767px) { + /* line 54, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-xs-inline { + display: inline !important; + } +} + +@media (max-width: 767px) { + /* line 59, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-xs-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + /* line 7, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .visible-sm { + display: block !important; + } + + /* line 10, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + table.visible-sm { + display: table; + } + + /* line 11, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + tr.visible-sm { + display: table-row !important; + } + + /* line 12, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + /* line 68, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-sm-block { + display: block !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + /* line 73, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-sm-inline { + display: inline !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + /* line 78, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-sm-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + /* line 7, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .visible-md { + display: block !important; + } + + /* line 10, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + table.visible-md { + display: table; + } + + /* line 11, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + tr.visible-md { + display: table-row !important; + } + + /* line 12, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + /* line 87, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-md-block { + display: block !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + /* line 92, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-md-inline { + display: inline !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + /* line 97, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-md-inline-block { + display: inline-block !important; + } +} + +@media (min-width: 1200px) { + /* line 7, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .visible-lg { + display: block !important; + } + + /* line 10, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + table.visible-lg { + display: table; + } + + /* line 11, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + tr.visible-lg { + display: table-row !important; + } + + /* line 12, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + /* line 106, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-lg-block { + display: block !important; + } +} + +@media (min-width: 1200px) { + /* line 111, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-lg-inline { + display: inline !important; + } +} + +@media (min-width: 1200px) { + /* line 116, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-lg-inline-block { + display: inline-block !important; + } +} + +@media (max-width: 767px) { + /* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + /* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + /* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + /* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .hidden-lg { + display: none !important; + } +} +/* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ +.visible-print { + display: none !important; +} + +@media print { + /* line 7, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .visible-print { + display: block !important; + } + + /* line 10, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + table.visible-print { + display: table; + } + + /* line 11, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + tr.visible-print { + display: table-row !important; + } + + /* line 12, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +/* line 150, ../sass/bootstrap/_responsive-utilities.scss */ +.visible-print-block { + display: none !important; +} +@media print { + /* line 150, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-print-block { + display: block !important; + } +} + +/* line 157, ../sass/bootstrap/_responsive-utilities.scss */ +.visible-print-inline { + display: none !important; +} +@media print { + /* line 157, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-print-inline { + display: inline !important; + } +} + +/* line 164, ../sass/bootstrap/_responsive-utilities.scss */ +.visible-print-inline-block { + display: none !important; +} +@media print { + /* line 164, ../sass/bootstrap/_responsive-utilities.scss */ + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + /* line 18, ../sass/bootstrap/mixins/_responsive-visibility.scss */ + .hidden-print { + display: none !important; + } +} +/* line 2, ../sass/_pbs.overrides.scss */ +.help-block { + font-size: 12px !important; + font-style: italic; +} + +/* line 6, ../sass/_pbs.overrides.scss */ +.form-actions .btn-info { + min-width: 100px; + margin-left: 8px; +} + +/* line 10, ../sass/_pbs.overrides.scss */ +.form-horizontal { + width: 100%; +} + +/* line 13, ../sass/_pbs.overrides.scss */ +table td.control-label { + vertical-align: top; + text-transform: capitalize; +} + +/* line 17, ../sass/_pbs.overrides.scss */ +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +select { + color: #393939; + width: 55%; +} + +/* line 36, ../sass/_pbs.overrides.scss */ +textarea { + min-height: 100px; + resize: vertical; +} diff --git a/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.eot b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..4a4ca86 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.eot differ diff --git a/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.svg b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..e3e2dc7 --- /dev/null +++ b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.ttf b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..67fa00b Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.ttf differ diff --git a/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.woff b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..8c54182 Binary files /dev/null and b/smartsnippets/static/libs/bootstrap/css/bootstrap/glyphicons-halflings-regular.woff differ diff --git a/smartsnippets/static/libs/bootstrap/js/bootstrap.js b/smartsnippets/static/libs/bootstrap/js/bootstrap.js new file mode 100644 index 0000000..5752f39 --- /dev/null +++ b/smartsnippets/static/libs/bootstrap/js/bootstrap.js @@ -0,0 +1,2114 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript requires jQuery') } + +/* ======================================================================== + * Bootstrap: transition.js v3.2.0 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.2.0 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.2.0' + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.2.0 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.2.0' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + $el[val](data[state] == null ? this.options[state] : data[state]) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.2.0 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element).on('keydown.bs.carousel', $.proxy(this.keydown, this)) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.2.0' + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true + } + + Carousel.prototype.keydown = function (e) { + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.2.0 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.2.0' + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .panel > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + Plugin.call(actives, 'hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(350)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') option = !option + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var href + var $this = $(this) + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.2.0 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.2.0' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('