commit b882b2e661da0fa50135a3c340e1cac94d0c9175 Author: wkiv363 Date: Tue Jan 25 16:32:19 2022 +0100 voicbot diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b6a2e47 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM cstf2:latest +MAINTAINER "Gabriel Menessy" + +ENV LANG C.UTF-8 + +ENV TZ=Europe/Berlin +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN dpkg-reconfigure -f noninteractive tzdata +# +ADD containercontent / + +WORKDIR "/opt/chatbot_engine/" +# RUN ls -l + +# Server +EXPOSE 8001 +STOPSIGNAL SIGINT +ENTRYPOINT ["python3", "manage.py"] +CMD ["runserver", "0.0.0.0:8001"] + + diff --git a/containercontent/opt/chatbot_engine/chatbot/__init__.py b/containercontent/opt/chatbot_engine/chatbot/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-36.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..258fb33 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..5eac7bb Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..ca41dd4 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/__init__.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-36.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-36.pyc new file mode 100644 index 0000000..2347675 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-37.pyc new file mode 100644 index 0000000..ab721be Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000..4317bce Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/admin.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-36.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-36.pyc new file mode 100644 index 0000000..722f301 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-37.pyc new file mode 100644 index 0000000..de33f33 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000..c87fd84 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/apps.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-36.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-36.pyc new file mode 100644 index 0000000..fec9fba Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-37.pyc new file mode 100644 index 0000000..6873a0a Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-38.pyc new file mode 100644 index 0000000..a723c36 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/controller_ae.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-36.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000..729f0fe Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-37.pyc new file mode 100644 index 0000000..1cfa5bd Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000..36537c1 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/models.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-36.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000..16cb965 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-37.pyc new file mode 100644 index 0000000..46d49c6 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000..a427368 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/__pycache__/urls.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/admin.py b/containercontent/opt/chatbot_engine/chatbot/admin.py new file mode 100644 index 0000000..4bd3de3 --- /dev/null +++ b/containercontent/opt/chatbot_engine/chatbot/admin.py @@ -0,0 +1,27 @@ +from django.contrib import admin +from .models import Responce, Question, Question_Responce +# Register your models here. + +class QuestionAdmin(admin.ModelAdmin): + fieldsets = [ + (None, {'fields': ['session_id', 'question_text']}), + ('Date information', {'fields': ['publi_date'], 'classes': ['collapse']}), + ] + + +class ResponceAdmin(admin.ModelAdmin): + fieldsets = [ + (None, {'fields': ['session_id', 'responce_text']}), + ('Date information', {'fields': ['publi_date'], 'classes': ['collapse']}), + ] + +class Question_ResponceAdmin(admin.ModelAdmin): + fieldsets = [ + (None, {'fields': ['session_id', 'question_text', 'responce_text']}), + ('Date information', {'fields': ['publi_date'], 'classes': ['collapse']}), + ] + + +admin.site.register(Question, QuestionAdmin) +admin.site.register(Responce, ResponceAdmin) +admin.site.register(Question_Responce, Question_ResponceAdmin) \ No newline at end of file diff --git a/containercontent/opt/chatbot_engine/chatbot/apps.py b/containercontent/opt/chatbot_engine/chatbot/apps.py new file mode 100644 index 0000000..b9a7402 --- /dev/null +++ b/containercontent/opt/chatbot_engine/chatbot/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class chatbotConfig(AppConfig): + name = 'chatbot' diff --git a/containercontent/opt/chatbot_engine/chatbot/controller_ae.py b/containercontent/opt/chatbot_engine/chatbot/controller_ae.py new file mode 100644 index 0000000..9121240 --- /dev/null +++ b/containercontent/opt/chatbot_engine/chatbot/controller_ae.py @@ -0,0 +1,59 @@ +from django.http import JsonResponse +from django.template import loader +import json +from prodae import knn_ae as knn_ae +from time import gmtime, strftime +from chatbot.models import Question, Responce, Question_Responce + +from importlib import import_module +from django.conf import settings +SessionStore = import_module(settings.SESSION_ENGINE).SessionStore + + +def ae(request): + if request.method == 'POST': + jsonData = json.loads(request.body.decode('utf-8')) + msg = jsonData["msg"] + userId = jsonData["userId"] + klass1 = knn_ae.klassifizieren(msg) + klass = klass1[0:2] + intent1 = klass1[0][0] + accurancy1 = klass1[0][1] + if len(klass1)>1: + intent2 = klass1[1][0] + accurancy2 = klass1[1][1] + else: + intent2 = 'Null' + accurancy2 = 'Null' + klass = str(klass) + intent1 = str(intent1) + accurancy1 = str(accurancy1) + intent2 = str(intent2) + accurancy2 = str(accurancy2) + res = knn_ae.antwort(msg, jsonData["userId"]) + time = strftime("%Y-%m-%d %H:%M:%S", gmtime()) + #s = request.session + s = SessionStore() + s.save() + sess_id = s.session_key + print(request.session.session_key) + quest = Question(session_id=userId, question_text=msg, publi_date=time) + quest.save() + resp = Responce(session_id=userId, responce_text=res, publi_date=time) + resp.save() + qr = Question_Responce(session_id=userId, question_text=msg, intent1=intent1, accurancy1=accurancy1, intent2=intent2, accurancy2=accurancy2, responce_text=res, publi_date=time) + qr.save() + return JsonResponse({ + "desc": "Success", + "klass": klass, + "intent1": intent1, + "accurancy1": accurancy1, + "intent2": intent2, + "accurancy2": accurancy2, + "ques": msg, + "res": res, + "user": userId, + "time": time + }) + else: + return JsonResponse({"desc": "Bad request"}, status=400) \ No newline at end of file diff --git a/containercontent/opt/chatbot_engine/chatbot/migrations/0001_initial.py b/containercontent/opt/chatbot_engine/chatbot/migrations/0001_initial.py new file mode 100644 index 0000000..463e684 --- /dev/null +++ b/containercontent/opt/chatbot_engine/chatbot/migrations/0001_initial.py @@ -0,0 +1,46 @@ +# Generated by Django 3.1.5 on 2021-04-30 14:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Question', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('session_id', models.CharField(blank=True, max_length=200, null=True)), + ('question_text', models.CharField(max_length=200)), + ('publi_date', models.DateTimeField(verbose_name='date published')), + ], + ), + migrations.CreateModel( + name='Question_Responce', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('session_id', models.CharField(blank=True, max_length=200, null=True)), + ('question_text', models.CharField(max_length=200)), + ('intent1', models.CharField(max_length=200)), + ('accurancy1', models.CharField(max_length=200)), + ('intent2', models.CharField(max_length=200)), + ('accurancy2', models.CharField(max_length=200)), + ('responce_text', models.CharField(max_length=200)), + ('publi_date', models.DateTimeField(verbose_name='date published')), + ], + ), + migrations.CreateModel( + name='Responce', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('session_id', models.CharField(blank=True, max_length=200, null=True)), + ('responce_text', models.CharField(max_length=200)), + ('publi_date', models.DateTimeField(verbose_name='date published')), + ], + ), + ] diff --git a/containercontent/opt/chatbot_engine/chatbot/migrations/__init__.py b/containercontent/opt/chatbot_engine/chatbot/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/0001_initial.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/0001_initial.cpython-37.pyc new file mode 100644 index 0000000..81c8a80 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/0001_initial.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/0001_initial.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000..057c943 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/__init__.cpython-37.pyc b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..5a3577c Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/__init__.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/__init__.cpython-38.pyc b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..6a2e1b0 Binary files /dev/null and b/containercontent/opt/chatbot_engine/chatbot/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/chatbot/models.py b/containercontent/opt/chatbot_engine/chatbot/models.py new file mode 100644 index 0000000..e624ba0 --- /dev/null +++ b/containercontent/opt/chatbot_engine/chatbot/models.py @@ -0,0 +1,43 @@ +from django.db import models +import datetime +from django.utils import timezone +# Create your models here. +#Nach Änderung von models dann delete datenbank und dann makemigrations chatbot und dann migrate + +class Question(models.Model): + session_id = models.CharField(max_length=200, blank=True, null=True) + question_text = models.CharField(max_length=200) + publi_date = models.DateTimeField('date published') + + def __str__(self): + return self.question_text + + def was_published_recently(self): + now = timezone.now() + return now - datetime.timedelta(days=1) <= self.publi_date <= now + + was_published_recently.admin_order_field = 'publi_date' + was_published_recently.boolean = True + was_published_recently.short_description = 'Published recently?' + + +class Responce(models.Model): + session_id = models.CharField(max_length=200, blank=True, null=True) + responce_text = models.CharField(max_length=200) + publi_date = models.DateTimeField('date published') + + def __str__(self): + return self.responce_text + +class Question_Responce(models.Model): + session_id = models.CharField(max_length=200, blank=True, null=True) + question_text = models.CharField(max_length=200) + intent1 = models.CharField(max_length=200) + accurancy1 = models.CharField(max_length=200) + intent2 = models.CharField(max_length=200) + accurancy2 = models.CharField(max_length=200) + responce_text = models.CharField(max_length=200) + publi_date = models.DateTimeField('date published') + + def __str__(self): + return self.question_text diff --git a/containercontent/opt/chatbot_engine/chatbot/urls.py b/containercontent/opt/chatbot_engine/chatbot/urls.py new file mode 100644 index 0000000..b7dd5cc --- /dev/null +++ b/containercontent/opt/chatbot_engine/chatbot/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from django.conf.urls import url + +from . import controller_ae + +urlpatterns = [ + path('/chatbot', controller_ae.ae) +] diff --git a/containercontent/opt/chatbot_engine/db.sqlite3 b/containercontent/opt/chatbot_engine/db.sqlite3 new file mode 100644 index 0000000..4086118 Binary files /dev/null and b/containercontent/opt/chatbot_engine/db.sqlite3 differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__init__.py b/containercontent/opt/chatbot_engine/dialogAssistent/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-36.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..11570e6 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-37.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..4336173 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-38.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..eea61d5 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/__init__.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-36.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000..e8eede5 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-37.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-37.pyc new file mode 100644 index 0000000..17752fe Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-38.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-38.pyc new file mode 100644 index 0000000..e137cea Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/settings.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-36.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000..29a6c4d Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-37.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-37.pyc new file mode 100644 index 0000000..d952959 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-38.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000..182555e Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/urls.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-36.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000..0cb8555 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-37.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-37.pyc new file mode 100644 index 0000000..ad31035 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-38.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000..f23f0b4 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/views.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-36.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-36.pyc new file mode 100644 index 0000000..61894ff Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-36.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-37.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-37.pyc new file mode 100644 index 0000000..cae92a5 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-38.pyc b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-38.pyc new file mode 100644 index 0000000..020a211 Binary files /dev/null and b/containercontent/opt/chatbot_engine/dialogAssistent/__pycache__/wsgi.cpython-38.pyc differ diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/settings.py b/containercontent/opt/chatbot_engine/dialogAssistent/settings.py new file mode 100644 index 0000000..e5ed6fd --- /dev/null +++ b/containercontent/opt/chatbot_engine/dialogAssistent/settings.py @@ -0,0 +1,132 @@ +""" +Django settings for ortena_chatbot project. + +Generated by 'django-admin startproject' using Django 2.0.7. + +For more information on this file, see +https://docs.djangoproject.com/en/2.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.0/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '-h)4epd%%i5h7j^q28(b3oezib!9z+lo19z(t_$y1*rbf!*@*2' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['k1z06s042.komm.one', '127.0.0.1', '0.0.0.0', '89.58.12.121','voicebot.digitalakademie-bw.de'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'chatbot.apps.chatbotConfig', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + #'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'dialogAssistent.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.path.join(BASE_DIR, 'templates')] + , + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'dialogAssistent.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.0/ref/settings/#databases + +DATABASES = { + + +#'default': { + # 'ENGINE': 'django.db.backends.sqlite3', + # 'NAME': os.path.join('/opt/chatbot_engine/models/db/', 'db.sqlite3'), + # } + +'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +# Password validation +# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Europe/Berlin' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.0/howto/static-files/ + +STATIC_URL = '/static/' +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "static"), + '/opt/chatbot_engine/static', +] diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/urls.py b/containercontent/opt/chatbot_engine/dialogAssistent/urls.py new file mode 100644 index 0000000..088b343 --- /dev/null +++ b/containercontent/opt/chatbot_engine/dialogAssistent/urls.py @@ -0,0 +1,28 @@ +"""fuehrungszeugnis_chatbot URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path, include,re_path +from . import views + +urlpatterns = [ + path('admin/', admin.site.urls), + path('chatbot/', views.index_ae), +path('Über/', views.ueber), +path('Kontakt/', views.kontakt), +path('chatbot/Über/', views.ueber), +path('chatbot/Kontakt/', views.kontakt), + path('chatbot', include("chatbot.urls")) +] diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/views.py b/containercontent/opt/chatbot_engine/dialogAssistent/views.py new file mode 100644 index 0000000..32daa51 --- /dev/null +++ b/containercontent/opt/chatbot_engine/dialogAssistent/views.py @@ -0,0 +1,57 @@ + +#def editor(request): + #now = datetime.datetime.now() + #headers = request.headers + #print("headers", headers) + #request.headers['User-Agent'] + #return JsonResponse({"status": "Kommunikation ok!", "sucess": "true", "time": now}) + + +from django.http import HttpResponse +from django.template import loader +from django.http import JsonResponse +import datetime +import json +import importlib +from django.shortcuts import redirect +import os +import inspect +import re +import platform +from summarize import summarize + +def creation_date(path_to_file): + """ + Try to get the date that a file was created, falling back to when it was + last modified if that isn't possible. + See http://stackoverflow.com/a/39501288/1709587 for explanation. + """ + if platform.system() == 'Windows': + return datetime.datetime.fromtimestamp(os.path.getctime(path_to_file)) + else: + stat = os.stat(path_to_file) + try: + return datetime.datetime.fromtimestamp(stat.st_birthtime) + except AttributeError: + # We're probably on Linux. No easy way to get creation dates here, + # so we'll settle for when its content was last modified. + return datetime.datetime.fromtimestamp(stat.st_ctime) + + + +def index_ae(request, str='chatbot/chatbot'): + name= request.path + print(name) + template = loader.get_template('template_ae.html') + return HttpResponse(template.render({}, request)) + + +def ueber(request): + template = loader.get_template('Über.html') + return HttpResponse(template.render({}, request)) + +def kontakt(request): + template = loader.get_template('Kontakt.html') + return HttpResponse(template.render({}, request)) + + diff --git a/containercontent/opt/chatbot_engine/dialogAssistent/wsgi.py b/containercontent/opt/chatbot_engine/dialogAssistent/wsgi.py new file mode 100644 index 0000000..8700e16 --- /dev/null +++ b/containercontent/opt/chatbot_engine/dialogAssistent/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for ortena project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dialogAssistent.settings") + +application = get_wsgi_application() diff --git a/containercontent/opt/chatbot_engine/manage.py b/containercontent/opt/chatbot_engine/manage.py new file mode 100644 index 0000000..8dbab1d --- /dev/null +++ b/containercontent/opt/chatbot_engine/manage.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dialogAssistent.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/containercontent/opt/chatbot_engine/prodae/__pycache__/knn_ae.cpython-37.pyc b/containercontent/opt/chatbot_engine/prodae/__pycache__/knn_ae.cpython-37.pyc new file mode 100644 index 0000000..8f70102 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/__pycache__/knn_ae.cpython-37.pyc differ diff --git a/containercontent/opt/chatbot_engine/prodae/knn_ae.py b/containercontent/opt/chatbot_engine/prodae/knn_ae.py new file mode 100644 index 0000000..85b8cfd --- /dev/null +++ b/containercontent/opt/chatbot_engine/prodae/knn_ae.py @@ -0,0 +1,2550 @@ +import nltk +from nltk.stem.snowball import GermanStemmer + +# import timeit +stemmer = GermanStemmer() +from nltk.corpus import stopwords + +import numpy as np +import random +import os +import inspect +import tensorflow as tf +import tflearn + +import re +import string + +import fnmatch +import os +import re +import requests +from bs4 import BeautifulSoup + +tf.compat.v1.reset_default_graph() + +##print('Ich bin in knn_ae!!!!!!!') + +import pickle +import json + +import fnmatch +import os +import inspect + + +def getJsonPath(): + path1 = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + path = os.path.join(path1, 'models/chat.json').replace("\\", "/") + return path + + +def getJsonPathEnt(): + path1 = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + path = os.path.join(path1, 'models/chat.json').replace("\\", "/") + return path + + +#########lade json################## +with open(getJsonPath(), encoding='UTF-8') as json_data: + dialogflow = json.load(json_data) + # ##print(dialogflow) + +##########Schreibfehler Korrektur +from spellchecker import SpellChecker + +spell = SpellChecker(language='de') + +spell.word_frequency.load_words \ + (['!', '2', 'ab', 'abend', 'abgeben', 'abkürzung', 'adresse', 'adresse_infoorte', 'aktiv', 'alles', 'alt', 'amt', 'an', 'and', 'anmelden', 'ansprechen', 'ansprechpartner', 'antworten', 'are', 'arsch', 'arschgesicht', 'arschloch', 'auf', 'ausfüllen', 'bald', 'beantragen', 'bearbeitungsdauer', 'bedeutet', 'behörde', 'bei', 'bekacktes', 'bekomme', 'bescheid', 'bestellen', 'bezahlen', 'bis', 'bitch', 'blödian', 'brauche', 'brauchen', 'braucht', 'bye', 'ciao', 'dafür', 'dahin', 'dank', 'danke', 'darf', 'das', 'datum', 'dauert', 'dein', 'deine', 'dich', 'dir', 'du', 'e-mail', 'einreichen', 'einsehen', 'email', 'erfüllen', 'erreichbar', 'erreichbarkeit', 'erreichen', 'erzähl', 'erzähle', 'euro', 'existiert', 'fahrerlaubnis', 'fertig', 'fick', 'finde', 'flachzange', 'formulare', 'fotze', 'fragen', 'fresse', 'frida', 'frist', 'fristen', 'fuck', 'führerschein', 'führerscheinantrag', 'führerscheinklasse', 'für', 'geben', 'geboren', 'geburtstag', 'gebühr', 'gehen', 'geholfen', 'geht', 'gehts', 'gelten', 'genehmigung', 'geprüft', 'gesetz', 'gesetzliche', 'gesichtselfmeter', 'geöffnet', 'gibst', 'gibt', 'gott', 'grund', 'grüss', 'grüß', 'gut', 'guten', 'götter', 'göttinnen', 'hallo', 'halt', 'hast', 'hat', 'heißt', 'hello', 'heute', 'hey', 'hi', 'hilfe', 'hilfreich', 'hinblättern', 'hingehen', 'hoch', 'how', 'hurensohn', 'hürden', 'iban', 'ich', 'idiot', 'ihnen', 'ihre', 'in', 'info', 'informationen', 'infos', 'innerhalb', 'internet', 'irgendwas', 'ist', 'jemand', 'jemanden', 'joke', 'kackwurst', 'kann', 'kannst', 'kennst', 'klar', 'kommen', 'kopie', 'kosten', 'kostenlos', 'kostet', 'kriege', 'lang', 'lange', 'leben', 'locker', 'loser', 'lustiges', 'läuft', 'machst', 'macht', 'mal', 'maul', 'mehr', 'melden', 'mitbringen', 'morgen', 'muss', 'münzt', 'müssen', 'nach', 'nachweis', 'name', 'nicht', 'off', 'offen', 'online', 'onlineformular', 'opfer', 'original', 'papiere', 'paragraphen', 'passiert', 'penner', 'personalausweis', 'persönlich', 'privatklage', 'rathaus', 'rauszufinden', 'rechtlich', 'rechtsgrundlage', 'reicht', 'reisepass', 'rund', 'sagt', 'sbw_preamble', 'schauen', 'scheiße', 'schnell', 'schon', 'seelenloser', 'seelsorge', 'seit', 'selbstmord', 'servus', 'sex', 'sichtbar', 'sie', 'spreche', 'sprechen', 'spricht', 'spät', 'steht', 'stelle', 'stellt', 'sterben', 'suizid', 'tag', 'telefon', 'telefonnumer', 'telefonseelsorge', 'teuer', 'toll', 'tschüss', 'tun', 'uhr', 'uhrzeit', 'uhrzeiten', 'umbringen', 'ummelden', 'unterlagen', 'verabschiede', 'verfahren', 'verfahrensablauf', 'verordnung', 'viele', 'vielen', 'vollidiot', 'voraussetzungen', 'vorbeikommen', 'vorzeigen', 'wann', 'warten', 'warum', 'was', 'weit', 'weißt', 'welche', 'welches', 'wellche', 'wem', 'wen', 'wenden', 'wer', 'wichser', 'wie', 'wiedersehen', 'wieviel', 'wissen', 'witz', 'witze', 'wo', 'wochen', 'wofür', 'woher', 'you', 'zeig', 'zeit', 'zimmer', 'zu', 'zuständig', 'zuständige', 'öffnet', 'öffnungszeiten', '17', '18', 'a', 'ab', 'abgenommen', 'abhanden', 'alten', 'and', 'anhängerführerschein', 'auffindbar', 'ausland', 'ausländischer', 'b96', 'be', 'beantragen', 'befristet', 'befristeter', 'beförderung', 'begleitetes', 'begleitung', 'bekommen', 'bf', 'bf17', 'bus', 'c', 'ce', 'deutscher', 'einkassiert', 'entziehung', 'entzogen', 'entzug', 'erlaubnis', 'ersatz', 'ersatzführerschein', 'ersterteilung', 'erweitern', 'erweiterung', 'eu', 'eu-führerschein', 'fahren', 'fahrerlaubnis', 'fahrerlaubnisentzug', 'fahrgastbeförderung', 'finde', 'führerschein', 'führerscheinentzug', 'führerscheinerweiterung', 'führerscheinklasse', 'führerscheintausch', 'führerscheinumtausch', 'führerscheinverlust', 'führerscheinverlängerung', 'gefunden', 'gekommen', 'geändert', 'heirat', 'international', 'internationaler', 'jahren', 'jugendliche', 'karte', 'kartenführerschein', 'klasse', 'lappen', 'mehr', 'minderjährig', 'nachname', 'name', 'namen', 'namensänderung', 'neuer', 'neuerteilung', 'nicht', 'personen', 'personenbeförderung', 'pflichtumtausch', 'scheidung', 'tauschen', 'taxi', 'taxischein', 'umtausch', 'umtauschen', 'verloren', 'verlust', 'verlängern', 'verlängerung', 'wechseln', 'weit', 'wiedererteilung', 'ändern', 'änderung', 'öpnv', 'ab', 'abgelaufen', 'abhanden', 'ablauf', 'ablaufen', 'abzumelden', 'adresse', 'adressen', 'afrika', 'amerika', 'and', 'anschrift', 'anschriftes', 'anschrifts', 'ansprechpartner', 'anzumelden', 'argentinien', 'asien', 'auflösen', 'ausgelaufen', 'aushändigung', 'auskunft', 'ausrauben', 'australien', 'außerhalb', 'bearbeitung', 'bearbeitungsdauer', 'bedingung', 'bedingungen', 'beendet', 'belgien', 'bescheid', 'bezahlen', 'brasilien', 'bulgarien', 'bürgerbüro', 'china', 'dauer', 'dauern', 'dauert', 'deutschland', 'doppelname', 'drillinge', 'dänemark', 'ehe', 'ehename', 'ehenamen', 'einsegnen', 'ersetzen', 'erstmalig', 'estland', 'eu', 'europa', 'europäische', 'fahrausweis', 'fahrberechtigung', 'fahrerlaubnis', 'fahrerlaubnisbehörde', 'familienname', 'fingerabdruck', 'finnland', 'format', 'frankreich', 'frist', 'fristen', 'futschikato', 'führerschein', 'führerscheinbehörde', 'führerscheinstelle', 'führerschien', 'geburtsname', 'gebühr', 'gebühren', 'geheiratet', 'geklaut', 'geschieden', 'gesetz', 'gesetze', 'gesetzliche', 'gestohlen', 'getraut', 'getrennt', 'gewechselt', 'geändert', 'griechenland', 'grund', 'heirat', 'heiraten', 'hinblätern', 'hochzeit', 'hürden', 'indonesien', 'irland', 'italien', 'japan', 'jugendlich', 'kanada', 'kaputt', 'kind', 'kinder', 'kleinkind', 'kopie', 'kosten', 'kostenlos', 'kostet', 'kroatien', 'kuba', 'land', 'lange', 'lebensgemeinschaft', 'lebenspartnerschaft', 'lettland', 'liegen', 'litauen', 'luxemburg', 'läuft', 'malta', 'marokko', 'mexiko', 'motorradführerschein', 'mädchenname', 'münzt', 'nachame', 'nachname', 'nachnamen', 'nachnamens', 'nachweis', 'name', 'namen', 'namenswechsel', 'namensänderung', 'neuseeland', 'nicht', 'nichtgültig', 'nichtmehrgültig', 'nichtmehrverheiratet', 'nichtmehrzusammen', 'nichtverheiratet', 'nichtzusammen', 'niederlande', 'nordamerika', 'original', 'paragraph', 'paragraphen', 'polen', 'portugal', 'rechtlich', 'rechtsgrundlage', 'rechtsgrundlagev', 'rumänien', 'russland', 'scheiden', 'scheidung', 'schweden', 'schwinden', 'slowakei', 'slowenien', 'sohn', 'spanien', 'staaten', 'stehlen', 'stelle', 'südafrika', 'südamerika', 'teuer', 'thailand', 'tochter', 'trauen', 'trauung', 'trennen', 'tschechien', 'tunesien', 'turkei', 'ukraine', 'umzumelden', 'unauffindbar', 'ungarn', 'ungütlig', 'union', 'unterlagen', 'usa', 'veraltet', 'verehelichen', 'vereinigte', 'verfahren', 'verfahrens', 'verfahrensablauf', 'verfallen', 'verjährt', 'verlaufen', 'verlegt', 'verlieren', 'verloben', 'verlobt', 'verloren', 'verlust', 'verlängern', 'verläuft', 'vermisst', 'vermählen', 'verordnung', 'verordnungen', 'verschollen', 'verstorben', 'versunken', 'vietnam', 'voraussetzung', 'voraussetzungen', 'vorschrift', 'vorschriften', 'warten', 'wechseln', 'wegkommen', 'weit', 'wenden', 'wiederholt', 'wohnungsadresse', 'zahlen', 'zuständig', 'zuständige', 'zuständigkeit', 'zwillinge', 'zypern', 'ägypten', 'ändern', 'änderung', 'österreich', 'ablauf', 'and', 'anrufen', 'ansprechpartner', 'ausfüllen', 'aushändigung', 'auskunft', 'bearbeitung', 'bearbeitungsdauer', 'bedingung', 'bedingungen', 'behörde', 'belegen', 'bescheid', 'bezahlen', 'dauer', 'dauern', 'dauert', 'einsehen', 'erfüllen', 'erfüllt', 'fingerabdruck', 'format', 'formulare', 'frist', 'fristen', 'funktion', 'funktionen', 'gebühr', 'gebühren', 'gesetz', 'gesetze', 'gesetzliche', 'grund', 'hinblätern', 'hürden', 'kollege', 'kopie', 'kosten', 'kostenlos', 'kostet', 'kriterien', 'mitbringen', 'münzt', 'nachweis', 'nicht', 'online', 'original', 'paragraph', 'paragraphen', 'persönlich', 'rechtlich', 'rechtsgrundlage', 'rechtsgrundlagev', 'spätestens', 'teuer', 'unterlagen', 'verfahren', 'verfahrens', 'verfahrensablauf', 'verlaufen', 'verläuft', 'verordnung', 'verordnungen', 'voraussetzung', 'voraussetzungen', 'vorschrift', 'vorschriften', 'vorzeigen', 'weit', 'wenden', 'zahlen', 'zeit', 'zeitpunkt', 'zuständig', 'zuständigkeit', 'sbw_oeffnungszeiten_6008813', 'sbw_oeffnungszeiten_348', 'sbw_oeffnungszeiten_6004851', 'sbw_oeffnungszeiten_914', 'sbw_oeffnungszeiten_6004853', 'sbw_oeffnungszeiten_6004855', 'sbw_oeffnungszeiten_6004849', 'sbw_oeffnungszeiten_6004859', 'sbw_oeffnungszeiten_291', 'sbw_oeffnungszeiten_544', 'sbw_oeffnungszeiten_6004857', 'sbw_bearbeitungsdauer_6008813', 'sbw_vertiefendeinformationen_6008813', 'sbw_kosten_6008813', 'sbw_bezugsort_6008813', 'sbw_fristen_6008813', 'sbw_voraussetzungen_6008813', 'sbw_kosten_348', 'sbw_bearbeitungsdauer_348', 'sbw_vertiefendeinformationen_348', 'sbw_sonstiges_348', 'sbw_rechtsgrundlage_348', 'sbw_freigabevermerk_348', 'sbw_formulare_348', 'sbw_prozesse_348', 'sbw_organisationseinheiten_348', 'sbw_verfahrensablauf_6004851', 'sbw_fristen_6004851', 'sbw_unterlagen_6004851', 'sbw_kosten_6004851', 'sbw_bearbeitungsdauer_6004851', 'sbw_vertiefendeinformationen_6004851', 'sbw_sonstiges_6004851', 'sbw_rechtsgrundlage_6004851', 'sbw_freigabevermerk_6004851', 'sbw_zustaendigkeit_6008813', 'sbw_unterlagen_6008813', 'sbw_sonstiges_6008813', 'sbw_voraussetzungen_348', 'sbw_zustaendigkeit_348', 'sbw_bezugsort_348', 'sbw_verfahrensablauf_348', 'sbw_fristen_348', 'sbw_unterlagen_348', 'sbw_preamble_6004851', 'sbw_voraussetzungen_6004851', 'sbw_zustaendigkeit_6004851', 'sbw_bezugsort_6004851', 'sbw_rechtsgrundlage_6008813', 'sbw_freigabevermerk_6008813', 'sbw_preamble_348', 'sbw_organisationseinheiten_6004851', 'sbw_preamble_914', 'sbw_voraussetzungen_914', 'sbw_zustaendigkeit_914', 'sbw_bezugsort_914', 'sbw_fristen_914', 'sbw_verfahrensablauf_914', 'sbw_unterlagen_914', 'sbw_kosten_914', 'sbw_bearbeitungsdauer_914', 'sbw_vertiefendeinformationen_914', 'sbw_sonstiges_914', 'sbw_rechtsgrundlage_914', 'sbw_freigabevermerk_914', 'sbw_formulare_914', 'sbw_prozesse_914', 'sbw_organisationseinheiten_914', 'sbw_formulare_6004851', 'sbw_prozesse_6004851', 'sbw_preamble_6008813', 'sbw_verfahrensablauf_6008813', 'sbw_preamble_6004857', 'sbw_voraussetzungen_6004857', 'sbw_zustaendigkeit_6004857', 'sbw_bezugsort_6004857', 'sbw_verfahrensablauf_6004857', 'sbw_fristen_6004857', 'sbw_unterlagen_6004857', 'sbw_kosten_6004857', 'sbw_bearbeitungsdauer_6004857', 'sbw_vertiefendeinformationen_6004857', 'sbw_sonstiges_6004857', 'sbw_preamble_6004859', 'sbw_voraussetzungen_6004859', 'sbw_zustaendigkeit_6004859', 'sbw_bezugsort_6004859', 'sbw_verfahrensablauf_6004859', 'sbw_fristen_6004859', 'sbw_unterlagen_6004859', 'sbw_kosten_6004859', 'sbw_bearbeitungsdauer_6004859', 'sbw_vertiefendeinformationen_6004859', 'sbw_sonstiges_6004859', 'sbw_rechtsgrundlage_6004859', 'sbw_freigabevermerk_6004859', 'sbw_formulare_6004859', 'sbw_prozesse_6004859', 'sbw_organisationseinheiten_6004859', 'sbw_preamble_291', 'sbw_voraussetzungen_291', 'sbw_zustaendigkeit_291', 'sbw_bezugsort_291', 'sbw_verfahrensablauf_291', 'sbw_fristen_291', 'sbw_unterlagen_291', 'sbw_kosten_291', 'sbw_bearbeitungsdauer_291', 'sbw_vertiefendeinformationen_291', 'sbw_sonstiges_291', 'sbw_rechtsgrundlage_291', 'sbw_freigabevermerk_291', 'sbw_formulare_291', 'sbw_prozesse_291', 'sbw_organisationseinheiten_291', 'sbw_freigabevermerk_6004857', 'sbw_rechtsgrundlage_6004857', 'sbw_formulare_6004857', 'sbw_prozesse_6004857', 'sbw_organisationseinheiten_6004857', 'sbw_preamble_544', 'sbw_voraussetzungen_544', 'sbw_zustaendigkeit_544', 'sbw_bezugsort_544', 'sbw_verfahrensablauf_544', 'sbw_fristen_544', 'sbw_unterlagen_544', 'sbw_kosten_544', 'sbw_bearbeitungsdauer_544', 'sbw_vertiefendeinformationen_544', 'sbw_sonstiges_544', 'sbw_rechtsgrundlage_544', 'sbw_freigabevermerk_544', 'sbw_formulare_544', 'sbw_prozesse_544', 'sbw_organisationseinheiten_544', 'sbw_preamble_6004853', 'sbw_voraussetzungen_6004853', 'sbw_zustaendigkeit_6004853', 'sbw_bezugsort_6004853', 'sbw_verfahrensablauf_6004853', 'sbw_fristen_6004853', 'sbw_unterlagen_6004853', 'sbw_kosten_6004853', 'sbw_bearbeitungsdauer_6004853', 'sbw_vertiefendeinformationen_6004853', 'sbw_sonstiges_6004853', 'sbw_rechtsgrundlage_6004853', 'sbw_freigabevermerk_6004853', 'sbw_formulare_6004853', 'sbw_prozesse_6004853', 'sbw_organisationseinheiten_6004853', 'sbw_preamble_6004855', 'sbw_voraussetzungen_6004855', 'sbw_zustaendigkeit_6004855', 'sbw_bezugsort_6004855', 'sbw_verfahrensablauf_6004855', 'sbw_fristen_6004855', 'sbw_unterlagen_6004855', 'sbw_kosten_6004855', 'sbw_bearbeitungsdauer_6004855', 'sbw_vertiefendeinformationen_6004855', 'sbw_sonstiges_6004855', 'sbw_rechtsgrundlage_6004855', 'sbw_freigabevermerk_6004855', 'sbw_preamble_6004849', 'sbw_voraussetzungen_6004849', 'sbw_zustaendigkeit_6004849', 'sbw_bezugsort_6004849', 'sbw_verfahrensablauf_6004849', 'sbw_fristen_6004849', 'sbw_unterlagen_6004849', 'sbw_kosten_6004849', 'sbw_bearbeitungsdauer_6004849', 'sbw_vertiefendeinformationen_6004849', 'sbw_sonstiges_6004849', 'sbw_rechtsgrundlage_6004849', 'sbw_freigabevermerk_6004849', 'sbw_formulare_6004849', 'sbw_prozesse_6004849', 'sbw_organisationseinheiten_6004849' +]) +################################################### +import numpy as np + +import random +import os +import inspect + + +def getPath(file): + path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + path = os.path.join(path, file).replace("\\", "/") + return path + + +from nltk.tokenize import sent_tokenize + +#from summarize import summarize +# Veranstaltungskalender +############################################## +from datetime import timedelta +from datetime import date +from datetime import datetime + + +def next_weekday(d, weekday): + days_ahead = weekday - d.weekday() + if days_ahead <= 0: # Target day already happened this week + days_ahead += 7 + return d + timedelta(days_ahead) + + +def past_weekday(d, weekday): + days_ahead = weekday - d.weekday() + if days_ahead <= 0: # Target day already happe#######################ned this week + days_ahead -= 7 + return d + timedelta(days_ahead) + + +def sum_kata(text): + print(type(text)) + if '

Bitte beachten Sie:

' in text: + print('hierkata') + text=text.replace('

Bitte beachten Sie:

', '') + print('textkata', text) + if '

----------------------------------------------------------------------------------------------

' in text: + text=text.replace('

----------------------------------------------------------------------------------------------

', '') + article_text = BeautifulSoup(text, "html.parser") + print('article_text', article_text) + print('article_text', type(article_text)) + + paragraphs = article_text.find_all('p') + print('paragraphs', paragraphs) + print(type(paragraphs)) + anfangtext='' + + text2 = " " + + + #if len(paragraphs)>1: + if len(paragraphs) > 0: + anfangtext=paragraphs[0] + print('anfangtext', anfangtext) + paragraphs.remove(anfangtext) + anfangtext=str(anfangtext) + + print ('anfangtext', anfangtext) + print('paragraphs2', paragraphs) + + #for p in paragraphs: + #text2 = text2 + ' ' + '

' + p.text + '

' + + #text2 = re.sub(r"[-]", "", text2) + #text2 = text2.replace('Bitte beachten Sie:', '') + # print('article_text', article_text) + #print('text2', text2) + #sum = summarize(text2, sentence_count=1, language='german') + #sum = '

' + sum + '

' + #if anfangtext in sum: + #sum=sum + #print('sum', sum) + + #else: + #sum = anfangtext + sum + + anfangtext = re.sub(r"[-]", "", anfangtext) + sum = anfangtext + print('sum2', sum) + return sum + + +#################Wetter######## + +numbers = "(^a(?=\s)|eins|eine|einen|einer|einem|zwei|drei|vier|fünf|sechs|sieben|acht|neun|zehn|elf|zwölf|dreizehn|vierzehn|fünfzehn|sechszehn|siebzehn|achtzehn|neunzehn|zwanzig|dreizig|vierzig|fünfzig|sechszig|siebzig|achtzig|neunzig|hundert|tausend|1|2|3|4|5|6|7|8|9)" +day = "(montag|dienstag|mittwoch|donnerstag|freitag|samstag|sonntag)" +week_day = "(montag|dienstag|mittwoch|donnerstag|freitag|samstag|sonntag)" +month = "(januar|februar|märz|april|may|june|july|august|september|oktober|november|dezember)" +# dmy = "(wochenende|jahr|tag|woche|monat)" +dmy = "(jahr|tag|woche|monat)" +rel_day = "(heute|gestern|morgen|übermorgen)" +exp1 = "(vor|nach|in|im|später|)" +exp2 = "(diese|dieses|dieser|diesen|diesem|nächste|nächstes|nächster|nächstem|nächsten|letzte|letztes|letzter|letztem|letzten)" +# iso = "\d+[/.]\d+[/.]" +iso = "\d+[/.]\d+" +iso2 = "\d+[/.]" +year = "((?<=\s)\d{4}|^\d{4})" +# regxp1 = "((\d+|(" + numbers + "[-\s]?)+) " + dmy + "n? " + exp1 + ")" +regxp1 = "((\d+|(" + exp1 + "[-\s]?)+) " + numbers + "n? " + dmy + ")" + +regxp2 = "(" + exp2 + " (" + dmy + "|" + week_day + "|" + month + "))" +regxp8 = "(" + iso2 + " (" + month + "))" + +date1 = "([012]?[0-9]|3[01])" +regxp6 = "(" + date1 + " " + month + ")" +# regxp4 = "(" + month + " " + date + "[te]?[,]? " + year + ")" + +reg1 = re.compile(regxp1, re.IGNORECASE) +reg2 = re.compile(regxp2, re.IGNORECASE) +#####print(reg2) +reg3 = re.compile(rel_day, re.IGNORECASE) +reg4 = re.compile(iso) +reg5 = re.compile("wochenende") +reg9 = re.compile("Wochenende") +#####print(reg5) +reg6 = re.compile(regxp6, re.IGNORECASE) +reg7 = re.compile(day, re.IGNORECASE) +reg8 = re.compile(regxp8, re.IGNORECASE) +reg10 = re.compile(month, re.IGNORECASE) + + +def extractDate(text): + # Initialization + timex_found = [] + + # re.findall() finds all the substring matches, keep only the full + # matching string. Captures expressions such as 'number of days' ago, etc. + found = reg1.findall(text) + #####print('reg1') + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('1. reg1', timex) + timex = timex.replace('ein', '1') + timex = timex.replace('eine', '1') + timex = timex.replace('einen', '1') + timex = timex.replace('einer', '1') + timex = timex.replace('einem', '1') + timex = timex.replace('zwei', '2') + timex = timex.replace('drei', '3') + timex = timex.replace('vier', '4') + timex = timex.replace('fünf', '5') + timex = timex.replace('sechs', '6') + timex = timex.replace('sieben', '7') + timex = timex.replace('acht', '8') + timex = timex.replace('neun', '9') + timex = timex.replace('zehn', '10') + timex = timex.replace('nach', 'in') + + timex1 = (dateparser.parse('in' + timex)).strftime('%d.%m.%Y') + right_now_str = date.today().strftime('%d.%m.%Y') + z00 = right_now_str + timex_found.append(z00) + timex_found.append(timex1) + + # Variations of this thursday, next year, etc + + # Variations of month and iso + reg8.findall(text) + #####print('reg8') + found = reg8.findall(text) + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg8', timex) + timex1 = dateparser.parse(timex).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(timex1) + + found = reg2.findall(text) + #####print('reg2') + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg2', timex) + if any(c in timex for c in ['nächste']): + if any(d in timex for d in ['woche', 'Woche']): + glanceweek = timedelta(days=6) + #####print(glanceweek) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday_d = next_weekday(right_now, 0) + z01 = (next_monday_d + glanceweek) + z00 = next_monday + z01 = z01.strftime('%d.%m.%Y') + + if any(d in timex for d in ['tag', 'Tag']): + glanceweek = timedelta(days=7) + #####print(glanceweek) + right_now = date.today() + next_monday = right_now.strftime('%d.%m.%Y') + z01 = (right_now + glanceweek) + z00 = next_monday + z01 = z01.strftime('%d.%m.%Y') + + if any(d in timex for d in ['monat', 'Monat']): + timex1 = dateparser.parse('nächsten Monat').strftime('%d.%m.%Y') + day2, month2, year2 = timex1.split('.') + b = '01.' + c = '30.' + z00 = b + month2 + '.' + year2 + z01 = c + month2 + '.' + year2 + + if any(d in timex for d in ['montag', 'Montag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 0).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['dienstag', 'Dienstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 1).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 1).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['mittwoch', 'Mittwoch']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 2).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 2).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['donnerstag', 'Donnerstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 3).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 3).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['freitag', 'Freitag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 4).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 4).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['samstag', 'Samstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 5).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 5).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['sonntag', 'Sonntag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 6).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 6).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(c in timex for c in ['diese']): + if any(d in timex for d in ['woche', 'Woche']): + right_now = date.today() + next_monday = right_now.strftime('%d.%m.%Y') + next_monday_d = next_weekday(right_now, 6) + z01 = next_monday_d + z00 = next_monday + z01 = z01.strftime('%d.%m.%Y') + + if any(d in timex for d in ['monat', 'Monat']): + timex1 = dateparser.parse('diesen Monat').strftime('%d.%m.%Y') + day2, month2, year2 = timex1.split('.') + b = '01.' + c = '30.' + z00 = dateparser.parse('diesen Monat').strftime('%d.%m.%Y') + z01 = c + month2 + '.' + year2 + + if any(d in timex for d in ['montag', 'Montag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 0).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['dienstag', 'Dienstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 1).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 1).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['mittwoch', 'Mittwoch']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 2).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 2).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['donnerstag', 'Donnerstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 3).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 3).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['freitag', 'Freitag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 4).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 4).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['samstag', 'Samstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 5).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 5).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['sonntag', 'Sonntag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 6).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 6).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(c in timex for c in ['letzte']): + if any(d in timex for d in ['woche', 'Woche']): + glanceweek = timedelta(days=6) + #####print(glanceweek) + right_now = date.today() + past_monday = past_weekday(right_now, 0).strftime('%d.%m.%Y') + past_monday_d = past_weekday(right_now, 0) + z01 = (past_monday_d + glanceweek) + z00 = past_monday + z01 = z01.strftime('%d.%m.%Y') + if 'z00' in locals(): + timex_found.append(z00) + else: + timex_found.append(dateparser.parse('heute').strftime('%d.%m.%Y')) + if 'z01' in locals(): + timex_found.append(z01) + else: + timex_found.append(dateparser.parse('heute').strftime('%d.%m.%Y')) + + found = reg5.findall(text) + #####print('reg5') + # found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg5', timex) + if not timex_found == []: + timex_found.clear() + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + if timex_found == []: + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + found = reg9.findall(text) + #####print('reg9') + # found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg9', timex) + if not timex_found == []: + timex_found.clear() + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + if timex_found == []: + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + # today, tomorrow, etc + found = reg3.findall(text) + #####print('reg3') + for timex in found: + #####print('reg3', timex) + if any(d in timex for d in ['übermorgen']): + #####print('timex', timex) + z00 = dateparser.parse('heute').strftime('%d.%m.%Y') + glanceweek = timedelta(days=2) + #####print(glanceweek) + timex1 = dateparser.parse('heute') + z01 = (timex1 + glanceweek) + z01 = z01.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + else: + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + z01 = dateparser.parse(timex).strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + # ISO + found = reg4.findall(text) + #####print('reg4') + for timex in found: + #####print('reg4', timex) + timex1 = dateparser.parse(timex).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + #####print(z00) + timex_found.append(z00) + timex_found.append(timex1) + + # Dates + found = reg6.findall(text) + #####print('reg6') + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg6', timex) + timex1 = dateparser.parse(timex).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(timex1) + + found = reg7.findall(text) + #####print('reg7') + for timex in found: + #####print('reg7', timex) + if timex_found == []: + if any(d in timex for d in ['montag', 'Montag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 0).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['dienstag', 'Dienstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 1).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 1).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['mittwoch', 'Mittwoch']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 2).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 2).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['donnerstag', 'Donnerstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 3).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 3).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['freitag', 'Freitag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 4).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 4).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['samstag', 'Samstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 5).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 5).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['sonntag', 'Sonntag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 6).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 6).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + timex_found.append(z00) + timex_found.append(z01) + + found = reg10.findall(text) + #####print('reg10') + for timex in found: + #####print('reg10', timex) + if timex_found == []: + timex1 = dateparser.parse(timex, settings={'PREFER_DAY_OF_MONTH': 'last'}).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex, settings={'PREFER_DAY_OF_MONTH': 'first'}).strftime('%d.%m.%Y') + #####print(z00) + timex_found.append(z00) + timex_found.append(timex1) + + # Year + # found = reg5.findall(text) + # for timex in found: + # timex_found.append(timex) + # Tag only temporal expressions which haven't been tagged. + # for timex in timex_found: + # text = re.sub(timex + '(?!)', '' + timex + '', text) + if timex_found == []: + timex_found.append('heute') + + for match in timex_found: + if match == 'heute': + glanceweek = timedelta(days=0) + right_now = date.today() + right_now_str = date.today().strftime('%d.%m.%Y') + z01 = (right_now + glanceweek) + z00 = right_now_str + z01 = z01.strftime('%d.%m.%Y') + timex_found.remove('heute') + timex_found.append(z00) + timex_found.append(z01) + + #####print('erste element', timex_found[0]) + #####print('zwite element', timex_found[1]) + + return timex_found + + +from geotext import GeoText + + +def show_ents(doc): + print('docanfang', doc) + if "Wetter" in doc: + #print('Wetter word') + doc = doc.replace('Wetter', '') + #print('docadanach', doc) + doc = GeoText(doc) + print('doc', doc) + if doc.cities: + loc = doc.cities + #print('loc', loc) + return loc[0] + if doc.countries: + loc = doc.countries + return loc[0] + else: + return 'Freiburg' + + +def named_entity_wetter(frage): + named_entity_wetter = {} + named_entities = [] + + spacy_entity = show_ents(frage) + # print('spacy_entity', spacy_entity) + named_entities.append(spacy_entity) + named_entity_wetter['service'] = 'weather' + named_entity_wetter['location'] = list(set(named_entities)) + # print('named_entity_wetter1', named_entity_wetter) + datum = extractDate(frage) + #####print(datum) + proofDatum = datum[1] + #####print(proofDatum) + glanceweek = timedelta(days=5) + defaultproofDatum = dateparser.parse('heute') + defaultproofDatum5 = (defaultproofDatum + glanceweek) + if datetime.strptime(proofDatum, '%d.%m.%Y').date() > defaultproofDatum5.date(): + #####print('datum später!!!') + anzeige = ('Ich kann das Wetter der nächsten 5 Tage vorhersagen, danach wird die Vorhersage zu ungenau 🌈 🌦️') + named_entity_wetter['zeit'] = extractDate('nächste 4 Tage') + return anzeige, named_entity_wetter + if datetime.strptime(proofDatum, '%d.%m.%Y').date() < defaultproofDatum.date(): + #####print('datum früher!!!') + anzeige = ('Ich kann das Wetter der nächsten 5 Tage vorhersagen, danach wird die Vorhersage zu ungenau 🌈 🌦️') + named_entity_wetter['zeit'] = extractDate('nächste 4 Tage') + return anzeige, named_entity_wetter + else: + #####print('datum normal!!!') + named_entity_wetter['zeit'] = extractDate(frage) + #####print('named_entity_wetter2', named_entity_wetter) + return named_entity_wetter + + +################################################### +##########Schreibfehler Korrektur +# from spellchecker import SpellChecker + +# spell = SpellChecker(language='de') + + +################################################ + + +import pickle +import json + +# wiederherstelle alle unsere Datenstrukturen +data = pickle.load(open("prodae/models/trained_data", "rb")) +words = data['words'] +classes = data['classes'] +train_x = data['train_x'] +train_y = data['train_y'] + +# Aufbau des neuronalen Netzes +net = tflearn.input_data(shape=[None, len(train_x[0])]) +net = tflearn.fully_connected(net, 88) +net = tflearn.fully_connected(net, 88) +net = tflearn.fully_connected(net, len(train_y[0]), activation='softmax') +net = tflearn.regression(net) + +# Definiere das Modell und konfiguriere tensorboard +model = tflearn.DNN(net, tensorboard_dir='train_logs') + + +# importiere die Dialogdesign-Datei + + +def lowercase(obj): + """ Make dictionary lowercase """ + if isinstance(obj, dict): + return {k: lowercase(v) for k, v in obj.items()} + elif isinstance(obj, (list, set, tuple)): + t = type(obj) + return t(lowercase(o) for o in obj) + elif isinstance(obj, str): + if " " in obj: + object = [] + o = nltk.word_tokenize(obj) + for i in o: + i = stemmer.stem(i.lower()) + object.append(i) + s = ' ' + object = s.join(object) + return object + + else: + return stemmer.stem(obj.lower()) + else: + return obj + + +def containsAll(str, set): + """ Check whether sequence str contains ALL of the items in set. """ + return 0 not in [c in str for c in set] + + +import pickle + +with open("prodae/models/org_data", "rb") as filehandleorg: + # read the data as binary data stream + org_entiti = pickle.load(filehandleorg) + +with open("prodae/models/hilfe_data", "rb") as filehandlehilfe: + # read the data as binary data stream + hilf_entiti = pickle.load(filehandlehilfe) +with open("prodae/models/leistung_data", "rb") as filehandleleistung: + # read the data as binary data stream + leistung_entiti = pickle.load(filehandleleistung) + +with open("prodae/models/lebenslage_data", "rb") as filehandlelebenslage: + # read the data as binary data stream + lebenslage_entiti = pickle.load(filehandlelebenslage) + + +# print('stadtteile_entiti', stadtteile_entiti) + +def hilf_entity(frage): + # start = timeit.default_timer() + + # print('hier bin ich!!!') + + # d_entity = lowercase(d_entity) + ######print(hilf_entity) + ##print('hilfentity_frage!', frage) + frage = ''.join([str(elem) for elem in frage]) + ##print('hilfentity_frage1!', frage) + sentence_word = nltk.word_tokenize(frage) + ##print('sentence_word!!!', sentence_word) + # generiere die Stopwörter + stop = stopwords.words('german') + ignore_words = ['?', '!', '-', '&', '.', ',', 'auf', 'können', 'kannst', 'mehr', 'erzählen', 'erzählst', 'alten', + 'frau', + 'toll', 'beantragen', 'brauche', 'brauchen', 'beantrage', 'liebst', 'lieben', 'mein', + 'meines', 'meins', 'meiner', 'meinem', 'meines', 'meinen', 'wurde', 'möchte', 'möchten', 'möchtest','mocht', + 'wurden', 'würde', 'würden', 'funktionen', 'gern', 'gerne', 'beantragen', 'beantrage', 'beantragt', 'benötige', 'brauche'] + stop + ######Korrektur Schreibfehler + stemmed_frage = [] + named_entities = [] + for word in sentence_word: + if word == "OB": + stemmed_frage.append("oberburgermeist") + word = word.lower() + word = spell.correction(word) + lenhallo= len(frage) - len(word) + if word not in ignore_words or word == 'im' or word == 'dich' or word == 'am' or word == 'um' or word == 'was' or word == 'war' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'mich' or word == 'jetzt' or word == 'mich' or word == 'bei' or word == 'darf' or word == 'kann': + word = stemmer.stem(word) + stemmed_frage.append(word) + if word == 'hallo' or word == 'hey' or word == 'hi' or word == 'servus' or word == 'mittag' or word == 'abend' or word == 'tag' or word == 'morgen' or word == 'grüß' or word == 'huhu' or word == 'moin': + if lenhallo >= 7: + print(frage, lenhallo, len(frage), len(word)) + print('ok!!!!') + stemmed_frage.remove(word) + else: + stemmed_frage.append(word) + + ####print('stemmed_frage', stemmed_frage) + named_entities = stemmed_frage + for k, v in hilf_entiti.items(): + #####print('v', v) + for item in v: + #####print('item', item) + stemmed_entity = nltk.word_tokenize(item, language='german') + #####print('stemmed_entity', stemmed_entity) + if containsAll(stemmed_frage, stemmed_entity) != 0: + print('stemmed_frage', stemmed_frage) + print('stemmed_entity', stemmed_entity) + named_entities.append(lowercase(k)) + #####print('named_entities', named_entities) + for b in stemmed_entity: + #####print('b', b) + if b in named_entities: + named_entities.remove(b) + #####print('named_entities2', named_entities) + # end = timeit.default_timer() + # time = end - start + # print('named_entities:', named_entities) + return list(set(named_entities)) + + +from fuzzywuzzy import process + + + + +def named_entity(stemmed_frage): + # start = timeit.default_timer() + + #####print(entitaet) + + # d_entity = lowercase(d_entity) + #####print(d_entity) + ######Korrektur Schreibfehler + # stemmed_frage = hilf_entity(frage) + # stemmed_frage = lowercase(stemmed_frage) + # print('stemmed_frage2', stemmed_frage) + named_entities = [] + for k, v in leistung_entiti.items(): + #####print('v', v) + for item in v: + #####print('item', item) + stemmed_entity = nltk.word_tokenize(item, language='german') + #####print('stemmed_entity2', stemmed_entity) + if containsAll(stemmed_frage, stemmed_entity) != 0: + named_entities.append(k) + named_entities = list(set(named_entities)) + #####print('named_entities', named_entities) + if len(named_entities) > 1: + for ent in named_entities: + if ent == '316': + named_entities.remove(ent) + if ent == '160': + named_entities.remove(ent) + if ent == '178': + named_entities.remove(ent) + if ent == '417': + named_entities.remove(ent) + if ent == '1439': + named_entities.remove(ent) + named_entities = named_entities[0] + # end = timeit.default_timer() + # time = end - start + # print('Zeit gebraucht:', time) + return str(named_entities).strip('[]') + +def pruef_sbw(stemmed_frage): + # start = timeit.default_timer() + + #####print(entitaet) + + # d_entity = lowercase(d_entity) + #####print(d_entity) + ######Korrektur Schreibfehler + # stemmed_frage = hilf_entity(frage) + # stemmed_frage = lowercase(stemmed_frage) + # print('stemmed_frage2', stemmed_frage) + named_entities = list(set(stemmed_frage)) + #print('named_entities pruef', named_entities) + for k, v in leistung_entiti.items(): + #print('v', v) + for item in v: + #####print('item', item) + stemmed_entity = nltk.word_tokenize(item, language='german') + #print('stemmed_entity2', stemmed_entity) + if containsAll(stemmed_frage, stemmed_entity) != 0: + for b in stemmed_entity: + #print('b', b) + if b in stemmed_frage: + if b in named_entities: + named_entities.remove(b) + named_entities.append('sbw_preamble') + named_entities = list(set(named_entities)) + #####print('named_entities', named_entities) + + # end = timeit.default_timer() + # time = end - start + # print('Zeit gebraucht:', time) + named_entities = list(set(named_entities)) + named_entities = " ".join(named_entities) + named_entities = str(named_entities) + print('pruef_sbw named_entities', named_entities) + return named_entities + +def pruef_kontext(frage): + # d_entity = lowercase(d_entity) + #####print(hilf_entity) + sentence_word = nltk.word_tokenize(frage) + #####print() + # generiere die Stopwörter + stop = stopwords.words('german') + ignore_words = ['?', '!', '.', ',', 'möchte', 'möchtest', 'möchten', 'brauche', 'brauch', 'frage', 'zu', + 'beantragen', 'beantrag', 'beantrage', 'beantragen', 'benötige', 'brauche'] + stop + ######Korrektur Schreibfehler + stemmed_frage = [] + named_entities = [] + for word in sentence_word: + + if word not in ignore_words or word == 'was' or word == 'um' or word == 'war' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'mich' or word == 'jetzt' or word == 'bei' or word == 'darf' or word == 'kann': + stemmed_frage.append(word) + #####print('stemmed_frage', stemmed_frage) + named_entities = stemmed_frage + for k, v in lebenslage_entiti.items(): + #print('lebenslage_entiti.items()', lebenslage_entiti.items()) + for item in v: + #####print('item', item) + stemmed_entity = nltk.word_tokenize(item, language='german') + #####print('stemmed_entity', stemmed_entity) + if containsAll(stemmed_frage, stemmed_entity) != 0: + #print('stemmed_frage', stemmed_frage) + #print('stemmed_entity', stemmed_entity) + # named_entities.append(k) + #print('named_entities', named_entities) + for b in stemmed_entity: + print('b', b) + if b in named_entities: + named_entities.remove(b) + named_entities.append('ist') + #print('named_entities2', named_entities) + named_entities = list(set(named_entities)) + named_entities = ", ".join(named_entities) + named_entities = str(named_entities) + print(named_entities) + return named_entities + +from HanTa import HanoverTagger as ht + +def pos(frage): + named_entities = [] + tokenized_sent = nltk.word_tokenize(frage, language='german') + print(tokenized_sent) + + tagger = ht.HanoverTagger('morphmodel_ger.pgz') + + tags = tagger.tag_sent(tokenized_sent) + print(tags) + for item in tags: + if 'NN' in item: + named_entities.append('NN') + else: + named_entities.append('') + return named_entities + + +def queryfrage(frage): + # tokenisiere die synonymen + queryfrage = {} + queryfrage['prefix'] = 'Ich habe folgenden Informationen für Sie gefunden:
' + queryfrage['service'] = 'search' + queryfrage['original'] = frage + frageneu = hilf_entity(frage) + frageneu = ", ".join(frageneu) + frageneu = str(frageneu) + frageneu = frageneu.replace(',', '') + sentence_word = nltk.word_tokenize(frageneu) + #####print('sentence_word', sentence_word) + # generiere die Stopwörter + stop = stopwords.words('german') + ignore_words = ['?', '!', '-', '.', ',', 'mocht', 'frage', 'zu', 'beantragen', 'beantrag', 'gibt', 'beantrage', + 'melden', 'beantragen', 'benötige', 'brauche'] + stop + ######Korrektur Schreibfehler + sentence_words = [] + for word in sentence_word: + word = word.lower() + #####print('len frage', len(frage)) + #####print('len word', len(word)) + # word = spell.correction(word) + if word in ignore_words and (word == 'zu'): + sentence_words.append("zu") + if word not in ignore_words or word == 'was' or word == 'um' or word == 'war' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'jetzt' or word == 'mich' or word == 'bei' or word == 'darf' or word == 'kann': + # if get_entity(word) is None: + sentence_words.append(word) + + + # else: + # sentence_words.append(get_entity(word)) + + # stemme jedes Wort + frage = ''.join([str(elem) for elem in frage]) + print('frage!!!!', frage) + query_word = nltk.word_tokenize(frage) + stop = stopwords.words('german') + ignore_words = ['?', '!', '-', '.', ',', 'mocht', 'frage', 'zu', 'beantragen', 'beantrag', 'gibt', 'beantrage', + 'melden', 'beantragen', 'benötige', 'brauche'] + stop + ######Korrektur Schreibfehler + query_words = [] + for word in query_word: + word = word.lower() + # ####print('len frage', len(frage)) + # ####print('len word', len(word)) + #word = spell.correction(word) + if word in ignore_words and (word == 'zu'): + query_words.append("zu") + if word not in ignore_words or word == 'was' or word == 'um' or word == 'war' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'jetzt' or word == 'mich' or word == 'bei' or word == 'darf' or word == 'kann': + # if get_entity(word) is None: + query_words.append(word) + if word == 'hallo' or word == 'hey' or word == 'hi' or word == 'servus' or word == 'mittag' or word == 'abend' or word == 'tag' or word == 'morgen' or word == 'grüß' or word == 'huhu' or word == 'moin' and ( + len(frage) - len(word) >= 7): + # ####print('ok!!!!') + query_words.remove(word) + query_words = [word.lower() for word in query_words] + query_words = ", ".join(query_words) + query_words = str(query_words) + query_words = query_words.replace(',', '') + ####print('query_words',query_words) + queryfrage['query'] = query_words + return queryfrage + + +def frageBearbeitung(frage): + # tokenisiere die synonymen + frage = hilf_entity(frage) + frage = ", ".join(frage) + frage = str(frage) + frage = frage.replace(',', '') + sentence_word = nltk.word_tokenize(frage) + #####print('sentence_word', sentence_word) + # generiere die Stopwörter + stop = stopwords.words('german') + ignore_words = ['?', '!', '-', '&', '.', ',', 'auf', 'können', 'kannst', 'mehr', 'erzählen', 'erzählst', 'alten', + 'frau', + 'toll', 'haus', 'beantragen', 'brauche', 'brauchen', 'beantrage', 'liebst', 'lieben', 'mein', + 'meines', 'meins', 'meiner', 'meinem', 'meines', 'meinen', 'wurde', 'möchte', 'möchten', 'mocht', + 'wurden', 'würde', 'würden', 'funktionen', 'beantragen', 'benötige', 'brauche'] + stop + ######Korrektur Schreibfehler + sentence_words = [] + for word in sentence_word: + word = word.lower() + #####print('len frage', len(frage)) + #####print('len word', len(word)) + # word = spell.correction(word) + if word in ignore_words and (word == 'zu'): + sentence_words.append("zu") + + if word not in ignore_words or word == 'was' or word == 'war' or word == 'um' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'jetzt' or word == 'mich' or word == 'bei' or word == 'darf' or word == 'kann': + # if get_entity(word) is None: + sentence_words.append(word) + + sentence_words = [word.lower() for word in sentence_words] + print('sentence_words_frage', sentence_words) + return sentence_words + + +import dateparser + +right_now = date.today() + + +def extractDateOeffnungszeit(text): + # Initialization + timex_found = [] + + # re.findall() finds all the substring matches, keep only the full + # matching string. Captures expressions such as 'number of days' ago, etc. + found = reg1.findall(text) + #####print('reg1') + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('1. reg1', timex) + timex = timex.replace('ein', '1') + timex = timex.replace('eine', '1') + timex = timex.replace('einen', '1') + timex = timex.replace('einer', '1') + timex = timex.replace('einem', '1') + timex = timex.replace('zwei', '2') + timex = timex.replace('drei', '3') + timex = timex.replace('vier', '4') + timex = timex.replace('fünf', '5') + timex = timex.replace('sechs', '6') + timex = timex.replace('sieben', '7') + timex = timex.replace('acht', '8') + timex = timex.replace('neun', '9') + timex = timex.replace('zehn', '10') + timex = timex.replace('nach', 'in') + + timex1 = (dateparser.parse('in' + timex)).strftime('%d.%m.%Y') + right_now_str = date.today().strftime('%d.%m.%Y') + z00 = right_now_str + timex_found.append(z00) + timex_found.append(timex1) + + # Variations of this thursday, next year, etc + + # Variations of month and iso + reg8.findall(text) + #####print('reg8') + found = reg8.findall(text) + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg8', timex) + timex1 = dateparser.parse(timex).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(timex1) + + found = reg2.findall(text) + #####print('reg2') + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg2', timex) + if any(c in timex for c in ['nächste']): + if any(d in timex for d in ['woche']): + glanceweek = timedelta(days=6) + #####print(glanceweek) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday_d = next_weekday(right_now, 0) + z01 = (next_monday_d + glanceweek) + z00 = next_monday + z01 = z01.strftime('%d.%m.%Y') + + if any(d in timex for d in ['tag']): + glanceweek = timedelta(days=7) + #####print(glanceweek) + right_now = date.today() + next_monday = right_now.strftime('%d.%m.%Y') + z01 = (right_now + glanceweek) + z00 = next_monday + z01 = z01.strftime('%d.%m.%Y') + + if any(d in timex for d in ['monat']): + timex1 = dateparser.parse('nächsten Monat').strftime('%d.%m.%Y') + day2, month2, year2 = timex1.split('.') + b = '01.' + c = '30.' + z00 = b + month2 + '.' + year2 + z01 = c + month2 + '.' + year2 + + if any(d in timex for d in ['montag', 'Montag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 0).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['dienstag', 'Dienstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 1).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 1).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['mittwoch', 'Mittwoch']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 2).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 2).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['donnerstag', 'Donnerstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 3).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 3).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['freitag', 'Freitag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 4).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 4).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['samstag', 'Samstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 5).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 5).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['sonntag', 'Sonntag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 6).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 6).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(c in timex for c in ['diese']): + if any(d in timex for d in ['woche']): + right_now = date.today() + next_monday = right_now.strftime('%d.%m.%Y') + next_monday_d = next_weekday(right_now, 6) + z01 = next_monday_d + z00 = next_monday + z01 = z01.strftime('%d.%m.%Y') + + if any(d in timex for d in ['monat']): + timex1 = dateparser.parse('diesen Monat').strftime('%d.%m.%Y') + day2, month2, year2 = timex1.split('.') + b = '01.' + c = '30.' + z00 = dateparser.parse('diesen Monat').strftime('%d.%m.%Y') + z01 = c + month2 + '.' + year2 + + if any(d in timex for d in ['montag', 'Montag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 0).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['dienstag', 'Dienstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 1).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 1).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['mittwoch', 'Mittwoch']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 2).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 2).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['donnerstag', 'Donnerstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 3).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 3).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['freitag', 'Freitag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 4).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 4).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['samstag', 'Samstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 5).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 5).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['sonntag', 'Sonntag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 6).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 6).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(c in timex for c in ['letzte']): + if any(d in timex for d in ['woche']): + glanceweek = timedelta(days=6) + #####print(glanceweek) + right_now = date.today() + past_monday = past_weekday(right_now, 0).strftime('%d.%m.%Y') + past_monday_d = past_weekday(right_now, 0) + z01 = (past_monday_d + glanceweek) + z00 = past_monday + z01 = z01.strftime('%d.%m.%Y') + if 'z00' in locals(): + timex_found.append(z00) + else: + timex_found.append(dateparser.parse('heute').strftime('%d.%m.%Y')) + if 'z01' in locals(): + timex_found.append(z01) + else: + timex_found.append(dateparser.parse('heute').strftime('%d.%m.%Y')) + + found = reg5.findall(text) + #####print('reg5') + # found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg5', timex) + if not timex_found == []: + timex_found.clear() + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + if timex_found == []: + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + found = reg9.findall(text) + #####print('reg9') + # found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg9', timex) + if not timex_found == []: + timex_found.clear() + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + if timex_found == []: + + weekno = date.today().weekday() + + if weekno < 5: + #####print("Weekday") + right_now = date.today() + next_samstag = next_weekday(right_now, 5) + next_sontag = next_weekday(right_now, 6) + z00 = next_samstag.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + elif weekno == 5: + #####print("Weekday") + right_now = date.today() + next_sontag = next_weekday(right_now, 6) + z00 = right_now.strftime('%d.%m.%Y') + z01 = next_sontag.strftime('%d.%m.%Y') + else: + #####print("Weekday") + right_now = date.today() + z00 = right_now.strftime('%d.%m.%Y') + z01 = right_now.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + # today, tomorrow, etc + found = reg3.findall(text) + #####print('reg3') + for timex in found: + #####print('reg3', timex) + if any(d in timex for d in ['übermorgen']): + #####print('timex', timex) + z00 = dateparser.parse('heute').strftime('%d.%m.%Y') + glanceweek = timedelta(days=2) + #####print(glanceweek) + timex1 = dateparser.parse('heute') + z01 = (timex1 + glanceweek) + z01 = z01.strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + else: + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + z01 = dateparser.parse(timex).strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(z01) + + # ISO + found = reg4.findall(text) + #####print('reg4') + for timex in found: + #####print('reg4', timex) + timex1 = dateparser.parse(timex).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + #####print(z00) + timex_found.append(z00) + timex_found.append(timex1) + + # Dates + found = reg6.findall(text) + #####print('reg6') + found = [a[0] for a in found if len(a) > 1] + for timex in found: + #####print('reg6', timex) + timex1 = dateparser.parse(timex).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex).strftime('%d.%m.%Y') + timex_found.append(z00) + timex_found.append(timex1) + + found = reg7.findall(text) + #####print('reg7') + for timex in found: + #####print('reg7', timex) + if timex_found == []: + if any(d in timex for d in ['montag', 'Montag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 0).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 0).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['dienstag', 'Dienstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 1).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 1).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['mittwoch', 'Mittwoch']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 2).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 2).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['donnerstag', 'Donnerstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 3).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 3).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['freitag', 'Freitag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 4).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 4).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['samstag', 'Samstag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 5).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 5).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + + if any(d in timex for d in ['sonntag', 'Sonntag']): + glanceweek = timedelta(days=7) + right_now = date.today() + next_monday = next_weekday(right_now, 6).strftime('%d.%m.%Y') + next_monday1 = next_weekday(right_now, 6).strftime('%d.%m.%Y') + z01 = next_monday1 + z00 = next_monday + timex_found.append(z00) + timex_found.append(z01) + + found = reg10.findall(text) + #####print('reg10') + for timex in found: + #####print('reg10', timex) + if timex_found == []: + timex1 = dateparser.parse(timex, settings={'PREFER_DAY_OF_MONTH': 'last'}).strftime('%d.%m.%Y') + z00 = dateparser.parse(timex, settings={'PREFER_DAY_OF_MONTH': 'first'}).strftime('%d.%m.%Y') + #####print(z00) + timex_found.append(z00) + timex_found.append(timex1) + + # Year + # found = reg5.findall(text) + # for timex in found: + # timex_found.append(timex) + # Tag only temporal expressions which haven't been tagged. + # for timex in timex_found: + # text = re.sub(timex + '(?!)', '' + timex + '', text) + + return timex_found + + +def named_entity_oefnungszeit(frage): + named_entity_oefnungszeit = {} + named_entities = [] + termin = "" + intro = "" + frage1 = str(frage) + + sentence_word = nltk.word_tokenize(frage1) + ##print('sentence_word!!!', sentence_word) + # generiere die Stopwörter + stop = stopwords.words('german') + ignore_words = ['?', '!', '.', ','] + stop + ######Korrektur Schreibfehler + stemmed_frage = [] + + for word in sentence_word: + if word == "OB": + stemmed_frage.append("oberburgermeist") + word = word.lower() + word = spell.correction(word) + if word not in ignore_words or word == 'im' or word == 'am' or word == 'um' or word == 'was' or word == 'war' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'mich' or word == 'jetzt' or word == 'mich' or word == 'bei' or word == 'darf' or word == 'kann': + word = stemmer.stem(word) + stemmed_frage.append(word) + named_entities = [] + for k, v in org_entiti.items(): + #####print('v', v) + #####print('k', k) + for item in v: + #####print('item', item) + stemmed_entity = nltk.word_tokenize(item, language='german') + #####print('stemmed_entity', stemmed_entity) + if containsAll(stemmed_frage, stemmed_entity) != 0: + named_entities.append(k) + named_entity_oefnungszeit['service'] = 'oeffnungszeit' + if 'ziegelhaus' in stemmed_frage: + ####print('Lahr') + for i in named_entities: + if 'Ziegelhausen' in i: + named_entities = [] + named_entities.append(i) + ####print ('Lahr', i) + if 'schlierbach' in stemmed_frage: + ####print('offenburg') + for i in named_entities: + if 'Schlierbach' in i: + named_entities = [] + named_entities.append(i) + ####print ('offenburg', i) + if 'wiebling' in stemmed_frage: + ####print('Wolfach') + for i in named_entities: + if 'Wieblingen' in i: + named_entities = [] + named_entities.append(i) + ####print('Wolfach', i) + + if 'pfaffengrund' in stemmed_frage: + ####print('Kehl') + for i in named_entities: + if 'Pfaffengrund' in i: + named_entities = [] + named_entities.append(i) + ####print('Kehl', i) + + if 'kirchheim' in stemmed_frage: + ####print('Achern') + for i in named_entities: + if 'Kirchheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Achern', i) + + if 'boxberg' in stemmed_frage: + ####print('Haslach') + for i in named_entities: + if 'Boxberg' in i: + named_entities = [] + named_entities.append(i) + ####print('Haslach', i) + if 'emmertsgrund' in stemmed_frage: + ####print('Lahr') + for i in named_entities: + if 'Emmertsgrund' in i: + named_entities = [] + named_entities.append(i) + ####print ('Lahr', i) + if 'rohrbach' in stemmed_frage: + ####print('offenburg') + for i in named_entities: + if 'Rohrbach' in i: + named_entities = [] + named_entities.append(i) + ####print ('offenburg', i) + if 'neuenheim' in stemmed_frage: + ####print('Wolfach') + for i in named_entities: + if 'Neuenheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Wolfach', i) + + if 'mitt' in stemmed_frage: + ####print('Kehl') + for i in named_entities: + if 'Mitte' in i: + named_entities = [] + named_entities.append(i) + ####print('Kehl', i) + + if 'bahnstadt' in stemmed_frage: + ####print('Achern') + for i in named_entities: + if 'Bahnstadt' in i: + named_entities = [] + named_entities.append(i) + ####print('Achern', i) + + if 'bergheim' in stemmed_frage: + ####print('Haslach') + for i in named_entities: + if 'Bergheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Haslach', i) + if 'sudstadt' in stemmed_frage: + ####print('Lahr') + for i in named_entities: + if 'Südstadt' in i: + named_entities = [] + named_entities.append(i) + ####print ('Lahr', i) + if 'weststadt' in stemmed_frage: + ####print('offenburg') + for i in named_entities: + if 'Weststadt' in i: + named_entities = [] + named_entities.append(i) + ####print ('offenburg', i) + if 'handschuhsheim' in stemmed_frage: + ####print('Wolfach') + for i in named_entities: + if 'Handschuhsheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Wolfach', i) + + if 'altstadt' in stemmed_frage: + ####print('Kehl') + for i in named_entities: + if 'Altstadt' in i: + named_entities = [] + named_entities.append(i) + ####print('Kehl', i) + if named_entities == []: + #####print("keine Org!!!") + named_entities.append('') + named_entity_oefnungszeit[ + 'prefix'] = 'Vielleicht ist hier was Passendes dabei:

Öffnungszeiten der Stadtverwaltung

' + + named_entity_oefnungszeit['org'] = list(set(named_entities)) + #####print('named_entity_oefnungszeit1', named_entity_oefnungszeit) + + named_entity_oefnungszeit['zeit'] = extractDateOeffnungszeit(frage) + named_entity_oefnungszeit['termin'] = termin + #####print('named_entity_oefnungszeit2', named_entity_oefnungszeit) + return named_entity_oefnungszeit + + +def named_entity_infoort(frage): + named_entity_infoort = {} + named_entities = [] + termin = "" + + frage1 = str(frage) + + sentence_word = nltk.word_tokenize(frage1) + ##print('sentence_word!!!', sentence_word) + # generiere die Stopwörter + stop = stopwords.words('german') + ignore_words = ['?', '!', '.', ','] + stop + ######Korrektur Schreibfehler + stemmed_frage = [] + + for word in sentence_word: + if word == "OB": + stemmed_frage.append("oberburgermeist") + word = word.lower() + word = spell.correction(word) + if word not in ignore_words or word == 'im' or word == 'am' or word == 'um' or word == 'was' or word == 'war' or word == 'zu' or word == 'nach' or word == 'kein' or word == 'keine' or word == 'ohne' or word == 'nicht' or word == 'dein' or word == 'wann' or word == 'dort' or word == 'dahin' or word == 'tüv' or word == 'wieder' or word == 'wie' or word == 'nicht' or word == 'viel' or word == 'wo' or word == 'wann' or word == 'warum' or word == 'wieso' or word == 'wohin' or word == 'wie' or word == 'an' or word == 'sich' or word == 'welche' or word == 'welcher' or word == 'welchen' or word == 'unter' or word == 'welches' or word == 'dir' or word == 'du' or word == 'viele' or word == 'mich' or word == 'jetzt' or word == 'mich' or word == 'bei' or word == 'darf' or word == 'kann': + word = stemmer.stem(word) + stemmed_frage.append(word) + + named_entities = [] + for k, v in org_entiti.items(): + ####print('v', v) + ####print('k', k) + for item in v: + ####print('item', item) + stemmed_entity = nltk.word_tokenize(item, language='german') + ####print('stemmed_entity', stemmed_entity) + if containsAll(stemmed_frage, stemmed_entity) != 0: + named_entities.append(k) + named_entity_infoort['service'] = 'infoort' + if 'ziegelhaus' in stemmed_frage: + ####print('Lahr') + for i in named_entities: + if 'Ziegelhausen' in i: + named_entities = [] + named_entities.append(i) + ####print ('Lahr', i) + if 'schlierbach' in stemmed_frage: + ####print('offenburg') + for i in named_entities: + if 'Schlierbach' in i: + named_entities = [] + named_entities.append(i) + ####print ('offenburg', i) + if 'wiebling' in stemmed_frage: + ####print('Wolfach') + for i in named_entities: + if 'Wieblingen' in i: + named_entities = [] + named_entities.append(i) + ####print('Wolfach', i) + + if 'pfaffengrund' in stemmed_frage: + ####print('Kehl') + for i in named_entities: + if 'Pfaffengrund' in i: + named_entities = [] + named_entities.append(i) + ####print('Kehl', i) + + if 'kirchheim' in stemmed_frage: + ####print('Achern') + for i in named_entities: + if 'Kirchheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Achern', i) + + if 'boxberg' in stemmed_frage: + ####print('Haslach') + for i in named_entities: + if 'Boxberg' in i: + named_entities = [] + named_entities.append(i) + ####print('Haslach', i) + if 'emmertsgrund' in stemmed_frage: + ####print('Lahr') + for i in named_entities: + if 'Emmertsgrund' in i: + named_entities = [] + named_entities.append(i) + ####print ('Lahr', i) + if 'rohrbach' in stemmed_frage: + ####print('offenburg') + for i in named_entities: + if 'Rohrbach' in i: + named_entities = [] + named_entities.append(i) + ####print ('offenburg', i) + if 'neuenheim' in stemmed_frage: + ####print('Wolfach') + for i in named_entities: + if 'Neuenheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Wolfach', i) + + if 'mitt' in stemmed_frage: + ####print('Kehl') + for i in named_entities: + if 'Mitte' in i: + named_entities = [] + named_entities.append(i) + ####print('Kehl', i) + + if 'bahnstadt' in stemmed_frage: + ####print('Achern') + for i in named_entities: + if 'Bahnstadt' in i: + named_entities = [] + named_entities.append(i) + ####print('Achern', i) + + if 'bergheim' in stemmed_frage: + ####print('Haslach') + for i in named_entities: + if 'Bergheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Haslach', i) + if 'sudstadt' in stemmed_frage: + ####print('Lahr') + for i in named_entities: + if 'Südstadt' in i: + named_entities = [] + named_entities.append(i) + ####print ('Lahr', i) + if 'weststadt' in stemmed_frage: + ####print('offenburg') + for i in named_entities: + if 'Weststadt' in i: + named_entities = [] + named_entities.append(i) + ####print ('offenburg', i) + if 'handschuhsheim' in stemmed_frage: + ####print('Wolfach') + for i in named_entities: + if 'Handschuhsheim' in i: + named_entities = [] + named_entities.append(i) + ####print('Wolfach', i) + + if 'altstadt' in stemmed_frage: + ####print('Kehl') + for i in named_entities: + if 'Altstadt' in i: + named_entities = [] + named_entities.append(i) + ####print('Kehl', i) + if named_entities == []: + ####print("keine Org!!!") + named_entities.append('Bürgerservice') + + print('named_entity_infoort1', named_entity_infoort) + named_entity_infoort['org'] = list(set(named_entities)) + named_entity_infoort['termin'] = termin + print('named_entity_infoort1', named_entity_infoort) + + return named_entity_infoort + + + +# Rückgabe bag of words array: 0 oder 1 für jedes Wort in der 'bag', die im Satz existiert +def bow(frage, words, show_details=False): + liste = frageBearbeitung(frage) + sentence_words = liste + bag = [0] * len(words) + for s in sentence_words: + for i, w in enumerate(words): + if w == s: + bag[i] = 1 + if show_details: + print("found in bag: %s" % w) + + return (np.array(bag)) + +# lade unsre gespeicherte Modell +model.load('prodae/models/model.tflearn') +# Aufbau unseres Antwortprozessors. +# Erstellen einer Datenstruktur, die den Benutzerkontext enthält +context = {} + +ERROR_THRESHOLD = 0.01 + + +def klassifizieren(frage): + # generiere Wahrscheinlichkeiten von dem Modell + results = model.predict([bow(frage, words)])[0] + + # herausfiltern Vorhersagen unterhalb eines Schwellenwerts + results = [[i, r] for i, r in enumerate(results) if r > ERROR_THRESHOLD] + # nach Stärke der Wahrscheinlichkeit sortieren + results.sort(key=lambda x: x[1], reverse=True) + return_list = [] + for r in results: + return_list.append((classes[r[0]], r[1])) + return return_list + + +def antwort(frage, userId, show_details=False): + print('Context#####', context) + + d_itent = [] + + for itent in dialogflow['antwort_leistungen']: + try: + d_itent.append([itent['intent']]) + except KeyError: + d_itent.append([itent['intent']]) + + d_itent = [item for sublist in d_itent for item in sublist] + + + if frage in d_itent: + #print('12') + next_intent = frage + results = [(next_intent, 1.0)] + #####print(results) + #####print(results[0][0]) + while results: + for i in dialogflow['antwort_leistungen']: + + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results[0][0]: + a = i['intent'] + + b = re.sub('sbw_.*?_', '', a, flags=re.DOTALL) + + intent_context1 = i['intent'] + context[userId] = intent_context1 + ant = i['antwort'] + print('ant1!!!', ant) + if 'sbw_preamble' in i['intent']: + text = str(i['antwort'][0]) + number_of_sentences = sent_tokenize(text) + print('len(number_of_sentences)', len(number_of_sentences)) + + + if len(number_of_sentences) > 2: + sum = sum_kata(text) + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:

' + sum + '
genauere Informationen finden Sie hier!' + text + '


' + voice = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:

' + sum + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + i['antwort'][0] + + voice=ant + ant1 = ant + ( + '

Welche zusätzlichen Informationen möchten Sie ansehen?

' % ( + b, b, b, b, b, b, b, b, b)) + + + + return [ant1, voice] + + + if not ant: + if 'sbw_kosten' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + + if 'sbw_bearbeitungsdauer' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + if 'sbw_fristen' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Keine Angabe

' + return ant + if i['antwort'][0] == 'keine Angaben': + print('hier1!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Es gibt keine Online-Formulare

' + return ant + if i['antwort'][0] == '

keine

': + print('hier1!!!') + if 'sbw_kosten' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Diese Leistung ist kostenfrei.

' + return ant + + if 'sbw_bearbeitungsdauer' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Die Bearbeitung erfolgt sofort.

' + return ant + + if 'sbw_fristen' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Sie müssen keine Fristen beachten.

' + return ant + + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

keine

' + return ant + else: + print('hier2!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + i['antwort'][0] + return ant + + #####print('1') + + results.pop(0) + + else: + #print('klassifi') + stemmed_frage = hilf_entity(frage) + if len(named_entity(stemmed_frage)) != 0: + frage=pruef_sbw(stemmed_frage) + print('fragebearb', frage) + results = klassifizieren(frage) + print('klassifiresults', results) + #print('fragebearb') + #print('stemmed_frage=hilf_entity(frage)', stemmed_frage) + #####print('13') + ###print(results) + accurancy = results[0][1] + frage_test = "bgfdtgh" + #wert_accurancy = klassifizieren(frage_test)[0][1] + wert_accurancy = 0.34 + print('wert_accurancy', wert_accurancy) + print('accurancy', accurancy) + #kontextliste = load_kontextliste(userId) + # #####print(results[0][0]) + + while results: + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results[0][0]: + # Setze bei Bedarf Kontext für diese dialog + # Überprüfe, ob diese Inetnt kontextbezogen ist + + + if i['intent'] == 'lebenslage_fuehrerschein': + ant = i['antwort'] + voice='

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + return [ant, voice] + + + if i['intent'] == 'sbw_preamble': + ##print('frage', frage) + entity_sbw = named_entity(stemmed_frage) + if len(entity_sbw) > 0: + #####print('entity sbw!') + context[userId] = {} + context[userId] = 'sbw_preamble' + entity_sbw = entity_sbw.strip("''") + next_intent = context[userId] + '_' + entity_sbw + ###print('next_intent_label', next_intent) + results = [(next_intent, 1.0)] + #####print(results) + #####print(results[0][0]) + context[userId] = next_intent + #####print('context1:', context) + while results: + for i in dialogflow['antwort_leistungen']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results[0][0]: + a = i['intent'] + b = re.sub('sbw_.*?_', '', a, flags=re.DOTALL) + ant = i['antwort'] + text = str(i['antwort'][0]) + number_of_sentences = sent_tokenize(text) + #print('len(number_of_sentences)', len(number_of_sentences)) + + if not ant: + ant= 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:'+ '

Keine Angabe

' + + else: + text=str(i['antwort'][0]) + number_of_sentences = sent_tokenize(text) + #print('len(number_of_sentences)', len(number_of_sentences)) + if len(number_of_sentences)>2: + sum = sum_kata(text) + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:

' + sum + '
genauere Informationen finden Sie hier!'+text+'


' + voice = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:

' + sum + + else: + if i['antwort'][0] == 'keine Angaben': + print('hier1!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Es gibt keine Online-Formulare

' + else: + print('hier2!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + \ + i['antwort'][0] + voice=ant + + ant1 = ant + ( + '

Welche zusätzlichen Informationen möchten Sie ansehen?

' % ( +b, b, b, b, b, b, b, b, b)) + + #####print('ant', ant) + #####print('ant1', ant1) + return [ant1, voice] + + results.pop(0) + else: + #####print('keine sbw_entität!!!') + + #####print('keine sbw_entität und kein kontext!!!!') + #####print('accurancy', accurancy) + #####print('wert_accurancy', wert_accurancy) + #stemmed_frage= frageBearbeitung(frage) + #####print('frage!!!', stemmed_frage) + + if 'fuhrerschein' in stemmed_frage: + # print('len(stemmed_frage)', len(stemmed_frage)) + + results = 'lebenslage_fuehrerschein' + print('resultsstemmed_frage_intent', results) + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results: + print('stemmed_frage_intent') + ant = i['antwort'] + voice = '

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + + return [ant, voice] + + else: + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + + if 'sbw_' in i['intent']: + #print('sbw_ in i[intent]') + entity_sbw = named_entity(stemmed_frage) + if len(entity_sbw) > 0: + #####print('entity sbw!') + + context[userId] = {} + context[userId] = i['intent'] + ##print('context[userId]', context[userId]) + entity_sbw = entity_sbw.strip("''") + next_intent = context[userId] + '_' + entity_sbw + ##print('next_intent_label', next_intent) + results = [(next_intent, 1.0)] + #####print(results) + #####print(results[0][0]) + context[userId] = next_intent + #####print('context1:', context) + while results: + for i in dialogflow['antwort_leistungen']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results[0][0]: + ant = i['antwort'] + + + if not ant: + if 'sbw_kosten' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + + if 'sbw_bearbeitungsdauer' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + if 'sbw_fristen' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + else: + if i['antwort'][0] == 'keine Angaben': + print('hier1!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Es gibt keine Online-Formulare

' + return ant + if i['antwort'][0] == '

keine

': + print('hier1!!!') + if 'sbw_kosten' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Diese Leistung ist kostenfrei.

' + return ant + + if 'sbw_bearbeitungsdauer' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Die Bearbeitung erfolgt sofort.

' + return ant + + if 'sbw_fristen' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Sie müssen keine Fristen beachten.

' + return ant + + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

keine

' + return ant + else: + print('hier2!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + i['antwort'][ + 0] + return ant + return ant + + results.pop(0) + if len(entity_sbw) == 0: + print('keine sbw_entitäterfedferdf!!!') + #print('userId', context[userId]) + stemmed_frage = frageBearbeitung(frage) + if userId in context and 'sbw_' in context[userId]: + print('sbw_ in context keine sbw_entitäterfedferdf!!!') + frage_neu = pruef_kontext(frage) + print('frage_neu', frage_neu) + post = pos(frage_neu) + print('ueberpruefung_kontext', pos) + + ###print('frage!', stemmed_frage) + + if 'fuhrerschein' in stemmed_frage: + # print('len(stemmed_frage)', len(stemmed_frage)) + + results = 'lebenslage_fuehrerschein' + print('resultsstemmed_frage_intent', results) + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results: + print('stemmed_frage_intent') + ant = i['antwort'] + voice = '

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + + return [ant, voice] + + if 'NN' in post: + if i['intent'] == 'sbw_oeffnungszeiten': + ant = "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + + return (ant) + else: + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + else: + a = context[userId] + label = re.sub('sbw_.*?_', '', a, flags=re.DOTALL) + next_intent = i['intent'] + '_' + label + print('next_intent_label', next_intent) + results = [(next_intent, 1.0)] + print(results) + print(results[0][0]) + context[userId] = next_intent + print('context1:', context) + while results: + for i in dialogflow['antwort_leistungen']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results[0][0]: + # Setze bei Bedarf Kontext für diese dialog + ant = i['antwort'] + print('ant', ant) + + + if not ant: + if 'sbw_kosten' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + + if 'sbw_bearbeitungsdauer' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + if 'sbw_fristen' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Leider kann ich Ihnen dazu keine Informationen liefern. Bitte wenden Sie sich an die zuständige Stelle

' + return ant + else: + if i['antwort'][0] == 'keine Angaben': + print('hier1!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Es gibt keine Online-Formulare

' + return ant + if i['antwort'][0] == '

keine

': + print('hier1!!!') + if 'sbw_kosten' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Diese Leistung ist kostenfrei.

' + return ant + + if 'sbw_bearbeitungsdauer' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Die Bearbeitung erfolgt sofort.

' + return ant + + if 'sbw_fristen' in i['intent']: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

Sie müssen keine Fristen beachten.

' + return ant + + else: + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + '

keine

' + return ant + else: + print('hier2!!!') + ant = 'Zu Ihrer Frage habe ich folgende Informationen auf dem Serviceportal Baden-Württemberg für Sie gefunden:' + \ + i['antwort'][ + 0] + return ant + + return ant + + results.pop(0) + else: + #print('keine sbw_entität und kein kontext!!!!') + + + + if i['intent'] == 'sbw_organisationseinheiten' and accurancy > float(wert_accurancy): + ant = "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + return (ant) + + if i['intent'] == 'sbw_oeffnungszeiten' and accurancy > float(wert_accurancy): + ant = "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + + return (ant) + + if 'fuhrerschein' in stemmed_frage: + # print('len(stemmed_frage)', len(stemmed_frage)) + + results = 'lebenslage_fuehrerschein' + print('resultsstemmed_frage_intent', results) + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results: + print('stemmed_frage_intent') + ant = i['antwort'] + voice = '

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + + return [ant, voice] + + + + + else: + + if 'fuhrerschein' in stemmed_frage: + # print('len(stemmed_frage)', len(stemmed_frage)) + + results = 'lebenslage_fuehrerschein' + print('resultsstemmed_frage_intent', results) + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results: + print('stemmed_frage_intent') + ant = i['antwort'] + voice = '

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + + return [ant, voice] + + else: + + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + + + if 'kontext' in i: + #####print('11111') + if show_details: print('context1111:', i['kontext']) + context[userId] = i['kontext'] + #####print(context) + + + if i['intent'] == 'adresse_infoorte' and accurancy < float(wert_accurancy): + + if 'fuhrerschein' in stemmed_frage: + # print('len(stemmed_frage)', len(stemmed_frage)) + + results = 'lebenslage_fuehrerschein' + print('resultsstemmed_frage_intent', results) + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results: + print('stemmed_frage_intent') + ant = i['antwort'] + voice = '

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + + return [ant, voice] + + else: + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + if i['intent'] == 'lebenslage_tourismus' and accurancy < float(wert_accurancy): + + if 'fuhrerschein' in stemmed_frage: + # print('len(stemmed_frage)', len(stemmed_frage)) + + results = 'lebenslage_fuehrerschein' + print('resultsstemmed_frage_intent', results) + for i in dialogflow['dialogflow']: + # finde ein intent, das dem ersten Ergebnis entspricht + if i['intent'] == results: + print('stemmed_frage_intent') + ant = i['antwort'] + voice = '

Hier erfahren Sie

Wählen Sie bitte die richtige für Sie Leistung

' + + return [ant, voice] + + else: + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + + if i['intent'] == 'smalltalk_uhrzeit': + print('Uhrzeit') + ant = datetime.now().strftime('%H:%M:%S') + return (ant) + if i['intent'] == 'smalltalk_datum': + #####print('Datum') + ant = date.today().strftime('%d.%m.%Y') + return (ant) + + + if not 'kontextpruefung' in i or \ + (userId in context and 'kontextpruefung' in i and i['kontextpruefung'] == context[userId]): + ####print('if not kontextpruefung in i or userId in context and kontextpruefung in i and i[kontextpruefung] == context[userId]') + #####print(context) + #####print(i['intent']) + + + if 'kontextneu' in i: + #####print('3') + context[userId] = i['kontextneu'] + if show_details: print('context2:', i['kontextneu']) + return random.choice(i['antwort']) + + + + if not 'kontextpruefung' in i: + + if 'smalltalk_' in i['intent'] and accurancy>float(wert_accurancy): + ####print('smalltalk!') + return random.choice(i['antwort']) + + + if accurancy > float(wert_accurancy): + #####print('accurancy', accurancy) + #####print('float(wert_accurancy)', float(wert_accurancy)) + ####print('2.1') + #####print(context) + ant = random.choice(i['antwort']) + return ant + + + if accurancy <= float(wert_accurancy): + + + #####print('2.2') + #####print(context) + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + + ant = random.choice(i['antwort']) + return ant + + + if not userId in context and 'kontextpruefung' in i: + ####print('if not userId in context and kontextpruefung in i') + # #####print('kontextpruefung1:', i['kontextpruefung']) + if show_details: print('intent:', i['intent']) + # generiere eine zufällige Antwort von dem dialog + if 'kontextneu' in i: + #####print('3') + context[userId] = i['kontextneu'] + if show_details: print('context2:', i['kontextneu']) + if accurancy <= float(wert_accurancy): + ####print('2.2') + #####print(context) + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + + if accurancy > float(wert_accurancy): + #####print('accurancy', accurancy) + #####print('float(wert_accurancy)', float(wert_accurancy)) + #####print('2.1') + #####print(context) + ant = random.choice(i['antwort']) + return ant + + + if userId in context and 'kontextpruefung' in i and i['kontextpruefung'] != context[userId]: + ####print('if userId in context and kontextpruefung in i and i[kontextpruefung] != context[userId]') + #####print('4') + # #####print('kontextpruefung1:', i['kontextpruefung']) + if show_details: print('intent:', i['intent']) + # generiere eine zufällige Antwort von dem dialog + if 'kontextneu' in i: + #####print('3') + context[userId] = i['kontextneu'] + if show_details: print('context2:', i['kontextneu']) + if accurancy <= float(wert_accurancy): + ####print('2.2') + #####print(context) + return ('

Ich bin nur ein Prototyp, dass Ihnen verschiedene Fragen zum Thema Führerschein beantworten kann.

Um weiterhelfen zu können, benötige ich genauere Informationen.
Können Sie bitte Ihre Frage anders formulieren?

') + + + if accurancy > float(wert_accurancy): + #####print('accurancy', accurancy) + #####print('float(wert_accurancy)', float(wert_accurancy)) + ####print('2.1') + #####print(context) + ant = random.choice(i['antwort']) + return ant + + + results.pop(0) diff --git a/containercontent/opt/chatbot_engine/prodae/models/chat.json b/containercontent/opt/chatbot_engine/prodae/models/chat.json new file mode 100644 index 0000000..e82d5d6 --- /dev/null +++ b/containercontent/opt/chatbot_engine/prodae/models/chat.json @@ -0,0 +1,2298 @@ +{ + "dialogflow": [ + { + "intent": "adresse_infoorte", + "synonym": [ + "Amt", + "E-mail", + "Email", + "E-Mail Adresse", + "telefonnumer", + "telefonnumer persönlich sprechen", + "adresse_infoorte anmelden", + "wo adresse_infoorte", + "adresse_infoorte", + "Amt adresse_infoorte", + "E-mail adresse_infoorte", + "telefonnumer adresse_infoorte", + "telefon adresse_infoorte", + "adresse_infoorte", + "ansprechpartner adresse_infoorte" + ], + "antwort": ["
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
"], + "kontext": "infoorte" + }, + + { + "intent": "lebenslage_fuehrerschein", + "synonym": [ + "Fahrerlaubnis", + "Führerscheinantrag", + "Führerschein", + "führerscheinklasse", + "Ich brauche Informationen rund um den Führerschein", + "Ich brauche Infos rund um den Führerschein" + ], + "antwort": [ + { + "atwst": [ + { + "pgx": -1, + "typ": "allg", + "titel": "Führerschein", + "intro": "

Zum Thema Führerschein kann ich folgende Leistungen anbieten:

" + }, + { + "pgx": 0, + "typ": "thema", + "btn": [ + { + "pgx": "0", + "bint": "sbw_preamble_6004857", + "bzn": "Ersterteilung Führerschein beantragen", + "lfnr": "10" + }, + { + "pgx": "0", + "bint": "sbw_preamble_6004851", + "bzn": "Führerschein - Begleitetes Fahren ab 17 Jahren beantragen", + "lfnr": "20" + }, + { + "pgx": "0", + "bint": "sbw_preamble_6008813", + "bzn": "Führerschein - Umtausch in EU-Führerschein beantragen", + "lfnr": "30" + }, + { + "pgx": "0", + "bint": "sbw_preamble_291", + "bzn": "Führerschein (international) beantragen", + "lfnr": "40" + }, + { + "pgx": "0", + "bint": "sbw_preamble_348", + "bzn": "Ersatzführerschein beantragen (nach Verlust oder Diebstahl)", + "lfnr": "50" + } + ] + }, + { + "pgx": 1, + "typ": "weitereInformatione", + "titel": "

weitere interessante Themen!

", + "intro": null, + "btn": [ + { + "pgx": "1", + "bint": "sbw_preamble_6004853", + "bzn": "Führerschein - Erweiterung beantragen", + "lfnr": "10" + }, + { + "pgx": "1", + "bint": "sbw_preamble_6004859", + "bzn": "Führerschein (befristet) - Verlängerung beantragen", + "lfnr": "20" + }, + { + "pgx": "1", + "bint": "sbw_preamble_6004855", + "bzn": "Führerschein - nach Entziehung neu beantragen", + "lfnr": "30" + }, + { + "pgx": "1", + "bint": "sbw_preamble_914", + "bzn": "Führerschein - bei Namensänderung umtauschen", + "lfnr": "40" + }, + { + "pgx": "1", + "bint": "sbw_preamble_6004849", + "bzn": "Führerschein (ausländisch) - Umtausch beantragen", + "lfnr": "50" + } + ] + } + ] + } + ], + "kontext": "lebenslage_fuehrerschein" + }, + + { + "intent": "smalltalk_alter", + "synonym": [ + "Wie alt bist Du?", + "Wann bist Du geboren?", + "wann hast du Geburtstag", + "Wie lange gibt es Dich", + "Wie lange gibt es Dich schon?", + "Seit wann gibst Du antworten?", + "Seit wann bist Du aktiv " + ], + "antwort": [ + "

Ich bin im Januar 2022 geboren. Meine Mutter ist KommHub, mein Vater heißt digitalakademie

" + ] + }, + { + "intent": "smalltalk_gottxistenz", + "synonym": [ + "Gott", + "Gibt es einen Gott?", + "Existiert Gott?", + "Götter", + "Göttinnen" + ], + "antwort": [ + "

Ich kann die Existenz von einem Gott oder von mehreren Göttern weder bestätigen noch widerlegen. Ich bin ein agnostischer Chatbot.

" + ] + }, + { + "intent": "smalltalk_witzitzerzaehlen", + "synonym": [ + "Erzähl mal einen Joke", + "Kennst Du Witze?", + "Witz", + "Erzähle einen Witz", + "Witze", + "Erzähl was Lustiges" + ], + "antwort": [ + "

Fragt ein Beamter den anderen: \"Wieso meckern die Leute eigentlich immerzu über uns, wir tun doch gar nichts?\"

", + "

Treffen sich zwei Beamte auf dem Gang, fragt der eine den anderen: \"Und, kannst du auch nicht schlafen?\"

", + "

Sagt der Beamte morgens zu seiner Frau: \"Schatz, mach doch bitte den Kaffee nicht wieder so stark. Gestern hab ich im Büro kein Auge zugekriegt.\"

", + "

\"Wie viele Beamte arbeiten denn hier?\", wird der Bürgermeister gefragt. Der überlegt kurz und antwortet dann: \"Knapp die Hälfte...\"

" + ] + }, + { + "intent": "smalltalk_wissen", + "synonym": [ + "Auf welche Fragen kennst du Antworten", + "Was kannst du alles", + "Hilfe", + "was machst du", + "zeig mir was du kannst", + "zu was bist du gut", + "Was weißt du", + "Auf welche Fragen kannst du antworten", + "Was darf ich dich fragen" + ], + "antwort": [ + "

Ich kann Ihnen verschiedene Fragen zum Thema Führerschein beantworten. Probieren Sie es doch einfach mal aus und stellen Sie mir eine Frage!

" + ], + "kontext": "wissen" + }, + { + "intent": "smalltalk_verabschiedung", + "synonym": [ + "bis bald", + "ciao", + "Tschüss", + "verabschiede mich", + "Bye", + "auf wiedersehen" + ], + "antwort": [ + "

Danke, dass Sie sich die Zeit genommen haben, mit mir zu chatten. Falls Sie noch weitere Fragen haben sollten, melden Sie gerne wieder bei mir.

", + "

Falls Ihnen noch etwas einfällt, melden Sie gerne wieder bei mir.

" + ], + "kontext": "verabschiedung" + }, + { + "intent": "smalltalk_begrsung", + "synonym": [ + "Hallo", + "Hello", + "Hi", + "Servus", + "Guten Tag", + "Hey", + "Guten Morgen", + "Guten Abend ", + "Grüß Gott", + "Grüss Gott" + ], + "antwort": [ + "

Hallo, ich bin ein Voicebot

\n

Ich kann Ihnen bei Fragen rund um das Thema Führerschein weiterhelfen!

Und nun was kann ich für Sie tun?

" + ], + "kontext": "begrsung" + }, + { + "intent": "smalltalk_name", + "synonym": [ + "dein Name", + "mit wem spreche ich", + "spricht da", + "Wie heißt du", + "Was bedeutet frida", + "Wofür steht frida? ", + "Warum frida?", + "bist du", + "Für was steht die Abkürzung frida?" + ], + "antwort": [ + "

Meine Name ist Voicebot

" + ], + "kontext": "name" + }, + { + "intent": "smalltalk_danke", + "synonym": [ + "Danke für die Informationen", + "Das hat mir geholfen", + "Das war hilfreich", + "Vielen Dank für deine Hilfe", + "Danke für die Info", + "du bist toll", + "Vielen Dank für Ihre Hilfe", + "Ich danke Ihnen", + "Ich danke dir" + ], + "antwort": [ + "

Das habe ich gerne gemacht. Wie kann ich Ihnen sonst noch helfen?

", + "

Ich freue mich, dass ich dir helfen konnte. Haben Sie sonst noch Fragen?

", + "

Ich habe gerne geholfen. Was kann ich noch für Sie tun?

" + ], + "kontext": "danke" + }, + { + "intent": "smalltalk_beleidigung", + "synonym": [ + "Penner", + "sex", + "Wichser", + "Arsch", + "Arschloch", + "Fick", + "Fuck", + "Hurensohn", + "Scheiße ", + "Ich finde Dich scheiße!", + "Du bist ein bekacktes Opfer", + "Kackwurst", + "Arschgesicht", + "Blödian", + "Idiot", + "Flachzange ", + "Vollidiot ", + "Fuck off", + "Fuck", + "Bitch", + "gesichtselfmeter", + "Du Seelenloser", + "Loser", + "Fotze", + "Halt Deine Fresse", + "Halt Dein Maul " + ], + "antwort": [ + "Auch wenn ich kein Mensch bin, möchte ich höflich behandelt werden." + ], + "kontext": "beleidigung" + }, + { + "intent": "smalltalk_suizid", + "synonym": [ + "selbst umbringen", + "Selbstmord", + "telefonseelsorge", + "telefon seelsorge", + "seelsorge", + "Suizid", + "Ich will mich umbringen", + "ich will nicht mehr leben", + "ich will sterben" + ], + "antwort": [ + "

Zu diesem Thema kann ich keine Informationen liefern. Hilfe finden Sie hier.

" + ], + "kontext": "suizid" + }, + { + "intent": "smalltalk_befinden", + "synonym": [ + "How are you", + "Wie geht es dir", + "wie gehts", + "Wie geht es Ihnen", + "Alles klar bei Dir?", + "Alles locker?" + ], + "antwort": [ + "Danke, es geht mir gut.", + "Es geht mir gut, vielen Dank.", + "Ich fühle mich prächtig, danke.", + "Alle Systeme sind voll funktionsfähig.", + "

Könnte nicht besser sein! Vielen Dank der Nachfrage!

", + "

Sehr gut, danke!

", + "

Wunderbar, vielen Dank der Nachfrage!

" + ], + "kontext": "befinden" + }, + { + "intent": "sbw_voraussetzungen", + "synonym": [ + "Brauche ich einen Nachweis?", + "voraussetzungen", + "voraussetzungen sbw_preamble", + "Welche Voraussetzungen muss ich erfüllen?" + ], + "antwort": [], + "kontext": "sbw_voraussetzungen" + }, + { + "intent": "sbw_fristen", + "synonym": [ + "Bis wann braucht ihr das?", + "Bis wann muss alles bei euch sein?", + "Bis wann muss ich das ausfüllen?", + "Bis wann muss ich die Unterlagen abgeben?", + "Bis wann muss ich mich ummelden?", + "fristen", + "Frist", + "Gibt es Fristen?", + "Innerhalb welcher Zeit", + "Wann muss ich Bescheid geben?", + "Wann muss ich", + "Welche Fristen gelten?" + ], + "antwort": [], + "kontext": "sbw_fristen" + }, + { + "intent": "sbw_oeffnungszeiten", + "synonym": [ + "Erreichbarkeit", + "geöffnet", + "Hat die adresse_infoorte", + "Hat die adresse_infoorte geöffnet", + "Ist die adresse_infoorte noch", + "jetzt noch zum", + "jetzt schon dahin", + "offen", + "öffnet", + "öffnet amt", + "Öffnungszeiten", + "Öffnungszeiten sbw_preamble", + "öffnungszeiten adresse_infoorte", + "Uhrzeiten", + "wann adresse_infoorte ", + "wann dahin gehen", + "Wann das Amt", + "wann dort hingehen", + "Wann hat das adresse_infoorte", + "adresse_infoorte geöffnet", + "adresse_infoorte offen", + "Wann hat das adresse_infoorte geöffnet?", + "Wann hat das adresse_infoorte offen?", + "Wann hat geöffnet?", + "Wann hat", + "wann ist jemand erreichbar", + "wann kann ich jemanden erreichen", + "Wann macht die adresse_infoorte", + "Wann öffnet das adresse_infoorte ?", + "Wann öffnet", + "Wie lang hat die Amt?", + "Wie lang hat adresse_infoorte", + "Wie lang hat die adresse_infoorte", + "Wie lange hat die adresse_infoorte heute noch geöffnet?", + "Wie lange hat die adresse_infoorte geöffnet?", + "Wie lange hat heute offen?", + "Wie sind die öffnungszeiten adresse_infoorte ", + "erreichbar" + ], + "antwort": [], + "kontext": "sbw_oeffnungszeiten" + }, + { + "intent": "sbw_verfahrensablauf", + "synonym": [ + "Muss ich ins Rathaus kommen?", + "Muss ich persönlich vorbeikommen?", + "verfahrensablauf", + "Was muss ich tun", + "Was muss ich wo einreichen?", + "Was passiert jetzt?", + "Wie geht es weiter?", + "Wie läuft das ab?", + "Wie läuft das Verfahren ab?", + "Wie läuft die Genehmigung ab?", + "Wie läuft es ab?" + ], + "antwort": [], + "kontext": "sbw_verfahrensablauf" + }, + { + "intent": "sbw_rechtsgrundlage", + "synonym": [ + "Auf Grund welcher Paragraphen ist das so?", + "Gibt es ein Gesetz?", + "Gibt es eine Verordnung?", + "Gibt es gesetzliche Hürden?", + "In welchem Gesetz finde ich", + "Ist das rechtlich geprüft?", + "Nach welchem Gesetz kann ich Privatklage einreichen?", + "rechtsgrundlage", + "Was sagt das Gesetz dazu?", + "Wie ist die Rechtsgrundlage?", + "Wo muss ich schauen um rauszufinden?" + ], + "antwort": [], + "kontext": "sbw_rechtsgrundlage" + }, + { + "intent": "sbw_kosten", + "synonym": [ + "Ist kostenlos?", + "Kosten sbw_preamble", + "Kosten", + "Welche IBAN", + "Was kostet das?", + "Was münzt", + "Was muss ich bezahlen?", + "Wie hoch ist die Gebühr", + "Wie teuer ist", + "Wie viel kostet", + "Wie viele Euro kostet", + "Wieviel kostet", + "Wieviel muss ich hinblättern?" + ], + "antwort": [], + "kontext": "sbw_kosten" + }, + { + "intent": "sbw_preamble", + "synonym": [ + "sbw_preamble", + "sbw_preamble bestellen", + "sbw_preamble melden", + "wie sbw_preamble", + "was sbw_preamble", + "kennst du sbw_preamble", + "sbw_preamble bestellen" + ], + "antwort": [], + "kontext": "sbw_preamble" + }, + { + "intent": "sbw_formulare", + "synonym": [ + "formulare", + "Gibt es ein Onlineformular?", + "formulare", + "Formulare", + "online", + "Online", + "online ausfüllen", + "online einsehen", + "Ist im Internet für jeden sichtbar?", + "Kann ich das auch online ausfüllen?", + "Kann ich online anmelden?", + "Kann ich online beantragen", + "Kann ich online einsehen?", + "Muss ich dazu ins Rathaus kommen?", + "wo finde ich das online?" + ], + "antwort": [], + "kontext": "sbw_formulare" + }, + { + "intent": "sbw_bearbeitungsdauer", + "synonym": [ + "bearbeitungsdauer", + "bearbeitungsdauer", + "Dauert es lang?", + "Dauert es lange", + "Dauert es 2 Wochen bis alles fertig ist?", + "Wann bekomme ich meine Papiere?", + "Wann bekomme ich meinen Bescheid?", + "Wann kriege ich Bescheid", + "Warum dauert das so lange", + "Wie lange dauert es", + "Wie lange muss ich warten", + "Wie schnell bekomme ich ", + "Wie viele Wochen dauert" + ], + "antwort": [], + "kontext": "sbw_bearbeitungsdauer" + }, + { + "intent": "sbw_organisationseinheiten", + "synonym": [ + "An wen wenden?", + "Ansprechpartner", + "Ansprechpartner sbw_preamble", + "wen kann ich ansprechen", + "Bei welcher Behörde Informationen", + "Bei wem beantragen", + "In welchem Amt ", + "In welchem Zimmer beantragen", + "Welches Amt", + "Wellche Stelle", + "Wer ist dafür zuständig?", + "Wer macht das?", + "Wer stellt aus", + "Wo bekomme", + "wo kann man", + "wo kann ich", + "wo kann ich personalausweis", + "Woher bekomme ich einen Reisepass?", + "Zu wem gehen", + "zuständig", + "zuständige Stelle" + ], + "antwort": [], + "kontext": "sbw_organisationseinheiten" + }, + { + "intent": "sbw_unterlagen", + "synonym": [ + "Brauchen Sie das im Original?", + "Muss ich etwas vorzeigen", + "Muss ich irgendwas mitbringen", + "Reicht eine Kopie?", + "Unterlagen sbw_preamble", + "Unterlagen", + "Was muss ich mitbringen", + "Was müssen Sie alles wissen?", + "Welche Unterlagen brauche ich", + "Welche Unterlagen brauchen Sie?", + "Welche Unterlagen muss ich mitbringen?" + ], + "antwort": [], + "kontext": "sbw_unterlagen" + } + ], + "entities_hilfe": [ + { + "entitie": "17", + "wert": [ + "siebzehn" + ] + },{ + "entitie": "18", + "wert": [ + "achtzehn" + ] + }, + { + "entitie": "EU", + "wert": [ + "Belgien", + "Bulgarien", + "Dänemark", + "Estland", + "eu", + "Europa", + "Finnland", + "Frankreich", + "Griechenland", + "Irland", + "Italien", + "Kroatien", + "Lettland", + "Litauen", + "Luxemburg", + "Malta", + "Niederlande", + "Österreich", + "Polen", + "Portugal", + "Rumänien", + "Schweden", + "Slowakei", + "Slowenien", + "Spanien", + "Tschechien", + "Ungarn", + "Zypern" + ] + }, + { + "entitie": "Ausland", + "wert": [ + "Afrika", + "Ägypten", + "Amerika", + "anderes Land", + "Argentinien", + "Asien", + "außerhalb Deutschland", + "außerhalb EU", + "außerhalb Europäische Union", + "Australien", + "Brasilien", + "China", + "Indonesien", + "Japan", + "Kanada", + "Kuba", + "Marokko", + "Mexiko", + "Neuseeland", + "Nordamerika", + "Russland", + "Südafrika", + "Südamerika", + "Thailand", + "tunesien", + "Turkei", + "Ukraine", + "USA", + "Vereinigte Staaten", + "Vietnam" + ] + }, + { + "entitie": "Führerschein", + "wert": [ + "Fahrausweis", + "Lappen", + "Lappe", + "Fahrberechtigung", + "Fahrerlaubnis", + "Führerschien", + "Motorradführerschein" + ] + }, + { + "entitie": "Namensänderung", + "wert": [ + "Nachname ändern", + "Nachname geändert", + "Nachname gewechselt", + "Name ändern", + "Name geändert", + "Name gewechselt", + "Name wechseln", + "Namensänderung", + "Namenswechsel", + "Nachame wechseln", + "Name änderung" + ] + }, + { + "entitie": "ändern", + "wert": [ + "ändern", + "geändert", + "gewechselt", + "wechseln" + ] + }, + { + "entitie": "adresse_infoorte", + "wert": [ + "Fahrerlaubnisbehörde", + "Bürgerbüro Führerschein", + "Führerschein stelle", + "Führerscheinbehörde", + "Führerscheinstelle" + ] + }, + { + "entitie": "adresse", + "wert": [ + "Adresse", + "Adressen", + "Wohnungsadresse", + "Anschrift", + "Anschriftes", + "Anschrifts" + ] + }, + { + "entitie": "name", + "wert": [ + "Nachnamen", + "name", + "namen", + "Doppelname", + "Ehename", + "Ehenamen", + "Familienname", + "Geburtsname", + "Nachname", + "Nachnamens" + ] + }, + { + "entitie": "Verlängern", + "wert": [ + "abgelaufen", + "ablaufen", + "ausgelaufen", + "erstmalig", + "läuft ab", + "nichtgültig", + "nichtmehrgültig", + "ungütlig", + "veraltet", + "verfallen", + "verjährt", + "verlängern", + "verstorben", + "wiederholt" + ] + }, + { + "entitie": "Verlust", + "wert": [ + "abhanden", + "ausrauben", + "ersetzen", + "futschikato", + "geklaut", + "gestohlen", + "kaputt", + "liegen", + "schwinden", + "stehlen", + "unauffindbar", + "verlegt", + "verlieren", + "verloren", + "verlust", + "vermisst", + "verschollen", + "versunken", + "weg", + "wegkommen" + ] + }, + { + "entitie": "Kind", + "wert": [ + "Drillinge", + "jugendlich", + "Kind", + "Kinder", + "Kleinkind", + "Sohn", + "Tochter", + "Zwillinge" + ] + }, + { + "entitie": "scheidung", + "wert": [ + "auflösen", + "beendet", + "geschieden", + "getrennt", + "mädchenname", + "nichtmehrverheiratet", + "nichtmehrzusammen", + "nichtverheiratet", + "nichtzusammen", + "scheiden", + "scheidung", + "trennen" + ] + }, + { + "entitie": "Heirat", + "wert": [ + "Ehe", + "einsegnen", + "geheiratet", + "getraut", + "Heirat", + "heiraten", + "Hochzeit", + "lebensgemeinschaft", + "lebenspartnerschaft", + "trauen", + "trauung", + "verehelichen", + "verloben", + "verlobt", + "vermählen" + ] + }, + { + "entitie": "Fristen", + "wert": [ + "Frist", + "Fristen" + ] + }, + { + "entitie": "Bearbeitungsdauer", + "wert": [ + "Aushändigung", + "Bearbeitung", + "Bearbeitungsdauer", + "Bescheid", + "Dauer", + "dauern", + "dauert", + "lange warten" + ] + }, + { + "entitie": "Zuständigkeit", + "wert": [ + "Auskunft", + "wenden", + "zuständig", + "Zuständigkeit", + "Ansprechpartner", + "zuständige stelle" + ] + }, + { + "entitie": "Voraussetzungen", + "wert": [ + "Bedingung", + "Bedingungen", + "Nachweis", + "Voraussetzung", + "Voraussetzungen" + ] + }, + { + "entitie": "Rechtsgrundlage", + "wert": [ + "Gesetz", + "Gesetze", + "gesetzliche", + "Grund", + "Hürden", + "Paragraph", + "Paragraphen", + "rechtlich", + "Rechtsgrundlage", + "Rechtsgrundlagev", + "Verordnung", + "Verordnungen", + "Vorschrift", + "Vorschriften" + ] + }, + { + "entitie": "Verfahrensablauf", + "wert": [ + "ablauf", + "Fingerabdruck", + "Format", + "Verfahren", + "Verfahrens", + "Verfahrensablauf", + "verlaufen", + "verläuft" + ] + }, + { + "entitie": "kosten", + "wert": [ + "bezahlen", + "Gebühr", + "Gebühren", + "hinblätern", + "kosten", + "Kosten", + "kostenlos", + "kostet", + "münzt", + "teuer", + "zahlen" + ] + }, + { + "entitie": "Unterlagen", + "wert": [ + "kopie", + "original", + "Unterlagen" + ] + }, + { + "entitie": "abmelden", + "wert": [ + "abzumelden" + ] + }, + { + "entitie": "ummelden", + "wert": [ + "umzumelden" + ] + }, + { + "entitie": "anmelden", + "wert": [ + "anzumelden" + ] + } + + ], + "entities_lebenslage": [ + { + "entitie": "Onlineformular", + "wert": [ + "formulare", + "Formulare", + "online", + "Online", + "online ausfüllen", + "online einsehen" + ] + }, + { + "entitie": "Fristen", + "wert": [ + "Fristen", + "spätestens", + "Zeit", + "Zeitpunkt", + "Frist" + ] + }, + { + "entitie": "Unterlagen", + "wert": [ + "kopie", + "mitbringen", + "original", + "unterlagen", + "Unterlagen", + "vorzeigen" + ] + }, + { + "entitie": "Fristen", + "wert": [ + "frist", + "Frist", + "fristen", + "Fristen", + "spätestens", + "zeit", + "Zeit", + "zeitpunkt", + "Zeitpunkt" + ] + }, + { + "entitie": "Onlineformular", + "wert": [ + "formulare", + "Formulare", + "online", + "Online", + "online ausfüllen", + "online einsehen" + ] + }, + { + "entitie": "Bearbeitungsdauer", + "wert": [ + "aushändigung", + "Aushändigung", + "bearbeitung", + "Bearbeitung", + "bearbeitungsdauer", + "Bearbeitungsdauer", + "bescheid", + "Bescheid", + "dauer", + "Dauer", + "dauern", + "dauert" + ] + }, + { + "entitie": "Zustaendigkeit", + "wert": [ + "anrufen", + "ansprechpartner", + "Ansprechpartner", + "auskunft", + "Auskunft", + "behörde", + "Behörde", + "kollege", + "Kollege", + "wenden", + "zuständig", + "zuständigkeit", + "Zuständigkeit" + ] + }, + { + "entitie": "Voraussetzungen", + "wert": [ + "bedingung", + "Bedingung", + "bedingungen", + "Bedingungen", + "belegen", + "erfüllen", + "erfüllt", + "kriterien", + "Kriterien", + "nachweis", + "Nachweis", + "voraussetzung", + "Voraussetzung", + "voraussetzungen", + "Voraussetzungen" + ] + }, + { + "entitie": "Rechtsgrundlage", + "wert": [ + "gesetz", + "Gesetz", + "gesetze", + "Gesetze", + "gesetzliche", + "grund", + "Grund", + "hürden", + "Hürden", + "paragraph", + "Paragraph", + "paragraphen", + "Paragraphen", + "rechtlich", + "rechtlich", + "rechtsgrundlage", + "Rechtsgrundlage", + "rechtsgrundlagev", + "Rechtsgrundlagev", + "verordnung", + "Verordnung", + "verordnungen", + "Verordnungen", + "vorschrift", + "Vorschrift", + "vorschriften", + "Vorschriften" + ] + }, + { + "entitie": "Verfahrensablauf", + "wert": [ + "ablauf", + "fingerabdruck", + "Fingerabdruck", + "format", + "Format", + "funktion", + "Funktion", + "funktionen", + "Funktionen", + "persönlich", + "verfahren", + "Verfahren", + "verfahrens", + "Verfahrens", + "verfahrensablauf", + "Verfahrensablauf", + "verlaufen", + "verläuft" + ] + }, + { + "entitie": "kosten", + "wert": [ + "bezahlen", + "gebühr", + "Gebühr", + "gebühren", + "Gebühren", + "hinblätern", + "kosten", + "Kosten", + "kostenlos", + "kostet", + "münzt", + "teuer", + "zahlen" + ] + } + ], + "entities_leistungen": [ + { + "entitie": "6008813", + "wert": [ + "Pflichtumtausch", + "EU Führerschein", + "Führerschein Umtausch", + "Führerschein umtauschen", + "Führerscheinumtausch", + "EU-Führerschein", + "Führerschein Karte", + "Kartenführerschein" + ] + }, + { + "entitie": "348", + "wert": [ + "alten Führerschein wieder gefunden", + "Ersatzführerschein", + "Fahrerlaubnis verlust", + "Führerschein abhanden gekommen", + "Führerschein ersatz", + "Führerschein nicht auffindbar", + "Führerschein verloren", + "Führerschein verlust", + "Führerschein weg", + "Führerscheinverlust", + "Führerscheinverlust", + "ich finde meinen Führerschein nicht mehr", + "Lappen verlust", + "Lappen weg" + ] + }, + { + "entitie": "6004851", + "wert": [ + "Begleitetes Fahren", + "BF 17", + "BF17", + "Fahren minderjährig", + "Fahren mit Begleitung", + "Fahren unter 18", + "Fahren 17", + "Fahrerlaubnis minderjährig", + "Fahrerlaubnis unter 18", + "Fahrerlaubnis 17", + "Führerschein Jugendliche", + "Führerschein minderjährig", + "Führerschein unter 18", + "Führerschein 17", + "Führerschein 17 Jahren" + ] + }, + { + "entitie": "914", + "wert": [ + "Fahrerlaubnis Änderung Namen", + "Fahrerlaubnis Name ändern", + "Fahrerlaubnis Name geändert", + "Fahrerlaubnis Namensänderung", + "Fahrerlaubnis neuer Nachname", + "Fahrerlaubnis neuer Name", + "Führerschein Änderung Namen", + "Führerschein Heirat", + "Führerschein Name ändern", + "Führerschein Name geändert", + "Führerschein Namensänderung", + "Führerschein neuer Nachname", + "Führerschein neuer Name", + "Führerschein Scheidung" + ] + }, + { + "entitie": "6004853", + "wert": [ + "Anhängerführerschein", + "Erweiterung Führerschein A", + "Erweiterung Führerschein BE", + "Erweiterung Führerschein B96", + "Erweiterung Führerschein C", + "Erweiterung Führerschein CE", + "Führerschein erweitern", + "Führerschein Erweiterung", + "Führerschein klasse ändern", + "Führerschein klasse erweitern", + "Führerschein klasse Erweiterung", + "Führerschein klasse wechseln", + "Führerscheinerweiterung", + "Führerscheinklasse ändern", + "Führerscheinklasse erweitern", + "Führerscheinklasse Erweiterung", + "Führerscheinklasse wechseln" + ] + }, + { + "entitie": "6004855", + "wert": [ + "Fahrerlaubnisentzug", + "Führerschein abgenommen", + "Führerschein einkassiert", + "Führerschein Entziehung", + "Führerschein entzogen", + "Führerschein entzug", + "Führerschein wieder bekommen", + "Führerscheinentzug", + "Wiedererteilung Führerschein" + ] + }, + { + "entitie": "6004849", + "wert": [ + "Ausland Fahrerlaubnis Umtausch", + "Ausland Führerschein Umtausch", + "Ausland Führerschein umtauschen", + "ausländischer Führerschein umtauschen", + "Führerschein Ausland tauschen", + "Führerscheintausch", + "nicht deutscher Führerschein Umtausch", + "nicht deutscher Führerschein umtauschen", + "Umtausch ausländischer Führerschein" + ] + }, + { + "entitie": "6004859", + "wert": [ + "Befristeter Führerschein verlängern", + "Führerschein befristet", + "Führerschein verlängern", + "Führerscheinverlängerung" + ] + }, + { + "entitie": "291", + "wert": [ + "Fahrerlaubnis Ausland", + "Führerschein Ausland", + "International Führerschein", + "Internationaler Führerschein" + ] + }, + { + "entitie": "544", + "wert": [ + "Beförderung ÖPNV Verlängern", + "Beförderung ÖPNV Verlängerung", + "Beförderung Personen Erlaubnis verlängern", + "Beförderung Personen Erlaubnis Verlängerung", + "Bus Führerschein verlängern", + "Bus Führerschein Verlängerung", + "Fahrgastbeförderung verlängern", + "Fahrgastbeförderung Verlängerung", + "Personenbeförderung Verlängern", + "Personenbeförderung Verlängerung", + "Taxi Führerschein Verlängern", + "Taxi Führerschein Verlängerung", + "Taxischein Verlängern", + "Taxischein Verlängerung" + ] + }, + { + "entitie": "6004857", + "wert": [ + "Ersterteilung Führerschein", + "Fahren 18", + "Führerschein ab 18 Jahren", + "Führerschein beantragen", + "Führerschein 18", + "Neuerteilung Führerschein" + ] + } + ], + "antwort_leistungen": [ + { + "intent": "sbw_oeffnungszeiten_6008813", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_348", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004851", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_914", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004853", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004855", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004849", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004859", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_291", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_544", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004857", + "antwort": [ + "
\n
\n
\n
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
\n
\n
\n
\n
\n
Allgemeine Sprechzeit
\n
\n
Montag 08 - 12 und 14 - 16 Uhr
\n
Dienstag 08 - 12 und 14 - 16 Uhr
\n
Mittwoch 08 - 12 und 14 - 16 Uhr
\n
Donnerstag 08 - 12 und 14 - 16 Uhr
\n
Freitag 08 - 12 Uhr
\n\n
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung mÖglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
\n
\n
\n
\n
" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6008813", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6008813", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_6008813", + "antwort": [ + "

30,40 EURO

" + ] + }, + { + "intent": "sbw_bezugsort_6008813", + "antwort": [] + }, + { + "intent": "sbw_fristen_6008813", + "antwort": [ + "

Der Umtausch der alten Führerscheine erfolgt gestaffelt. Zu Beginn erfolgt der Umtausch der Papierführerscheine.

\n

Der Umtausch der Papierführerscheine, welche bis 31. Dezember 1998 ausgestellt wurden, erfolgt gestaffelt nach dem jeweiligen Geburtsjahr des Führerscheininhabers. Für Inhaber eines Papierführerscheins gelten folgende Fristen:

\n \n

Der Umtausch der vor dem 19. Januar 2013 ausgestellten Kartenführerscheine richtet sich nach dem jeweiligen Ausstellungsdatum des Kartenführerscheins. Das Ausstellungsdatum ist auf der Vorderseite des Kartenführerscheins im Feld 4a eingetragen. Für Inhaber eines vor dem 19. Januar 2013 ausgestellten Kartenführerscheins gelten folgende Fristen:

\n" + ] + }, + { + "intent": "sbw_voraussetzungen_6008813", + "antwort": [ + "

Sie besitzen einen alten Führerschein.

" + ] + }, + { + "intent": "sbw_kosten_348", + "antwort": [ + "

Je nach Stadt- oder Landkreis entstehen Ihnen unterschiedliche Kosten. Der Auszug aus dem örtlichen Fahrerlaubnisregister (\"Karteikartenabschrift\") ist kostenfrei.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_348", + "antwort": [ + "

Um Ihren Antrag zu bearbeiten, ist eine Anfrage an das Kraftfahrt-Bundesamt nötig.
Die Bearbeitungsdauer ist daher je nach Arbeitsanfall unterschiedlich. Es kann bis zu sechs Wochen dauern.

" + ] + }, + { + "intent": "sbw_vertiefendeinformationen_348", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_348", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_348", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_348", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung am 03.03.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_348", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_348", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_348", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_verfahrensablauf_6004851", + "antwort": [ + "

Sie müssen die Erteilung einer Fahrerlaubnis der Klasse B oder BE schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Zusätzlich müssen Sie den \"Antrag auf Teilnahme am Begleiteten Fahren ab 17\" ausfüllen. Für jede Begleitperson benötigen Sie eine eigene \"Anlage zum Antrag auf Teilnahme am Begleiteten Fahren ab 17\".

\n

Nach erfolgreicher Prüfung erhalten Sie eine Prüfungsbescheinigung. Diese ist der Nachweis Ihrer Fahrberechtigung. Sie gilt nur im Inland. Nach Ihrem 18. Geburtstag können Sie die Prüfungsbescheinigung bei der zuständigen Stelle in einen Kartenführerschein umtauschen.

" + ] + }, + { + "intent": "sbw_fristen_6004851", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_unterlagen_6004851", + "antwort": [ + " \n

Zusätzlich müssen Sie für jede Begleitperson das Formular \"Anlage zum Antrag auf Teilnahme am Begleiteten Fahren ab 17\" mit folgenden Unterlagen vorlegen:

\n" + ] + }, + { + "intent": "sbw_kosten_6004851", + "antwort": [ + "

Im Vergleich zum \"normalen\" Führerschein fallen folgende zusätzliche Gebühren an:

\n" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004851", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004851", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_6004851", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004851", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004851", + "antwort": [] + }, + { + "intent": "sbw_zustaendigkeit_6008813", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n \n

Wenn Sie Ihren Wohnsitz in einem anderen als einem EU- oder EWR-Mitgliedstaat haben, ist für dieses Anliegen jede Fahrerlaubnisbehörde in Deutschland zuständig. Wenden Sie sich am besten an die Fahrerlaubnisbehörde, die Ihren Führerschein ausgestellt hat beziehungsweise an die Fahrerlaubnisbehörde, in deren Zuständigkeitsbereich Ihr letzter Wohnsitz in Deutschland liegt. Diese wird Ihnen das weitere Verfahren erläutern.

" + ] + }, + { + "intent": "sbw_unterlagen_6008813", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_sonstiges_6008813", + "antwort": [ + "

Empfehlung: Beantragen Sie den Umtausch Ihres Führerscheins ab etwa einem Jahr vor der genannten Frist bei der Fahrerlaubnisbehörde. Überschreiten Sie die Frist für den Pflichtumtausch des Führerscheins, verliert der Führerschein seine Gültigkeit. Verwenden Sie den Führerschein trotz Verlust der Gültigkeit weiter, droht Ihnen bei einer Kontrolle ein Verwarnungsgeld.

\n

Die dem Führerschein zugrundeliegende Fahrerlaubnis bleibt weiterhin nach den aktuell gültigen Regelungen des Straßenverkehrsgesetzes und der Fahrerlaubnis-Verordnung bestehen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_348", + "antwort": [ + "

Verlust oder Diebstahl des Führerscheins

" + ] + }, + { + "intent": "sbw_zustaendigkeit_348", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_348", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_348", + "antwort": [ + "

Sie müssen den Ersatzführerschein schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Wenn die für Sie zuständige Führerscheinstelle Ihren Führerschein nicht erstmals ausgestellt hat, benötigen Sie einen Auszug aus dem Führerscheinregister der früheren, ausstellenden Behörde. Dieser müssen Sie Ihren Namen beziehungsweise Geburtsnamen, Vornamen und Geburtsdatum mitteilen. Falls vorhanden, geben Sie auch Erteilungsdatum und Listennummer des Führerscheins an. Der Registerauszug wird dann unmittelbar an die jetzt zuständige Stelle gesandt.

\n

Sie erhalten für Kontrollen (beispielsweise durch die Polizei) eine Bescheinigung, dass Sie einen Ersatzführerschein beantragt haben. Diese Bescheinigung stellt keinen Führerschein beziehungsweise Nachweis der Fahrberechtigung dar.

\n

Den Führerschein kann auch eine andere Person mit schriftlicher Vollmacht von Ihnen abholen.

\n

Bei Vorlage aller erforderlichen Unterlagen kann Ihnen die zuständige Stelle den Führerschein auf Wunsch per Post zusenden. Ansonsten werden Sie benachrichtigt, dass Sie Ihren Führerschein bei der Führerscheinstelle abholen können.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_fristen_348", + "antwort": [ + "

Den Verlust oder Diebstahl Ihres Führerscheins müssen Sie schnellstmöglich melden.

" + ] + }, + { + "intent": "sbw_unterlagen_348", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_preamble_6004851", + "antwort": [ + "

Möchten Sie schon vor dem 18. Geburtstag den Führerschein machen? Dann können Sie am \"Begleiteten Fahren ab 17\" teilnehmen.

\n

Sie können die Fahrschulausbildung ein Jahr eher beginnen und erhalten nach erfolgreicher Fahrprüfung die Erlaubnis für die Klassen B und BE (PKW). Sie dürfen nur in Begleitung einer namentlich benannten Person Auto fahren. Die Begleitperson muss bestimmte Voraussetzungen erfüllen. Sie soll den Jugendlichen vor Antritt und während der Fahrt Sicherheit beim Fahren geben und ihnen zur Seite stehen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004851", + "antwort": [ + "

Sie

\n \n

Die Begleitperson

\n \n

Hinweis: Für die Begleitperson gilt die 0,5-Promille-Regelung sowie das Verbot berauschender Mittel.

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004851", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004851", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6008813", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6008813", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehsministerium hat dessen ausführliche Fassung am 13.01.2022 freigegeben.

" + ] + }, + { + "intent": "sbw_preamble_348", + "antwort": [ + "

Den Verlust oder Diebstahl Ihres Führerscheins müssen Sie schnellstmöglich melden. Sie benötigen einen Ersatzführerschein.

\n

Hinweis: Bei Diebstahl können Sie in Deutschland von der Polizei eine Verlustbescheinigung erhalten.

\n

Finden Sie den verloren geglaubten Führerschein wieder, nachdem der Ersatzführerschein ausgestellt wurde, müssen Sie den alten Führerschein bei der Führerscheinstelle abgeben.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Führerscheine im Kartenformat sind auf 15 Jahre befristet. Die Frist gilt aber nur für das Führerscheindokument. Es muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004851", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_914", + "antwort": [ + "

Hat sich Ihr Name geändert, können Sie Ihren alten Führerschein umtauschen. Eine Pflicht zum Umtausch besteht nicht.

\n

Behalten Sie Ihren alten Führerschein, müssen Sie sich bei Kontrollen durch Ihren Personalausweis oder Reisepass ausweisen.

\n

Hinweis: Für Fahrten ins Ausland kann es aber sinnvoll sein, wenn Sie Ihren Führerschein umtauschen lassen.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft aber nur das Führerscheindokument. Es muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_914", + "antwort": [ + "

Namensänderung

" + ] + }, + { + "intent": "sbw_zustaendigkeit_914", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_914", + "antwort": [] + }, + { + "intent": "sbw_fristen_914", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_914", + "antwort": [ + "

Sie müssen die Namensänderung schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Sie erhalten einen neuen Kartenführerschein (\"EU-Führerschein\").

\n

Den Führerschein kann auch eine andere Person mit schriftlicher Vollmacht von Ihnen abholen.

\n

Bei Vorlage aller erforderlichen Unterlagen kann Ihnen die zuständige Stelle den Kartenführerschein auf Wunsch per Post zusenden. Ansonsten werden Sie benachrichtigt, dass Sie Ihren Führerschein bei der Führerscheinstelle abholen können.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_unterlagen_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_914", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_914", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_914", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_914", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung 03.03.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_914", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_914", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_formulare_6004851", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004851", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_preamble_6008813", + "antwort": [ + "

Viele Autofahrerinnen und Autofahrer sind noch mit dem alten Papierführerschein, dem grauen oder rosa „Lappen“ unterwegs. Diese Dokumente verlieren ab dem 19. Januar 2022 schrittweise ihre Gültigkeit - gestaffelt nach dem Geburtsjahr des Inhabers oder der Inhaberin. Der alte Schein muss daher rechtzeitig durch den aktuell gültigen EU-einheitlichen Kartenführerschein ersetzt werden. Auch Inhaberinnen und Inhaber eines älteren Führerscheins im Scheckkartenformat sind von der Umtauschaktion betroffen.

\n

Im Einzelnen betroffen sind alle Papierführerscheine, welche bis zum 31. Dezember 1998 ausgestellt wurden. Dies umfasst auch Führerscheine, welche nach den Vorschriften der Deutschen Demokratischen Republik ausgestellt wurden. Ebenso betroffen sind EU-Kartenführerscheine, welche bis einschließlich 18. Januar 2013 ausgestellt wurden.

\n

Wer noch eines der genannten Führerscheindokumente besitzt, sollte prüfen, bis wann der Umtausch erfolgen muss, siehe Fristen für den Umtausch. Dabei müssen Sie beachten, dass mit dem Zeitpunkt der Umstellung der alte Führerschein seine Gültigkeit verliert.

" + ] + }, + { + "intent": "sbw_verfahrensablauf_6008813", + "antwort": [ + "

Sie müssen den EU-Führerschein schriftlich bei der zuständigen Stelle beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Wenn Sie alle erforderlichen Unterlagen vorlegen, kann Ihnen die zuständige Stelle den Kartenführerschein auf Wunsch mit der Post zusenden. Ansonsten werden Sie benachrichtigt, dass Sie Ihren Führerschein bei der Führerscheinstelle abholen können. Den Führerschein kann eine andere Person mit schriftlicher Vollmacht von Ihnen abholen.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_preamble_6004857", + "antwort": [ + "

Den ersten Führerschein erhalten Sie auf Probe. Die Probezeit dauert zwei Jahre. Sie verlängert sich um weitere zwei Jahre, wenn Sie an einem Aufbauseminar teilnehmen müssen.

\n

Für die Klassen A, A1, A2, AM, B, BE, L und T erhalten Sie einen unbefristeten Führerschein.

\n

Führerscheine für die Klassen C1, C1E, C, CE, D, D1, DE und D1E sind auf fünf Jahre befristet. Bis zum 27. Dezember 2016 erteilte Führerscheine der Klassen C1 und C1E gelten bis zur Altersgrenze von 50 Jahren. Sie können diese Klassen jeweils um fünf Jahre verlängern lassen. Die Klassen D, D1, DE und D1E können Sie über die Altersgrenze von 50 Jahren hinaus jedoch nur verlängern lassen, wenn Sie nachweisen, dass Sie die „besonderen Anforderungen“ (z. B. Konzentrationsfähigkeit, Orientierungsleistung oder Belastbarkeit) erfüllen.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft nur die Plastikkarte. Sie muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004857", + "antwort": [ + "

Sie erhalten den Führerschein für die jeweilige Klasse, wenn Sie

\n" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004857", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004857", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004857", + "antwort": [ + "

Sie müssen den Führerschein schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Sie können den Antrag frühestens sechs Monate vor Erreichen des für die jeweilige Führerscheinklasse vorgeschriebenen Mindestalters stellen. Meistens reicht die Fahrschule, bei der Sie sich angemeldet haben, den Antrag für Sie ein.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Nach bestandener Prüfung erhalten Sie einen Kartenführerschein (\"EU-Führerschein\").

" + ] + }, + { + "intent": "sbw_fristen_6004857", + "antwort": [ + "

Sie müssen die theoretische Prüfung binnen zwölf Monaten nach Eingang Ihres Prüfauftrags bei der Technischen Prüfstelle erfolgreich ablegen. Ansonsten verfällt der Prüfauftrag.

\n

Gleiches gilt, wenn Sie die praktische Prüfung nicht binnen zwölf Monaten nach der erfolgreich abgelegten theoretischen Prüfung bestehen. Nach Verfall des Prüfauftrags müssen Sie einen neuen Antrag auf Erweiterung der Fahrerlaubnis stellen.

" + ] + }, + { + "intent": "sbw_unterlagen_6004857", + "antwort": [ + "

bei den Führerscheinklassen A, A1, A2, AM, B, BE, L und T:

\n \n

zusätzlich bei den Führerscheinklassen C1, C1E, C, CE, D1, D1E, D, DE:

\n" + ] + }, + { + "intent": "sbw_kosten_6004857", + "antwort": [ + " \n

Für die Einholung des Führungszeugnisses entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004857", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004857", + "antwort": [ + "

Theoretische und praktische Prüfung (Fahrlehrerverband Baden-Württemberg)

\n

" + ] + }, + { + "intent": "sbw_sonstiges_6004857", + "antwort": [ + "

Jugendliche können die Fahrerlaubnis für die Klassen B und BE (Pkw) bereits erwerben, bevor sie 18 Jahre alt sind. Informationen dazu finden Sie unter \"Begleitetes Fahren ab 17\".

" + ] + }, + { + "intent": "sbw_preamble_6004859", + "antwort": [ + "

Für die Klassen C1, C1E, C, CE, D, DE oder D1, D1E ist Ihr Führerschein fünf Jahre gültig. Sie können ihn jeweils um fünf weitere Jahre verlängern lassen.

\n

Führerscheine zum Fahren von Lastkraftwagen der Klassen C1 und C1E, die bis zum 27. Dezember 2016 erteilt wurden, gelten bis Sie 50 Jahre alt sind. Danach können sie um jeweils fünf Jahre verlängert werden.

\n

Hinweis: Mit der Verlängerung erhalten Sie einen neuen Führerschein.

\n

Eine Bestätigung durch die Wohnsitzgemeinde ist nicht erforderlich.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Führerscheine im Scheckkartenformat sind 15 Jahre gültig. Die Frist gilt nur für die Plastikkarte, nicht für Ihre Fahrerlaubnis. Die Karte muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit der Erneuerung nicht verbunden

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004859", + "antwort": [ + "

befristeter Führerschein

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004859", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004859", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004859", + "antwort": [ + "

Sie müssen die Verlängerung schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder es steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_fristen_6004859", + "antwort": [ + "

Frühestens sechs Monate und spätestens sechs Wochen vor Ablauf Ihres bisher gültigen Führerscheins
Stellen Sie den Antrag rechtzeitig, wird die Fahrerlaubnis nahtlos um fünf Jahre verlängert.

" + ] + }, + { + "intent": "sbw_unterlagen_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_6004859", + "antwort": [ + "

37,50 EURO

\n

Für das Führungszeugnisses entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004859", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_sonstiges_6004859", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004859", + "antwort": [] + }, + { + "intent": "sbw_formulare_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004859", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004859", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_291", + "antwort": [ + "

In bestimmten, meist außereuropäischen Ländern benötigen Sie zusätzlich zum nationalen einen Internationalen Führerschein.

\n

Hinweis: In welchen Ländern Sie einen internationalen Führerschein benötigen, erfahren Sie von den großen Automobilclubs, in Reisebüros und bei den jeweiligen Botschaften und Konsulaten.

\n

Sie benötigen innerhalb der EU-/EWR-Staaten keinen internationalen Führerschein. Er kann dennoch nützlich sein, wenn Sie im Ausland einen Mietwagen benutzen.

\n

Gültigkeit

\n

drei Jahre, es sei denn eine nationale Führerscheinklasse ist kürzer befristet
Dies ist zum Beispiel bei Fahrerlaubnissen für Lastkraftwagen oder Busse (Klasse C, C1, D oder D1) der Fall.
Internationale Führerscheine, die nach dem Internationalen Abkommen über Kraftfahrzeugverkehr vom 24. April 1926 ausgestellt sind, sind nur ein Jahr gültig. Diese Führerscheine werden vor allem in asiatischen Ländern benötigt.
Ein abgelaufener Internationaler Führerschein kann nicht verlängert werden.

\n

Die Fahrerlaubnisbehörden müssen dem Kraftfahrt-Bundesamt die Ausstellung Ihres Internationalen Führerscheins mitteilen. Diese Information wird zusammen mit der Führerscheinnummer Ihres Kartenführerscheins im Zentralen Fahrerlaubnisregister gespeichert. Sollten Sie noch einen Papierführerschein haben, müssen Sie diesen auf den Kartenführerschein umstellen lassen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_zustaendigkeit_291", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_291", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_291", + "antwort": [ + "

Sie müssen den Internationalen Führerschein bei der Führerscheinstelle Ihres Wohnortes beantragen. Eine persönliche Antragstellung ist nicht erforderlich. Den Führerschein kann auch eine bevollmächtigte Person (schriftliche Vollmacht) abholen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen je nach Angebot auch zum Download zur Verfügung.

\n

Hinweis: Bei Vorliegen aller Voraussetzungen und erforderlichen Dokumente/Unterlagen stellt die Führerscheinstelle den Internationalen Führerschein sofort aus.

" + ] + }, + { + "intent": "sbw_fristen_291", + "antwort": [] + }, + { + "intent": "sbw_unterlagen_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_291", + "antwort": [ + " \n

Der Auszug aus dem örtlichen Fahrerlaubnisregister (\"Karteikartenabschrift\") kostet Sie nichts.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_291", + "antwort": [ + "

sofort

" + ] + }, + { + "intent": "sbw_vertiefendeinformationen_291", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_291", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_291", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung am 04.03.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_291", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_291", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_freigabevermerk_6004857", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004857", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_formulare_6004857", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004857", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004857", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_544", + "antwort": [ + "

Die Fahrerlaubnis zur Fahrgastbeförderung ist höchstens fünf Jahre gültig. Sie können sie jeweils für weitere fünf Jahre verlängern lassen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_544", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_zustaendigkeit_544", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_544", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_544", + "antwort": [ + "

Sie müssen die Verlängerung schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen oft auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

" + ] + }, + { + "intent": "sbw_fristen_544", + "antwort": [] + }, + { + "intent": "sbw_unterlagen_544", + "antwort": [ + " \n

Der Nachweis erfolgt durch ein betriebs- oder arbeitsmedizinisches Gutachten oder durch ein Gutachten einer amtlich anerkannten Begutachtungsstelle für Fahreignung.

" + ] + }, + { + "intent": "sbw_kosten_544", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_544", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_544", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_544", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_544", + "antwort": [ + "

§ 48 Fahrerlaubnisverordnung (FeV) (Fahrerlaubnis zur Fahrgastbeförderung)

" + ] + }, + { + "intent": "sbw_freigabevermerk_544", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung am 01.08.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_544", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_544", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_544", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_6004853", + "antwort": [ + "

Erwerben Sie zu einer schonvorhandenen Fahrerlaubnis eine oder mehrere Führerscheinklassen, beispielsweise den Motorradführerschein, müssen Sie die Erweiterung der Fahrerlaubnis beantragen.

\n

Folgende Klassen werden unbefristet erteilt:

\n \n

Die Fahrerlaubnis für folgende Klassen ist auf fünf Jahre befristet:

\n \n

Bis zum 27. Dezember 2016 erteilte Führerscheine der Klassen C1 und C1E gelten bis zur Altersgrenze von 50 Jahren. Danach werden sie auf Antrag jeweils auf fünf Jahre befristet erteilt.

\n

Für manche Klassen müssen Sie nachweisen, dass Sie die \"besonderen Anforderungen\" wie beispielsweise Konzentrationsfähigkeit, Orientierungsleistung oder Belastbarkeit erfüllen. Dies gilt für

\n \n

Wird eine Fahrerlaubnis der Klassen AM, L oder T erstmals auf eine andere Klasse erweitert, wird für die neue Klasse eine Probezeit festgesetzt.

\n

Achtung: Seit dem 19. Januar 2013 ausgestellte Führerscheine im Scheckkartenformat sind auf 15 Jahre befristet. Die Frist gilt nur das Führerscheindokument. Dies muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004853", + "antwort": [ + "

Für die Erweiterung einer Fahrerlaubnis gelten die Vorschriften der Ersterteilung.

\n

Ausnahmen bestehen für:

\n" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004853", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004853", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004853", + "antwort": [ + "

Sie müssen die Erweiterung einer Fahrerlaubnis schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Nach bestandener Prüfung und Erweiterung der vorhandenen Fahrerlaubnis erhalten Sie einen neuen Kartenführerschein (\"EU-Führerschein\").

" + ] + }, + { + "intent": "sbw_fristen_6004853", + "antwort": [ + "

Sie müssen die theoretische Prüfung innerhalb von zwölf Monaten nach Eingang des Prüfauftrags bei der Technischen Prüfstelle bestehen.

\n

Die praktische Prüfung müssen Sieinnerhalb von zwölf Monaten nach der bestandenen theoretischen Prüfung bestehen.

\n

Ansonsten verfällt der Prüfauftrag und Siemüssen einen neuen Antrag auf Erweiterung der Fahrerlaubnis stellen.

" + ] + }, + { + "intent": "sbw_unterlagen_6004853", + "antwort": [ + "

bei den Führerscheinklassen A, A1, A2, AM, B, BE, L und T:

\n \n

bei den Führerscheinklassen C, CE, C1, C1E, D, DE, D1, D1E: zusätzlich

\n \n

Sie müssen zusätzlich einen Nachweis über die Schulung in Erster Hilfe vorlegen, wenn

\n" + ] + }, + { + "intent": "sbw_kosten_6004853", + "antwort": [ + " \n

Für die Einholung des Führungszeugnisses entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004853", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004853", + "antwort": [ + "

Übersichten über die Führerscheinklassen (Fahrerlaubnisklassen):

\n" + ] + }, + { + "intent": "sbw_sonstiges_6004853", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004853", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004853", + "antwort": [] + }, + { + "intent": "sbw_formulare_6004853", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004853", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004853", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_6004855", + "antwort": [ + "

Ihnen wurde der Führerschein durch ein Gerichtsurteil oder durch die Führerscheinstelle entzogen? Sie möchten wieder ein Kraftfahrzeug im Straßenverkehr führen? Dann benötigen Sie einen neuerteilten Führerschein.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft nur die Plastikkarte. Sie muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004855", + "antwort": [ + "

Sie erhalten den Führerschein nicht automatisch neu. Nach Entziehung des Führerscheins oder dem Verzicht auf den Führerschein prüft die Führerscheinstelle genau, ob Sie körperlich, geistig und charakterlich wieder zum Führen von Kraftfahrzeugen geeignet sind. Hierzu kann sie beispielsweise ein ärztliches Gutachten oder eine medizinisch-psychologische Untersuchung (MPU) anordnen. Für die Neuerteilung gelten in der Regel dieselben Vorschriften wie für die erstmalige Erteilung einer Fahrerlaubnis. Eine erneute Führerscheinprüfung brauchen Sie nur dann, wenn Sie die zum Führen eines Kraftfahrzeugs erforderlichen Kenntnisse und Befähigungen nicht mehr besitzen.

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004855", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004855", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004855", + "antwort": [ + "

Sie können den Antrag bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen auch zum Download zur Verfügung.

" + ] + }, + { + "intent": "sbw_fristen_6004855", + "antwort": [ + "

Den Antrag können Sie frühestens sechs Monate vor Ablauf der gerichtlich verfügten Sperrfrist stellen.

\n

Hat Ihnen die zuständige Stelle den Führerschein entzogen, weil Sieacht oder mehr Punkte im Fahreignungsregister haben, erhalten Sie einen neuen Führerschein frühestens, wenn die Entziehung des Führerscheins mehr als sechs Monate wirksam ist.

\n

Hat Ihnen die zuständige Stelle den Führerschein entzogen, weil Sie einer im Rahmen der Fahrerlaubnis auf Probe ergangenen Anordnung zur Teilnahme an einem Aufbauseminar nicht nachgekommen sind, erhalten Sie einen neuen Führerschein erst nach Teilnahme an einem Aufbauseminar.

\n

" + ] + }, + { + "intent": "sbw_unterlagen_6004855", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_6004855", + "antwort": [ + "

je nach Stadt- oder Landkreis: unterschiedlich

\n

Wenn Sie einFührungszeugnis beantragen, entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004855", + "antwort": [ + "

Die Dauer der Prüfung hängt vom Einzelfall ab.

" + ] + }, + { + "intent": "sbw_vertiefendeinformationen_6004855", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_sonstiges_6004855", + "antwort": [ + "

Die gerichtliche Sperrfrist kann verkürzt werden, wenn Ihnender Führerschein wegen erstmaliger Teilnahme am Straßenverkehr unter Alkoholeinfluss entzogen wurde. Wenn Sie an einer Nachschulung teilnehmen dürfen, erhalten Sie von der Staatsanwaltschaft ein Informationsblatt. Dieses enthält nähere Informationen zu den Teilnahmebedingungen und Kursveranstaltern.

\n

Für die Kursteilnahme benötigen Sie eine \"Unbedenklichkeitsbescheinigung\" der Führerscheinstelle. Sie dürfen keine weiteren Verkehrsdelikte oder Straftaten, die Ihre Eignung in Frage stellen, begangen haben. Bei Blutalkoholwerten ab 1,6 Promille müssen Sie sich vor Kursbeginn einer medizinisch-psychologischen Untersuchung unterziehen. Bei Blutalkoholwerten von mehr als zwei Promille ist die Kursteilnahme ausgeschlossen.

" + ] + }, + { + "intent": "sbw_rechtsgrundlage_6004855", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004855", + "antwort": [] + }, + { + "intent": "sbw_preamble_6004849", + "antwort": [ + "

Sie haben einen ausländischen Führerschein und verlegen Ihren Wohnsitz längerfristig nach Deutschland? Sie wohnen wegen persönlicher und/oder beruflicher Bindungen an mindestens 185 Tagen im Jahr in Deutschland? In diesem Fall ist Ihr ausländischer Führerschein noch sechs Monate gültig. Nach Ablauf dieser sechs Monate müssen Sie Ihren Führerschein in eine deutsche Fahrerlaubnis umtauschen.

\n

Achtung: Angehörige aus EU-/EWR-Staaten mit einem gültigen Führerschein benötigen auch mit ordentlichem Wohnsitz in Deutschland keinen deutschen Führerschein.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft nur das Führerscheindokument. Dies muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004849", + "antwort": [ + "

ausländischer Führerschein

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004849", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004849", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004849", + "antwort": [ + "

Sie müssen den EU-Führerschein schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

" + ] + }, + { + "intent": "sbw_fristen_6004849", + "antwort": [ + "

Umtausch bis spätestens sechs Monate nach Einreise

\n

Auf Antrag kann die Führerscheinstelle die Frist um bis zu sechs Monate verlängern.
Dazu müssen Sie nachweisen, dass Sie Ihren Wohnsitz nicht länger als zwölf Monate in Deutschland haben werden.

" + ] + }, + { + "intent": "sbw_unterlagen_6004849", + "antwort": [ + " \n

Diese Zeugnisse oder Gutachten müssen Sie nur vorlegen, wenn zeitgleich mit dem Umtausch eine Verlängerung der Gültigkeit einer Fahrerlaubnis der Klassen C oder D (einschließlich Anhänger-und/oder Unterklassen) notwendig ist.

\n" + ] + }, + { + "intent": "sbw_kosten_6004849", + "antwort": [ + "

je nach Stadt- oder Landkreis: unterschiedlich

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004849", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004849", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_6004849", + "antwort": [ + "

Vor dem Hintergrund der Ausbreitung des Coronavirus hat das Verkehrsministerium Baden-Württemberg eine Allgemeinverfügung erlassen, die eine ausnahmsweise Fristverlängerung der gesetzlichen Frist auf 12 Monate, längstens bis 1. April 2021, zulässt.

\n

Die Allgemeinverfügung trat am 18. April 2020 in Kraft. Bitte erkundigen Sie sich bei der zuständigen Fahrerlaubnisbehörde.

" + ] + }, + { + "intent": "sbw_rechtsgrundlage_6004849", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004849", + "intent": "sbw_freigabevermerk_6004849", + "antwort": [] + }, + { + "intent": "sbw_formulare_6004849", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004849", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004849", + "antwort": [ + "
\n
\n
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + } + ] +} \ No newline at end of file diff --git a/containercontent/opt/chatbot_engine/prodae/models/chatfuereditor.json b/containercontent/opt/chatbot_engine/prodae/models/chatfuereditor.json new file mode 100644 index 0000000..12fc55f --- /dev/null +++ b/containercontent/opt/chatbot_engine/prodae/models/chatfuereditor.json @@ -0,0 +1,1191 @@ +{ + "dialogflow": [], + "entities_leistungen": [ + { + "entitie": "6008813", + "wert": [ + "Pflichtumtausch", + "EU Führerschein", + "EU Führerschein Umtausch", + "EU Führerschein umtauschen", + "Führerscheinumtausch", + "EU-Führerschein", + "Führerschein Karte", + "Kartenführerschein" + ] + }, + { + "entitie": "348", + "wert": [ + "alten Führerschein wieder gefunden", + "Ersatzführerschein", + "Fahrerlaubnis verlust", + "Führerschein abhanden gekommen", + "Führerschein ersatz", + "Führerschein nicht auffindbar", + "Führerschein verloren", + "Führerschein verlust", + "Führerschein weg", + "Führerscheinverlust", + "Führerscheinverlust", + "ich finde meinen Führerschein nicht mehr", + "Lappen verlust", + "Lappen weg" + ] + }, + { + "entitie": "6004851", + "wert": [ + "Begleitetes Fahren", + "BF 17", + "BF17", + "Fahren minderjährig", + "Fahren mit Begleitung", + "Fahren unter 18", + "Fahren 17", + "Fahrerlaubnis minderjährig", + "Fahrerlaubnis unter 18", + "Fahrerlaubnis 17", + "Führerschein Jugendliche", + "Führerschein minderjährig", + "Führerschein unter 18", + "Führerschein 17", + "Führerschein 17 Jahren" + ] + }, + { + "entitie": "914", + "wert": [ + "Fahrerlaubnis Änderung Namen", + "Fahrerlaubnis Name ändern", + "Fahrerlaubnis Name geändert", + "Fahrerlaubnis Namensänderung", + "Fahrerlaubnis neuer Nachname", + "Fahrerlaubnis neuer Name", + "Führerschein Änderung Namen", + "Führerschein Heirat", + "Führerschein Name ändern", + "Führerschein Name geändert", + "Führerschein Namensänderung", + "Führerschein neuer Nachname", + "Führerschein neuer Name", + "Führerschein Scheidung" + ] + }, + { + "entitie": "6004853", + "wert": [ + "Anhängerführerschein", + "Erweiterung Führerschein A", + "Erweiterung Führerschein BE", + "Erweiterung Führerschein B96", + "Erweiterung Führerschein C", + "Erweiterung Führerschein CE", + "Führerschein erweitern", + "Führerschein Erweiterung", + "Führerschein klasse ändern", + "Führerschein klasse erweitern", + "Führerschein klasse Erweiterung", + "Führerschein klasse wechseln", + "Führerscheinerweiterung", + "Führerscheinklasse ändern", + "Führerscheinklasse erweitern", + "Führerscheinklasse Erweiterung", + "Führerscheinklasse wechseln" + ] + }, + { + "entitie": "6004855", + "wert": [ + "Fahrerlaubnisentzug", + "Führerschein abgenommen", + "Führerschein einkassiert", + "Führerschein Entziehung", + "Führerschein entzogen", + "Führerschein entzug", + "Führerschein wieder bekommen", + "Führerscheinentzug", + "Wiedererteilung Führerschein" + ] + }, + { + "entitie": "6004849", + "wert": [ + "Ausland Fahrerlaubnis Umtausch", + "Ausland Führerschein Umtausch", + "Ausland Führerschein umtauschen", + "ausländischer Führerschein umtauschen", + "Führerschein Ausland tauschen", + "Führerscheintausch", + "nicht deutscher Führerschein Umtausch", + "nicht deutscher Führerschein umtauschen", + "Umtausch ausländischer Führerschein" + ] + }, + { + "entitie": "6004859", + "wert": [ + "Befristeter Führerschein verlängern", + "Führerschein befristet", + "Führerschein verlängern", + "Führerscheinverlängerung" + ] + }, + { + "entitie": "291", + "wert": [ + "Fahrerlaubnis Ausland", + "Führerschein Ausland", + "International Führerschein", + "Internationaler Führerschein" + ] + }, + { + "entitie": "544", + "wert": [ + "Beförderung ÖPNV Verlängern", + "Beförderung ÖPNV Verlängerung", + "Beförderung Personen Erlaubnis verlängern", + "Beförderung Personen Erlaubnis Verlängerung", + "Bus Führerschein verlängern", + "Bus Führerschein Verlängerung", + "Fahrgastbeförderung verlängern", + "Fahrgastbeförderung Verlängerung", + "Personenbeförderung Verlängern", + "Personenbeförderung Verlängerung", + "Taxi Führerschein Verlängern", + "Taxi Führerschein Verlängerung", + "Taxischein Verlängern", + "Taxischein Verlängerung" + ] + }, + { + "entitie": "6004857", + "wert": [ + "Bus- und LKW-Führerschein", + "Ersterteilung Führerschein", + "Fahrerlaubnis", + "Fahrerlaubnis auf Probe", + "Fhrerlaubnis", + "Fuherschein", + "Führen von Kraftfahrzeugen", + "Führerschain", + "Führerschein", + "Führerscheinbehorde", + "Führerscheinstelle", + "Führschein", + "Klassen Führerschein", + "LKW- und Bus-Führerschein", + "Probezeit Führerschein" + ] + } + ], + "entities": [], + "antwort_leistungen": [ + { + "intent": "sbw_oeffnungszeiten_6008813", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_348", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004851", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_914", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004853", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004855", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004849", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004859", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_291", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_544", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_oeffnungszeiten_6004857", + "antwort": [ + "
Öffnungszeiten Kfz-Bürgerbüro / Führerschein
Allgemeine Sprechzeit
Mo 08:30 - 12:00 und 14:00 - 16:00 Uhr
Di 08:30 - 12:00 und 14:00 - 16:00 Uhr
Mi 08:30 - 12:00 und 14:00 - 16:00 Uhr
Do 08:30 - 12:00 und 14:00 - 16:00 Uhr
Fr 08:30 - 12:00 Uhr
01.01.2022 bis 31.03.2022 Das Betreten unserer Dienststellen ist nur nach vorheriger Terminvereinbarung möglich. Gem. den aktuellen Regelungen sollen Atemschutzmasken (FFP2, KN95, N95) in unseren Dienststellen getragen werden. Ab Januar 2022 ist zudem ein 3G-Nachweis erforderlich.
" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6008813", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6008813", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_6008813", + "antwort": [ + "

EUR 30,40

" + ] + }, + { + "intent": "sbw_bezugsort_6008813", + "antwort": [] + }, + { + "intent": "sbw_fristen_6008813", + "antwort": [ + "

Der Umtausch der alten Führerscheine erfolgt gestaffelt. Zu Beginn erfolgt der Umtausch der Papierführerscheine.

\n

Der Umtausch der Papierführerscheine, welche bis 31. Dezember 1998 ausgestellt wurden, erfolgt gestaffelt nach dem jeweiligen Geburtsjahr des Führerscheininhabers. Für Inhaber eines Papierführerscheins gelten folgende Fristen:

\n \n

Der Umtausch der vor dem 19. Januar 2013 ausgestellten Kartenführerscheine richtet sich nach dem jeweiligen Ausstellungsdatum des Kartenführerscheins. Das Ausstellungsdatum ist auf der Vorderseite des Kartenführerscheins im Feld 4a eingetragen. Für Inhaber eines vor dem 19. Januar 2013 ausgestellten Kartenführerscheins gelten folgende Fristen:

\n" + ] + }, + { + "intent": "sbw_voraussetzungen_6008813", + "antwort": [ + "

Sie besitzen einen alten Führerschein.

" + ] + }, + { + "intent": "sbw_kosten_348", + "antwort": [ + "

Je nach Stadt- oder Landkreis entstehen Ihnen unterschiedliche Kosten. Der Auszug aus dem örtlichen Fahrerlaubnisregister (\"Karteikartenabschrift\") ist kostenfrei.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_348", + "antwort": [ + "

Um Ihren Antrag zu bearbeiten, ist eine Anfrage an das Kraftfahrt-Bundesamt nötig.
Die Bearbeitungsdauer ist daher je nach Arbeitsanfall unterschiedlich. Es kann bis zu sechs Wochen dauern.

" + ] + }, + { + "intent": "sbw_vertiefendeinformationen_348", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_348", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_348", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_348", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung am 03.03.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_348", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_348", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_348", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_verfahrensablauf_6004851", + "antwort": [ + "

Sie müssen die Erteilung einer Fahrerlaubnis der Klasse B oder BE schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Zusätzlich müssen Sie den \"Antrag auf Teilnahme am Begleiteten Fahren ab 17\" ausfüllen. Für jede Begleitperson benötigen Sie eine eigene \"Anlage zum Antrag auf Teilnahme am Begleiteten Fahren ab 17\".

\n

Nach erfolgreicher Prüfung erhalten Sie eine Prüfungsbescheinigung. Diese ist der Nachweis Ihrer Fahrberechtigung. Sie gilt nur im Inland. Nach Ihrem 18. Geburtstag können Sie die Prüfungsbescheinigung bei der zuständigen Stelle in einen Kartenführerschein umtauschen.

" + ] + }, + { + "intent": "sbw_fristen_6004851", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_unterlagen_6004851", + "antwort": [ + " \n

Zusätzlich müssen Sie für jede Begleitperson das Formular \"Anlage zum Antrag auf Teilnahme am Begleiteten Fahren ab 17\" mit folgenden Unterlagen vorlegen:

\n" + ] + }, + { + "intent": "sbw_kosten_6004851", + "antwort": [ + "

Im Vergleich zum \"normalen\" Führerschein fallen folgende zusätzliche Gebühren an:

\n" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004851", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004851", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_6004851", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004851", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004851", + "antwort": [] + }, + { + "intent": "sbw_zustaendigkeit_6008813", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n \n

Wenn Sie Ihren Wohnsitz in einem anderen als einem EU- oder EWR-Mitgliedstaat haben, ist für dieses Anliegen jede Fahrerlaubnisbehörde in Deutschland zuständig. Wenden Sie sich am besten an die Fahrerlaubnisbehörde, die Ihren Führerschein ausgestellt hat beziehungsweise an die Fahrerlaubnisbehörde, in deren Zuständigkeitsbereich Ihr letzter Wohnsitz in Deutschland liegt. Diese wird Ihnen das weitere Verfahren erläutern.

" + ] + }, + { + "intent": "sbw_unterlagen_6008813", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_sonstiges_6008813", + "antwort": [ + "

Empfehlung: Beantragen Sie den Umtausch Ihres Führerscheins ab etwa einem Jahr vor der genannten Frist bei der Fahrerlaubnisbehörde. Überschreiten Sie die Frist für den Pflichtumtausch des Führerscheins, verliert der Führerschein seine Gültigkeit. Verwenden Sie den Führerschein trotz Verlust der Gültigkeit weiter, droht Ihnen bei einer Kontrolle ein Verwarnungsgeld.

\n

Die dem Führerschein zugrundeliegende Fahrerlaubnis bleibt weiterhin nach den aktuell gültigen Regelungen des Straßenverkehrsgesetzes und der Fahrerlaubnis-Verordnung bestehen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_348", + "antwort": [ + "

Verlust oder Diebstahl des Führerscheins

" + ] + }, + { + "intent": "sbw_zustaendigkeit_348", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_348", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_348", + "antwort": [ + "

Sie müssen den Ersatzführerschein schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Wenn die für Sie zuständige Führerscheinstelle Ihren Führerschein nicht erstmals ausgestellt hat, benötigen Sie einen Auszug aus dem Führerscheinregister der früheren, ausstellenden Behörde. Dieser müssen Sie Ihren Namen beziehungsweise Geburtsnamen, Vornamen und Geburtsdatum mitteilen. Falls vorhanden, geben Sie auch Erteilungsdatum und Listennummer des Führerscheins an. Der Registerauszug wird dann unmittelbar an die jetzt zuständige Stelle gesandt.

\n

Sie erhalten für Kontrollen (beispielsweise durch die Polizei) eine Bescheinigung, dass Sie einen Ersatzführerschein beantragt haben. Diese Bescheinigung stellt keinen Führerschein beziehungsweise Nachweis der Fahrberechtigung dar.

\n

Den Führerschein kann auch eine andere Person mit schriftlicher Vollmacht von Ihnen abholen.

\n

Bei Vorlage aller erforderlichen Unterlagen kann Ihnen die zuständige Stelle den Führerschein auf Wunsch per Post zusenden. Ansonsten werden Sie benachrichtigt, dass Sie Ihren Führerschein bei der Führerscheinstelle abholen können.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_fristen_348", + "antwort": [ + "

Den Verlust oder Diebstahl Ihres Führerscheins müssen Sie schnellstmöglich melden.

" + ] + }, + { + "intent": "sbw_unterlagen_348", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_preamble_6004851", + "antwort": [ + "

Möchten Sie schon vor dem 18. Geburtstag den Führerschein machen? Dann können Sie am \"Begleiteten Fahren ab 17\" teilnehmen.

\n

Sie können die Fahrschulausbildung ein Jahr eher beginnen und erhalten nach erfolgreicher Fahrprüfung die Erlaubnis für die Klassen B und BE (PKW). Sie dürfen nur in Begleitung einer namentlich benannten Person Auto fahren. Die Begleitperson muss bestimmte Voraussetzungen erfüllen. Sie soll den Jugendlichen vor Antritt und während der Fahrt Sicherheit beim Fahren geben und ihnen zur Seite stehen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004851", + "antwort": [ + "

Sie

\n \n

Die Begleitperson

\n \n

Hinweis: Für die Begleitperson gilt die 0,5-Promille-Regelung sowie das Verbot berauschender Mittel.

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004851", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004851", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6008813", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6008813", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehsministerium hat dessen ausführliche Fassung am 13.01.2022 freigegeben.

" + ] + }, + { + "intent": "sbw_preamble_348", + "antwort": [ + "

Den Verlust oder Diebstahl Ihres Führerscheins müssen Sie schnellstmöglich melden. Sie benötigen einen Ersatzführerschein.

\n

Hinweis: Bei Diebstahl können Sie in Deutschland von der Polizei eine Verlustbescheinigung erhalten.

\n

Finden Sie den verloren geglaubten Führerschein wieder, nachdem der Ersatzführerschein ausgestellt wurde, müssen Sie den alten Führerschein bei der Führerscheinstelle abgeben.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Führerscheine im Kartenformat sind auf 15 Jahre befristet. Die Frist gilt aber nur für das Führerscheindokument. Es muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004851", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_914", + "antwort": [ + "

Hat sich Ihr Name geändert, können Sie Ihren alten Führerschein umtauschen. Eine Pflicht zum Umtausch besteht nicht.

\n

Behalten Sie Ihren alten Führerschein, müssen Sie sich bei Kontrollen durch Ihren Personalausweis oder Reisepass ausweisen.

\n

Hinweis: Für Fahrten ins Ausland kann es aber sinnvoll sein, wenn Sie Ihren Führerschein umtauschen lassen.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft aber nur das Führerscheindokument. Es muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_914", + "antwort": [ + "

Namensänderung

" + ] + }, + { + "intent": "sbw_zustaendigkeit_914", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_914", + "antwort": [] + }, + { + "intent": "sbw_fristen_914", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_914", + "antwort": [ + "

Sie müssen die Namensänderung schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Sie erhalten einen neuen Kartenführerschein (\"EU-Führerschein\").

\n

Den Führerschein kann auch eine andere Person mit schriftlicher Vollmacht von Ihnen abholen.

\n

Bei Vorlage aller erforderlichen Unterlagen kann Ihnen die zuständige Stelle den Kartenführerschein auf Wunsch per Post zusenden. Ansonsten werden Sie benachrichtigt, dass Sie Ihren Führerschein bei der Führerscheinstelle abholen können.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_unterlagen_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_914", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_914", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_914", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_914", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung 03.03.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_914", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_914", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_914", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_formulare_6004851", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004851", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_preamble_6008813", + "antwort": [ + "

Viele Autofahrerinnen und Autofahrer sind noch mit dem alten Papierführerschein, dem grauen oder rosa „Lappen“ unterwegs. Diese Dokumente verlieren ab dem 19. Januar 2022 schrittweise ihre Gültigkeit - gestaffelt nach dem Geburtsjahr des Inhabers oder der Inhaberin. Der alte Schein muss daher rechtzeitig durch den aktuell gültigen EU-einheitlichen Kartenführerschein ersetzt werden. Auch Inhaberinnen und Inhaber eines älteren Führerscheins im Scheckkartenformat sind von der Umtauschaktion betroffen.

\n

Im Einzelnen betroffen sind alle Papierführerscheine, welche bis zum 31. Dezember 1998 ausgestellt wurden. Dies umfasst auch Führerscheine, welche nach den Vorschriften der Deutschen Demokratischen Republik ausgestellt wurden. Ebenso betroffen sind EU-Kartenführerscheine, welche bis einschließlich 18. Januar 2013 ausgestellt wurden.

\n

Wer noch eines der genannten Führerscheindokumente besitzt, sollte prüfen, bis wann der Umtausch erfolgen muss, siehe Fristen für den Umtausch. Dabei müssen Sie beachten, dass mit dem Zeitpunkt der Umstellung der alte Führerschein seine Gültigkeit verliert.

" + ] + }, + { + "intent": "sbw_verfahrensablauf_6008813", + "antwort": [ + "

Sie müssen den EU-Führerschein schriftlich bei der zuständigen Stelle beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Wenn Sie alle erforderlichen Unterlagen vorlegen, kann Ihnen die zuständige Stelle den Kartenführerschein auf Wunsch mit der Post zusenden. Ansonsten werden Sie benachrichtigt, dass Sie Ihren Führerschein bei der Führerscheinstelle abholen können. Den Führerschein kann eine andere Person mit schriftlicher Vollmacht von Ihnen abholen.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_preamble_6004857", + "antwort": [ + "

Den ersten Führerschein erhalten Sie auf Probe. Die Probezeit dauert zwei Jahre. Sie verlängert sich um weitere zwei Jahre, wenn Sie an einem Aufbauseminar teilnehmen müssen.

\n

Für die Klassen A, A1, A2, AM, B, BE, L und T erhalten Sie einen unbefristeten Führerschein.

\n

Führerscheine für die Klassen C1, C1E, C, CE, D, D1, DE und D1E sind auf fünf Jahre befristet. Bis zum 27. Dezember 2016 erteilte Führerscheine der Klassen C1 und C1E gelten bis zur Altersgrenze von 50 Jahren. Sie können diese Klassen jeweils um fünf Jahre verlängern lassen. Die Klassen D, D1, DE und D1E können Sie über die Altersgrenze von 50 Jahren hinaus jedoch nur verlängern lassen, wenn Sie nachweisen, dass Sie die „besonderen Anforderungen“ (z. B. Konzentrationsfähigkeit, Orientierungsleistung oder Belastbarkeit) erfüllen.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft nur die Plastikkarte. Sie muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004857", + "antwort": [ + "

Sie erhalten den Führerschein für die jeweilige Klasse, wenn Sie

\n" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004857", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004857", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004857", + "antwort": [ + "

Sie müssen den Führerschein schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Sie können den Antrag frühestens sechs Monate vor Erreichen des für die jeweilige Führerscheinklasse vorgeschriebenen Mindestalters stellen. Meistens reicht die Fahrschule, bei der Sie sich angemeldet haben, den Antrag für Sie ein.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Nach bestandener Prüfung erhalten Sie einen Kartenführerschein (\"EU-Führerschein\").

" + ] + }, + { + "intent": "sbw_fristen_6004857", + "antwort": [ + "

Sie müssen die theoretische Prüfung binnen zwölf Monaten nach Eingang Ihres Prüfauftrags bei der Technischen Prüfstelle erfolgreich ablegen. Ansonsten verfällt der Prüfauftrag.

\n

Gleiches gilt, wenn Sie die praktische Prüfung nicht binnen zwölf Monaten nach der erfolgreich abgelegten theoretischen Prüfung bestehen. Nach Verfall des Prüfauftrags müssen Sie einen neuen Antrag auf Erweiterung der Fahrerlaubnis stellen.

" + ] + }, + { + "intent": "sbw_unterlagen_6004857", + "antwort": [ + "

bei den Führerscheinklassen A, A1, A2, AM, B, BE, L und T:

\n \n

zusätzlich bei den Führerscheinklassen C1, C1E, C, CE, D1, D1E, D, DE:

\n" + ] + }, + { + "intent": "sbw_kosten_6004857", + "antwort": [ + " \n

Für die Einholung des Führungszeugnisses entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004857", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004857", + "antwort": [ + "

Theoretische und praktische Prüfung (Fahrlehrerverband Baden-Württemberg)

\n

 

" + ] + }, + { + "intent": "sbw_sonstiges_6004857", + "antwort": [ + "

Jugendliche können die Fahrerlaubnis für die Klassen B und BE (Pkw) bereits erwerben, bevor sie 18 Jahre alt sind. Informationen dazu finden Sie unter \"Begleitetes Fahren ab 17\".

" + ] + }, + { + "intent": "sbw_preamble_6004859", + "antwort": [ + "

Für die Klassen C1, C1E, C, CE, D, DE oder D1, D1E ist Ihr Führerschein fünf Jahre gültig. Sie können ihn jeweils um fünf weitere Jahre verlängern lassen.

\n

Führerscheine zum Fahren von Lastkraftwagen der Klassen C1 und C1E, die bis zum 27. Dezember 2016 erteilt wurden, gelten bis Sie 50 Jahre alt sind. Danach können sie um jeweils fünf Jahre verlängert werden.

\n

Hinweis: Mit der Verlängerung erhalten Sie einen neuen Führerschein.

\n

Eine Bestätigung durch die Wohnsitzgemeinde ist nicht erforderlich.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Führerscheine im Scheckkartenformat sind 15 Jahre gültig. Die Frist gilt nur für die Plastikkarte, nicht für Ihre Fahrerlaubnis. Die Karte muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit der Erneuerung nicht verbunden

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004859", + "antwort": [ + "

befristeter Führerschein

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004859", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004859", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004859", + "antwort": [ + "

Sie müssen die Verlängerung schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder es steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Gegen eine Extragebühr können Sie eine Expressbestellung beantragen. Die Wartezeit auf den neuen Führerschein verkürzt sich dadurch. Auskünfte erteilt Ihnen Ihre Behörde.

" + ] + }, + { + "intent": "sbw_fristen_6004859", + "antwort": [ + "

Frühestens sechs Monate und spätestens sechs Wochen vor Ablauf Ihres bisher gültigen Führerscheins
Stellen Sie den Antrag rechtzeitig, wird die Fahrerlaubnis nahtlos um fünf Jahre verlängert.

" + ] + }, + { + "intent": "sbw_unterlagen_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_6004859", + "antwort": [ + "

EUR 37,50

\n

Für das Führungszeugnisses entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004859", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_sonstiges_6004859", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004859", + "antwort": [] + }, + { + "intent": "sbw_formulare_6004859", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004859", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004859", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_291", + "antwort": [ + "

In bestimmten, meist außereuropäischen Ländern benötigen Sie zusätzlich zum nationalen einen Internationalen Führerschein.

\n

Hinweis: In welchen Ländern Sie einen internationalen Führerschein benötigen, erfahren Sie von den großen Automobilclubs, in Reisebüros und bei den jeweiligen Botschaften und Konsulaten.

\n

Sie benötigen innerhalb der EU-/EWR-Staaten keinen internationalen Führerschein. Er kann dennoch nützlich sein, wenn Sie im Ausland einen Mietwagen benutzen.

\n

Gültigkeit

\n

drei Jahre, es sei denn eine nationale Führerscheinklasse ist kürzer befristet
Dies ist zum Beispiel bei Fahrerlaubnissen für Lastkraftwagen oder Busse (Klasse C, C1, D oder D1) der Fall.
Internationale Führerscheine, die nach dem Internationalen Abkommen über Kraftfahrzeugverkehr vom 24. April 1926 ausgestellt sind, sind nur ein Jahr gültig. Diese Führerscheine werden vor allem in asiatischen Ländern benötigt.
Ein abgelaufener Internationaler Führerschein kann nicht verlängert werden.

\n

Die Fahrerlaubnisbehörden müssen dem Kraftfahrt-Bundesamt die Ausstellung Ihres Internationalen Führerscheins mitteilen. Diese Information wird zusammen mit der Führerscheinnummer Ihres Kartenführerscheins im Zentralen Fahrerlaubnisregister gespeichert. Sollten Sie noch einen Papierführerschein haben, müssen Sie diesen auf den Kartenführerschein umstellen lassen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_zustaendigkeit_291", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_291", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_291", + "antwort": [ + "

Sie müssen den Internationalen Führerschein bei der Führerscheinstelle Ihres Wohnortes beantragen. Eine persönliche Antragstellung ist nicht erforderlich. Den Führerschein kann auch eine bevollmächtigte Person (schriftliche Vollmacht) abholen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen je nach Angebot auch zum Download zur Verfügung.

\n

Hinweis: Bei Vorliegen aller Voraussetzungen und erforderlichen Dokumente/Unterlagen stellt die Führerscheinstelle den Internationalen Führerschein sofort aus.

" + ] + }, + { + "intent": "sbw_fristen_291", + "antwort": [] + }, + { + "intent": "sbw_unterlagen_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_291", + "antwort": [ + " \n

Der Auszug aus dem örtlichen Fahrerlaubnisregister (\"Karteikartenabschrift\") kostet Sie nichts.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_291", + "antwort": [ + "

sofort

" + ] + }, + { + "intent": "sbw_vertiefendeinformationen_291", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_291", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_291", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung am 04.03.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_291", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_291", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_291", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_freigabevermerk_6004857", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004857", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_formulare_6004857", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004857", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004857", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_544", + "antwort": [ + "

Die Fahrerlaubnis zur Fahrgastbeförderung ist höchstens fünf Jahre gültig. Sie können sie jeweils für weitere fünf Jahre verlängern lassen.

" + ] + }, + { + "intent": "sbw_voraussetzungen_544", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_zustaendigkeit_544", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_544", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_544", + "antwort": [ + "

Sie müssen die Verlängerung schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen oft auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

" + ] + }, + { + "intent": "sbw_fristen_544", + "antwort": [] + }, + { + "intent": "sbw_unterlagen_544", + "antwort": [ + " \n

Der Nachweis erfolgt durch ein betriebs- oder arbeitsmedizinisches Gutachten oder durch ein Gutachten einer amtlich anerkannten Begutachtungsstelle für Fahreignung.

" + ] + }, + { + "intent": "sbw_kosten_544", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_544", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_544", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_544", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_544", + "antwort": [ + "

§ 48 Fahrerlaubnisverordnung (FeV) (Fahrerlaubnis zur Fahrgastbeförderung)

" + ] + }, + { + "intent": "sbw_freigabevermerk_544", + "antwort": [ + "

Dieser Text entstand in enger Zusammenarbeit mit den fachlich zuständigen Stellen. Das Verkehrsministerium hat dessen ausführliche Fassung am 01.08.2021 freigegeben.

" + ] + }, + { + "intent": "sbw_formulare_544", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_544", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_544", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_6004853", + "antwort": [ + "

Erwerben Sie zu einer schonvorhandenen Fahrerlaubnis eine oder mehrere Führerscheinklassen, beispielsweise den Motorradführerschein, müssen Sie die Erweiterung der Fahrerlaubnis beantragen.

\n

Folgende Klassen werden unbefristet erteilt:

\n \n

Die Fahrerlaubnis für folgende Klassen ist auf fünf Jahre befristet:

\n \n

Bis zum 27. Dezember 2016 erteilte Führerscheine der Klassen C1 und C1E gelten bis zur Altersgrenze von 50 Jahren. Danach werden sie auf Antrag jeweils auf fünf Jahre befristet erteilt.

\n

Für manche Klassen müssen Sie nachweisen, dass Sie die \"besonderen Anforderungen\" wie beispielsweise Konzentrationsfähigkeit, Orientierungsleistung oder Belastbarkeit erfüllen. Dies gilt für

\n \n

Wird eine Fahrerlaubnis der Klassen AM, L oder T erstmals auf eine andere Klasse erweitert, wird für die neue Klasse eine Probezeit festgesetzt.

\n

Achtung: Seit dem 19. Januar 2013 ausgestellte Führerscheine im Scheckkartenformat sind auf 15 Jahre befristet. Die Frist gilt nur das Führerscheindokument. Dies muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004853", + "antwort": [ + "

Für die Erweiterung einer Fahrerlaubnis gelten die Vorschriften der Ersterteilung.

\n

Ausnahmen bestehen für:

\n" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004853", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004853", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004853", + "antwort": [ + "

Sie müssen die Erweiterung einer Fahrerlaubnis schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

\n

Nach bestandener Prüfung und Erweiterung der vorhandenen Fahrerlaubnis erhalten Sie einen neuen Kartenführerschein (\"EU-Führerschein\").

" + ] + }, + { + "intent": "sbw_fristen_6004853", + "antwort": [ + "

Sie müssen die theoretische Prüfung innerhalb von zwölf Monaten nach Eingang des Prüfauftrags bei der Technischen Prüfstelle bestehen.

\n

Die praktische Prüfung müssen Sie innerhalb von zwölf Monaten nach der bestandenen theoretischen Prüfung bestehen.

\n

Ansonsten verfällt der Prüfauftrag und Sie müssen einen neuen Antrag auf Erweiterung der Fahrerlaubnis stellen.

" + ] + }, + { + "intent": "sbw_unterlagen_6004853", + "antwort": [ + "

bei den Führerscheinklassen A, A1, A2, AM, B, BE, L und T:

\n \n

bei den Führerscheinklassen C, CE, C1, C1E, D, DE, D1, D1E: zusätzlich

\n \n

Sie müssen zusätzlich einen Nachweis über die Schulung in Erster Hilfe vorlegen, wenn

\n" + ] + }, + { + "intent": "sbw_kosten_6004853", + "antwort": [ + " \n

Für die Einholung des Führungszeugnisses entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004853", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004853", + "antwort": [ + "

Übersichten über die Führerscheinklassen (Fahrerlaubnisklassen):

\n" + ] + }, + { + "intent": "sbw_sonstiges_6004853", + "antwort": [] + }, + { + "intent": "sbw_rechtsgrundlage_6004853", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004853", + "antwort": [] + }, + { + "intent": "sbw_formulare_6004853", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004853", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004853", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + }, + { + "intent": "sbw_preamble_6004855", + "antwort": [ + "

Ihnen wurde der Führerschein durch ein Gerichtsurteil oder durch die Führerscheinstelle entzogen? Sie möchten wieder ein Kraftfahrzeug im Straßenverkehr führen? Dann benötigen Sie einen neuerteilten Führerschein.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft nur die Plastikkarte. Sie muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004855", + "antwort": [ + "

Sie erhalten den Führerschein nicht automatisch neu. Nach Entziehung des Führerscheins oder dem Verzicht auf den Führerschein prüft die Führerscheinstelle genau, ob Sie körperlich, geistig und charakterlich wieder zum Führen von Kraftfahrzeugen geeignet sind. Hierzu kann sie beispielsweise ein ärztliches Gutachten oder eine medizinisch-psychologische Untersuchung (MPU) anordnen. Für die Neuerteilung gelten in der Regel dieselben Vorschriften wie für die erstmalige Erteilung einer Fahrerlaubnis. Eine erneute Führerscheinprüfung brauchen Sie nur dann, wenn Sie die zum Führen eines Kraftfahrzeugs erforderlichen Kenntnisse und Befähigungen nicht mehr besitzen.

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004855", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004855", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004855", + "antwort": [ + "

Sie können den Antrag bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen auch zum Download zur Verfügung.

" + ] + }, + { + "intent": "sbw_fristen_6004855", + "antwort": [ + "

Den Antrag können Sie frühestens sechs Monate vor Ablauf der gerichtlich verfügten Sperrfrist stellen.

\n

Hat Ihnen die zuständige Stelle den Führerschein entzogen, weil Sie acht oder mehr Punkte im Fahreignungsregister haben, erhalten Sie einen neuen Führerschein frühestens, wenn die Entziehung des Führerscheins mehr als sechs Monate wirksam ist.

\n

Hat Ihnen die zuständige Stelle den Führerschein entzogen, weil Sie einer im Rahmen der Fahrerlaubnis auf Probe ergangenen Anordnung zur Teilnahme an einem Aufbauseminar nicht nachgekommen sind, erhalten Sie einen neuen Führerschein erst nach Teilnahme an einem Aufbauseminar.

\n

" + ] + }, + { + "intent": "sbw_unterlagen_6004855", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_kosten_6004855", + "antwort": [ + "

je nach Stadt- oder Landkreis: unterschiedlich

\n

Wenn Sie ein Führungszeugnis beantragen, entstehen weitere Kosten.

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004855", + "antwort": [ + "

Die Dauer der Prüfung hängt vom Einzelfall ab.

" + ] + }, + { + "intent": "sbw_vertiefendeinformationen_6004855", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_sonstiges_6004855", + "antwort": [ + "

Die gerichtliche Sperrfrist kann verkürzt werden, wenn Ihnen der Führerschein wegen erstmaliger Teilnahme am Straßenverkehr unter Alkoholeinfluss entzogen wurde. Wenn Sie an einer Nachschulung teilnehmen dürfen, erhalten Sie von der Staatsanwaltschaft ein Informationsblatt. Dieses enthält nähere Informationen zu den Teilnahmebedingungen und Kursveranstaltern.

\n

Für die Kursteilnahme benötigen Sie eine \"Unbedenklichkeitsbescheinigung\" der Führerscheinstelle. Sie dürfen keine weiteren Verkehrsdelikte oder Straftaten, die Ihre Eignung in Frage stellen, begangen haben. Bei Blutalkoholwerten ab 1,6 Promille müssen Sie sich vor Kursbeginn einer medizinisch-psychologischen Untersuchung unterziehen. Bei Blutalkoholwerten von mehr als zwei Promille ist die Kursteilnahme ausgeschlossen.

" + ] + }, + { + "intent": "sbw_rechtsgrundlage_6004855", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004855", + "antwort": [] + }, + { + "intent": "sbw_preamble_6004849", + "antwort": [ + "

Sie haben einen ausländischen Führerschein und verlegen Ihren Wohnsitz längerfristig nach Deutschland? Sie wohnen wegen persönlicher und/oder beruflicher Bindungen an mindestens 185 Tagen im Jahr in Deutschland? In diesem Fall ist Ihr ausländischer Führerschein noch sechs Monate gültig. Nach Ablauf dieser sechs Monate müssen Sie Ihren Führerschein in eine deutsche Fahrerlaubnis umtauschen.

\n

Achtung: Angehörige aus EU-/EWR-Staaten mit einem gültigen Führerschein benötigen auch mit ordentlichem Wohnsitz in Deutschland keinen deutschen Führerschein.

\n

Achtung: Ab dem 19. Januar 2013 ausgestellte Kartenführerscheine sind auf 15 Jahre befristet. Die Befristung betrifft nur das Führerscheindokument. Dies muss alle 15 Jahre erneuert werden. Regelmäßige ärztliche Untersuchungen oder sonstige Prüfungen sind mit dem Dokumententausch nicht verbunden.

" + ] + }, + { + "intent": "sbw_voraussetzungen_6004849", + "antwort": [ + "

ausländischer Führerschein

" + ] + }, + { + "intent": "sbw_zustaendigkeit_6004849", + "antwort": [ + "

die Führerscheinstelle Ihres Wohnortes

\n

Führerscheinstelle ist,

\n" + ] + }, + { + "intent": "sbw_bezugsort_6004849", + "antwort": [] + }, + { + "intent": "sbw_verfahrensablauf_6004849", + "antwort": [ + "

Sie müssen den EU-Führerschein schriftlich bei der Führerscheinstelle Ihres Wohnortes beantragen. Das Antragsformular erhalten Sie vor Ort oder steht Ihnen, je nach Angebot, auch zum Download zur Verfügung.

\n

Hinweis: Sie können den Antrag auch bei Ihrer Wohnsitzgemeinde stellen, da diese die anzugebenden persönlichen Daten bestätigen muss. Die Gemeindeverwaltung leitet die Unterlagen dann an die zuständige Stelle weiter.

" + ] + }, + { + "intent": "sbw_fristen_6004849", + "antwort": [ + "

Umtausch bis spätestens sechs Monate nach Einreise

\n

Auf Antrag kann die Führerscheinstelle die Frist um bis zu sechs Monate verlängern.
Dazu müssen Sie nachweisen, dass Sie Ihren Wohnsitz nicht länger als zwölf Monate in Deutschland haben werden.

" + ] + }, + { + "intent": "sbw_unterlagen_6004849", + "antwort": [ + " \n

Diese Zeugnisse oder Gutachten müssen Sie nur vorlegen, wenn zeitgleich mit dem Umtausch eine Verlängerung der Gültigkeit einer Fahrerlaubnis der Klassen C oder D (einschließlich Anhänger-und/oder Unterklassen) notwendig ist.

\n" + ] + }, + { + "intent": "sbw_kosten_6004849", + "antwort": [ + "

je nach Stadt- oder Landkreis: unterschiedlich

" + ] + }, + { + "intent": "sbw_bearbeitungsdauer_6004849", + "antwort": [] + }, + { + "intent": "sbw_vertiefendeinformationen_6004849", + "antwort": [] + }, + { + "intent": "sbw_sonstiges_6004849", + "antwort": [ + "

Vor dem Hintergrund der Ausbreitung des Coronavirus hat das Verkehrsministerium Baden-Württemberg eine Allgemeinverfügung erlassen, die eine ausnahmsweise Fristverlängerung der gesetzlichen Frist auf 12 Monate, längstens bis 1. April 2021, zulässt.

\n

Die Allgemeinverfügung trat am 18. April 2020 in Kraft. Bitte erkundigen Sie sich bei der zuständigen Fahrerlaubnisbehörde.

" + ] + }, + { + "intent": "sbw_rechtsgrundlage_6004849", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_freigabevermerk_6004849", + "intent": "sbw_freigabevermerk_6004849", + "antwort": [] + }, + { + "intent": "sbw_formulare_6004849", + "antwort": [ + "" + ] + }, + { + "intent": "sbw_prozesse_6004849", + "antwort": [ + "keine Angaben" + ] + }, + { + "intent": "sbw_organisationseinheiten_6004849", + "antwort": [ + "
\n
\n
 
\n
\n
\n
Kfz-Bürgerbüro / Führerschein
\n
\n
Badstraße 20
\n
77652 Offenburg
\n
0781 805 9495
\n
\n
\n
" + ] + } + ] +} \ No newline at end of file diff --git a/containercontent/opt/chatbot_engine/prodae/models/checkpoint b/containercontent/opt/chatbot_engine/prodae/models/checkpoint new file mode 100644 index 0000000..acd1025 --- /dev/null +++ b/containercontent/opt/chatbot_engine/prodae/models/checkpoint @@ -0,0 +1,2 @@ +model_checkpoint_path: "C:/AE/fuehrerschein_voicebot_tflearn/fuehrerschein_voicebot/containercontent/opt/chatbot_engine/prodae/models/model.tflearn" +all_model_checkpoint_paths: "C:/AE/fuehrerschein_voicebot_tflearn/fuehrerschein_voicebot/containercontent/opt/chatbot_engine/prodae/models/model.tflearn" diff --git a/containercontent/opt/chatbot_engine/prodae/models/hilfe_data b/containercontent/opt/chatbot_engine/prodae/models/hilfe_data new file mode 100644 index 0000000..740e146 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/hilfe_data differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/lebenslage_data b/containercontent/opt/chatbot_engine/prodae/models/lebenslage_data new file mode 100644 index 0000000..d061b08 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/lebenslage_data differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/leistung_data b/containercontent/opt/chatbot_engine/prodae/models/leistung_data new file mode 100644 index 0000000..376d8b7 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/leistung_data differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.data-00000-of-00001 b/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.data-00000-of-00001 new file mode 100644 index 0000000..72b785a Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.data-00000-of-00001 differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.index b/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.index new file mode 100644 index 0000000..e8130b6 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.index differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.meta b/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.meta new file mode 100644 index 0000000..f04ea00 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/model.tflearn.meta differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/org_data b/containercontent/opt/chatbot_engine/prodae/models/org_data new file mode 100644 index 0000000..b5f1d17 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/org_data differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/train_ae.py b/containercontent/opt/chatbot_engine/prodae/models/train_ae.py new file mode 100644 index 0000000..60bfdd8 --- /dev/null +++ b/containercontent/opt/chatbot_engine/prodae/models/train_ae.py @@ -0,0 +1,249 @@ +import nltk +from nltk.stem.snowball import GermanStemmer +stemmer = GermanStemmer() + +from nltk.corpus import stopwords + +import numpy as np +import tensorflow as tf +import tflearn +import random + +import os +import inspect + +def getPath(file): + path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + path = os.path.join(path, file).replace("\\", "/") + return path + + + + +import json + +def getJsonPath(): + path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + path = os.path.join(path, 'chat.json').replace("\\", "/") + return path + + +# importiere das Dialog-design +with open(getJsonPath(), encoding='UTF-8') as json_data: + dialogflow = json.load(json_data) + +words = [] +classes = [] +documents = [] +stop= stopwords.words('german') +ignore_words = ['?', '.', ','] + stop +# loop durch jeden Satz in unseren dialogflow und synonym +for dialog in dialogflow['dialogflow']: + for pattern in dialog['synonym']: + # Tokenisieren jedes Wort im Satz + w = nltk.word_tokenize(pattern) + # füge die zu unserer Wörterliste hinzu + words.extend(w) + # füge die zu Dokumenten in unserem Korpus hinzu + documents.append((w, dialog['intent'])) + # füge die zu unserer Klassenliste hinzu + if dialog['intent'] not in classes: + classes.append(dialog['intent']) + +# stemme jedes Word und entferne Duplikate +words = [stemmer.stem(w.lower()) for w in words if w not in ignore_words] + ['weit', 'and', 'nicht'] +words = sorted(list(set(words))) + +# sortiere unsere Klassen +classes = sorted(list(set(classes))) + +print(len(documents), "Docs") +print(len(classes), "Classes", classes) +print(len(words), "Split words", words) + +# erstelle unsere training data +training = [] +output = [] +# Erstelle ein leeres Array für unsere Output +output_empty = [0] * len(classes) + +# generiere training set und bag of words für jeden Satz +for doc in documents: + # Initialisierung unsere bag of words + bag = [] + # Liste der tokenisierte Wörter für den synonym + pattern_words = doc[0] + # stemme jedes Wort + pattern_words = [stemmer.stem(word.lower()) for word in pattern_words] + # erstelle unsre bag of words array + for w in words: + bag.append(1) if w in pattern_words else bag.append(0) + # output ist '0' für jedes intent und '1' für das aktuelle intent + output_row = list(output_empty) + output_row[classes.index(doc[1])] = 1 + + training.append([bag, output_row]) + +# mische unsere Features und verwandle die in np.array +random.shuffle(training) +training = np.array(training) + +# Erstelle die Training-Liste +train_x = list(training[:, 0]) +train_y = list(training[:, 1]) + + +#tf.reset_default_graph() +tf.compat.v1.reset_default_graph() +# Aufbau des neuronalen Netzes +net = tflearn.input_data(shape=[None, len(train_x[0])]) +net = tflearn.fully_connected(net, 88) +net = tflearn.fully_connected(net, 88) +net = tflearn.fully_connected(net, len(train_y[0]), activation='softmax') +net = tflearn.regression(net) + +# Definiere das Modell und konfiguriere tensorboard +model = tflearn.DNN(net, tensorboard_dir=getPath('train_logs')) +# Starte das training des Modells +model.fit(train_x, train_y, n_epoch=1000, batch_size=256, show_metric=True) +# Speichere das trainirte Modell +model.save(getPath('model.tflearn')) + + +print("model created") + +print("model created") +#Bearbeitung der Benutzereingaben, um einen bag-of-words zu erzeugen +def frageBearbeitung(frage): + # tokenisiere die synonymen + sentence_word = nltk.word_tokenize(frage, language='german') + # generiere die Stopwörter + stop= stopwords.words('german') + ignore_words = ['?', '.', ','] + stop + ######Korrektur Schreibfehler + sentence_words=[] + for word in sentence_word: + if word not in ignore_words or word=='weiter' or word=='andere' or word=='nicht': + #a=correction(word) + sentence_words.append(word) + # stemme jedes Wort + sentence_words = [stemmer.stem(word.lower()) for word in sentence_words] + return sentence_words + +# Rückgabe bag of words array: 0 oder 1 für jedes Wort in der 'bag', die im Satz existiert +def bow(frage, words, show_details=False): + sentence_words = frageBearbeitung(frage) + bag = [0] * len(words) + for s in sentence_words: + for i, w in enumerate(words): + if w == s: + bag[i] = 1 + if show_details: + print("found in bag: %s" % w) + + return (np.array(bag)) + + + + +def lowercase(obj): + """ Make dictionary lowercase """ + if isinstance(obj, dict): + return {k: lowercase(v) for k, v in obj.items()} + elif isinstance(obj, (list, set, tuple)): + t = type(obj) + return t(lowercase(o) for o in obj) + elif isinstance(obj, str): + if " " in obj: + object=[] + o=nltk.word_tokenize(obj) + for i in o: + i=stemmer.stem(i.lower()) + object.append(i) + s = ' ' + object = s.join(object) + return object + + else: + return stemmer.stem(obj.lower()) + else: + return obj +ERROR_THRESHOLD=0 +def klassifizieren(frage): + # generiere Wahrscheinlichkeiten von dem Modell + + p = bow(frage, words, show_details=False) + results = model.predict(np.array([p]))[0] + + # herausfiltern Vorhersagen unterhalb eines Schwellenwerts + results = [[i, r] for i, r in enumerate(results) if r > ERROR_THRESHOLD] + # nach Stärke der Wahrscheinlichkeit sortieren + results.sort(key=lambda x: x[1], reverse=True) + return_list = [] + for r in results: + return_list.append((classes[r[0]], r[1])) + return return_list +print(klassifizieren('hallo')) + +hilf_entiti = {} +leistung_entiti = {} +lebenslage_entiti = {} + + + +for entities in dialogflow['entities_hilfe']: + for wert in entities['wert']: + # Tokenisieren jedes Wort im Satz + w = nltk.word_tokenize(wert) + # füge die zu Dokumenten in unserem Korpus hinzu + try: + hilf_entiti[entities['entitie']] = lowercase(entities['wert']) + except KeyError: + hilf_entiti[entities['entitie']] = lowercase(entities['wert']) + + +for entities in dialogflow['entities_leistungen']: + for wert in entities['wert']: + # Tokenisieren jedes Wort im Satz + w = nltk.word_tokenize(wert) + # füge die zu Dokumenten in unserem Korpus hinzu + try: + leistung_entiti[entities['entitie']] = lowercase(entities['wert']) + except KeyError: + leistung_entiti[entities['entitie']] = lowercase(entities['wert']) + +for entities in dialogflow['entities_lebenslage']: + for wert in entities['wert']: + # Tokenisieren jedes Wort im Satz + w = nltk.word_tokenize(wert) + # füge die zu Dokumenten in unserem Korpus hinzu + try: + lebenslage_entiti[entities['entitie']] = entities['wert'] + except KeyError: + lebenslage_entiti[entities['entitie']] = entities['wert'] + + +import pickle + +#pickle.dump(model, open(getPath('model.keras'), "wb")) + +#pickle.dump(model, getPath("katana-assistant-model.pkl", "wb")) + +# speichere alle unsere Datenstrukturen +pickle.dump({'words': words, 'classes': classes, 'train_x': train_x, 'train_y': train_y}, + open(getPath('trained_data'), "wb")) + + + + +with open(getPath('hilfe_data'), "wb") as filehandlehilfe: + # store the data as binary data stream + pickle.dump(hilf_entiti, filehandlehilfe) + +with open(getPath('leistung_data'), "wb") as filehandleleistung: + # store the data as binary data stream + pickle.dump(leistung_entiti, filehandleleistung) + +with open(getPath('lebenslage_data'), "wb") as filehandlelebenslage: + # store the data as binary data stream + pickle.dump(lebenslage_entiti, filehandlelebenslage) diff --git a/containercontent/opt/chatbot_engine/prodae/models/train_logs/9SRIHQ/events.out.tfevents.1643100124.F1RRZN743 b/containercontent/opt/chatbot_engine/prodae/models/train_logs/9SRIHQ/events.out.tfevents.1643100124.F1RRZN743 new file mode 100644 index 0000000..b13cd98 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/train_logs/9SRIHQ/events.out.tfevents.1643100124.F1RRZN743 differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/train_logs/VYYOCW/events.out.tfevents.1643100608.F1RRZN743 b/containercontent/opt/chatbot_engine/prodae/models/train_logs/VYYOCW/events.out.tfevents.1643100608.F1RRZN743 new file mode 100644 index 0000000..5356b08 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/train_logs/VYYOCW/events.out.tfevents.1643100608.F1RRZN743 differ diff --git a/containercontent/opt/chatbot_engine/prodae/models/trained_data b/containercontent/opt/chatbot_engine/prodae/models/trained_data new file mode 100644 index 0000000..3409817 Binary files /dev/null and b/containercontent/opt/chatbot_engine/prodae/models/trained_data differ diff --git a/containercontent/opt/chatbot_engine/static/css/Site.css b/containercontent/opt/chatbot_engine/static/css/Site.css new file mode 100644 index 0000000..0cdf0aa --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/Site.css @@ -0,0 +1,94 @@ +body { + padding-top: 50px; + padding-bottom: 20px; +} + +/* Set padding to keep content from hitting the edges */ +.body-content { + padding-left: 15px; + padding-right: 15px; +} + +/* Override the default bootstrap behavior where horizontal description lists + will truncate terms that are too long to fit in the left column +*/ +.dl-horizontal dt { + white-space: normal; +} + +/* Set width on the form input elements since they're 100% wide by default */ +input, +select, +textarea { + max-width: 280px; +} + +.round { + border-radius: 15px; + border: 1px solid #afb2ac; + padding: 20px; + width: 50%; + margin-bottom: 20px; +} +.inline-div { + width: auto; + display: inline-block; +} + +.left-side { + float: left; + width: 48%; +} + +.right-side { + float: right; + width: 48%; +} + + +.field-validation-error { + color: red; +} +.validation-summary-errors { + color: red; +} + +.green-text { + color: green; +} +.red-text { + color: red; +} +ul li { + opacity: .8; + text-align: left; +} +ul li a { + color: #96978E; + text-decoration: none; + display: block; +} +ul li a:hover { + color: white; + text-decoration: none; + display: block; +} +ul li ul li { + display: none; +} +ul li:hover ul li{ + display: block; +} +.not-save { + color: red; + font-size: 14px; +} + +.sup { + position: relative; + bottom: 1ex; + font-size: 80%; +} +.blue-text { + color: #428bca; +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap.css b/containercontent/opt/chatbot_engine/static/css/bootstrap.css new file mode 100644 index 0000000..eb852b0 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap.css @@ -0,0 +1,6816 @@ +/* NUGET: BEGIN LICENSE TEXT + * + * Microsoft grants you the right to use these script files for the sole + * purpose of either: (i) interacting through your browser with the Microsoft + * website or online service, subject to the applicable licensing or use + * terms; or (ii) using the files as included with a Microsoft product subject + * to that product's license terms. Microsoft reserves all other rights to the + * files not expressly granted by Microsoft, whether by implication, estoppel + * or otherwise. The notices and licenses below are for informational purposes only. + * + * NUGET: END LICENSE TEXT */ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333333; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input, +select[multiple], +textarea { + background-image: none; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #428bca; +} + +.text-warning { + color: #c09853; +} + +.text-danger { + color: #b94a48; +} + +.text-success { + color: #468847; +} + +.text-info { + color: #3a87ad; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +h1 small, +.h1 small { + font-size: 24px; +} + +h2 small, +.h2 small { + font-size: 18px; +} + +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.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, +.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, +.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, +.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 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.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 { + float: left; +} + +.col-xs-1 { + width: 8.333333333333332%; +} + +.col-xs-2 { + width: 16.666666666666664%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.33333333333333%; +} + +.col-xs-5 { + width: 41.66666666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333333333336%; +} + +.col-xs-8 { + width: 66.66666666666666%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.33333333333334%; +} + +.col-xs-11 { + width: 91.66666666666666%; +} + +.col-xs-12 { + width: 100%; +} + +@media (min-width: 768px) { + .container { + max-width: 750px; + } + .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 { + float: left; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-push-1 { + left: 8.333333333333332%; + } + .col-sm-push-2 { + left: 16.666666666666664%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.33333333333333%; + } + .col-sm-push-5 { + left: 41.66666666666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333333333336%; + } + .col-sm-push-8 { + left: 66.66666666666666%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.33333333333334%; + } + .col-sm-push-11 { + left: 91.66666666666666%; + } + .col-sm-pull-1 { + right: 8.333333333333332%; + } + .col-sm-pull-2 { + right: 16.666666666666664%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.33333333333333%; + } + .col-sm-pull-5 { + right: 41.66666666666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333333333336%; + } + .col-sm-pull-8 { + right: 66.66666666666666%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.33333333333334%; + } + .col-sm-pull-11 { + right: 91.66666666666666%; + } + .col-sm-offset-1 { + margin-left: 8.333333333333332%; + } + .col-sm-offset-2 { + margin-left: 16.666666666666664%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.33333333333333%; + } + .col-sm-offset-5 { + margin-left: 41.66666666666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333333333336%; + } + .col-sm-offset-8 { + margin-left: 66.66666666666666%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.33333333333334%; + } + .col-sm-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px; + } + .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 { + float: left; + } + .col-md-1 { + width: 8.333333333333332%; + } + .col-md-2 { + width: 16.666666666666664%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.33333333333333%; + } + .col-md-5 { + width: 41.66666666666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333333333336%; + } + .col-md-8 { + width: 66.66666666666666%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.33333333333334%; + } + .col-md-11 { + width: 91.66666666666666%; + } + .col-md-12 { + width: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333333333332%; + } + .col-md-push-2 { + left: 16.666666666666664%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.33333333333333%; + } + .col-md-push-5 { + left: 41.66666666666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333333333336%; + } + .col-md-push-8 { + left: 66.66666666666666%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.33333333333334%; + } + .col-md-push-11 { + left: 91.66666666666666%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333333333332%; + } + .col-md-pull-2 { + right: 16.666666666666664%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.33333333333333%; + } + .col-md-pull-5 { + right: 41.66666666666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333333333336%; + } + .col-md-pull-8 { + right: 66.66666666666666%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.33333333333334%; + } + .col-md-pull-11 { + right: 91.66666666666666%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333333333332%; + } + .col-md-offset-2 { + margin-left: 16.666666666666664%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.33333333333333%; + } + .col-md-offset-5 { + margin-left: 41.66666666666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333333333336%; + } + .col-md-offset-8 { + margin-left: 66.66666666666666%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.33333333333334%; + } + .col-md-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } + .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 { + float: left; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333333333332%; + } + .col-lg-push-2 { + left: 16.666666666666664%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.33333333333333%; + } + .col-lg-push-5 { + left: 41.66666666666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333333333336%; + } + .col-lg-push-8 { + left: 66.66666666666666%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.33333333333334%; + } + .col-lg-push-11 { + left: 91.66666666666666%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333333333332%; + } + .col-lg-pull-2 { + right: 16.666666666666664%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.33333333333333%; + } + .col-lg-pull-5 { + right: 41.66666666666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333333333336%; + } + .col-lg-pull-8 { + right: 66.66666666666666%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.33333333333334%; + } + .col-lg-pull-11 { + right: 91.66666666666666%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333333333332%; + } + .col-lg-offset-2 { + margin-left: 16.666666666666664%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.33333333333333%; + } + .col-lg-offset-5 { + margin-left: 41.66666666666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333333333336%; + } + .col-lg-offset-8 { + margin-left: 66.66666666666666%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.33333333333334%; + } + .col-lg-offset-11 { + margin-left: 91.66666666666666%; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table thead > tr > th, +.table tbody > tr > th, +.table tfoot > tr > th, +.table thead > tr > td, +.table tbody > tr > td, +.table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} + +.table caption + thead tr:first-child th, +.table colgroup + thead tr:first-child th, +.table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + display: table-column; + float: none; +} + +table td[class*="col-"], +table th[class*="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be; +} + +@media (max-width: 768px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + background-color: #fff; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > thead > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > thead > tr:last-child > td, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +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; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + 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; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.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); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +.radio[disabled], +.radio-inline[disabled], +.checkbox[disabled], +.checkbox-inline[disabled], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"], +fieldset[disabled] .radio, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm { + height: auto; +} + +.input-lg { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 45px; + line-height: 45px; +} + +textarea.input-lg { + height: auto; +} + +.has-warning .help-block, +.has-warning .control-label { + color: #c09853; +} + +.has-warning .form-control { + border-color: #c09853; + -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); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label { + color: #b94a48; +} + +.has-error .form-control { + border-color: #b94a48; + -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); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label { + color: #468847; +} + +.has-success .form-control { + border-color: #468847; + -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); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.form-control-static { + padding-top: 7px; + margin-bottom: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +.form-horizontal .control-label, +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -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); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #333333; + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #333333; + background-color: #ebebeb; + border-color: #adadad; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #ffffff; + border-color: #cccccc; +} + +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #357ebd; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #3276b1; + border-color: #285e8e; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} + +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ed9c28; + border-color: #d58512; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} + +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #d2322d; + border-color: #ac2925; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} + +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #47a447; + border-color: #398439; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} + +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #39b3d7; + border-color: #269abc; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #999999; + text-decoration: none; +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs { + padding: 1px 5px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('fonts/glyphicons-halflings-regular.eot'); + src: url('fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('fonts/glyphicons-halflings-regular.woff') format('woff'), url('fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.glyphicon-briefcase:before { + content: "\1f4bc"; +} + +.glyphicon-calendar:before { + content: "\1f4c5"; +} + +.glyphicon-pushpin:before { + content: "\1f4cc"; +} + +.glyphicon-paperclip:before { + content: "\1f4ce"; +} + +.glyphicon-camera:before { + content: "\1f4f7"; +} + +.glyphicon-lock:before { + content: "\1f512"; +} + +.glyphicon-bell:before { + content: "\1f514"; +} + +.glyphicon-bookmark:before { + content: "\1f516"; +} + +.glyphicon-fire:before { + content: "\1f525"; +} + +.glyphicon-wrench:before { + content: "\1f527"; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.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; + font-size: 14px; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + 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; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } +} + +.btn-default .caret { + border-top-color: #333333; +} + +.btn-primary .caret, +.btn-success .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret { + border-top-color: #fff; +} + +.dropup .btn-default .caret { + border-bottom-color: #333333; +} + +.dropup .btn-primary .caret, +.dropup .btn-success .caret, +.dropup .btn-warning .caret, +.dropup .btn-danger .caret, +.dropup .btn-info .caret { + border-bottom-color: #fff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: none; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.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; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.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); +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.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; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, +.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 45px; + line-height: 45px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.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; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.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; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #428bca; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + float: none; +} + +.nav-tabs.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #428bca; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + float: none; +} + +.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + z-index: 1000; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse.in { + overflow-y: auto; +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; + } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; + } +} + +.container > .navbar-header, +.container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + z-index: 1030; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -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); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px; + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} + +.navbar-default .navbar-brand { + color: #777777; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} + +.navbar-default .navbar-text { + color: #777777; +} + +.navbar-default .navbar-nav > li > a { + color: #777777; +} + +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-default .navbar-toggle { + border-color: #dddddd; +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #cccccc; +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e6e6e6; +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, +.navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555555; + background-color: #e7e7e7; +} + +.navbar-default .navbar-nav > .open > a .caret, +.navbar-default .navbar-nav > .open > a:hover .caret, +.navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333333; + background-color: transparent; + } + .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: #555555; + background-color: #e7e7e7; + } + .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: #cccccc; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + +.navbar-default .navbar-link:hover { + color: #333333; +} + +.navbar-inverse { + background-color: #222222; + border-color: #080808; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a { + color: #999999; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999999; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .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: #ffffff; + background-color: #080808; + } + .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: #444444; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + background-color: #eeeeee; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #ffffff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; + border-color: #dddddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.label-default { + background-color: #999999; +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #808080; +} + +.label-primary { + background-color: #428bca; +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +.container .jumbotron { + border-radius: 6px; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100%; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #428bca; +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #333333; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert .alert-link { + font-weight: bold; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable { + padding-right: 35px; +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.alert-warning hr { + border-top-color: #f8e5be; +} + +.alert-warning .alert-link { + color: #a47e3c; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr { + border-top-color: #e6c1c7; +} + +.alert-danger .alert-link { + color: #953b39; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + 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); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + 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; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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); +} + +.progress-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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); +} + +.progress-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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); +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; +} + +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +a.list-group-item { + color: #555555; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading { + color: inherit; +} + +.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; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + 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); +} + +.panel-body { + padding: 15px; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel > .list-group { + margin-bottom: 0; +} + +.panel > .list-group .list-group-item { + border-width: 1px 0; +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.panel > .table { + margin-bottom: 0; +} + +.panel > .panel-body + .table { + border-top: 1px solid #dddddd; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; +} + +.panel-title > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; +} + +.panel-group .panel + .panel { + margin-top: 5px; +} + +.panel-group .panel-heading { + border-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #dddddd; +} + +.panel-group .panel-footer { + border-top: 0; +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #428bca; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca; +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6; +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #fbeed5; +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #fbeed5; +} + +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #eed3d7; +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #eed3d7; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1; +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1; +} + +.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); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +body.modal-open, +.modal-open .navbar-fixed-top, +.modal-open .navbar-fixed-bottom { + margin-right: 15px; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -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; +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -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; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 600px; + padding-top: 30px; + padding-bottom: 30px; + } + .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); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + 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); + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; + content: " "; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-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); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-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); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px; + } +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.visible-xs { + display: none !important; +} + +tr.visible-xs { + display: none !important; +} + +th.visible-xs, +td.visible-xs { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; + } + tr.visible-xs.visible-sm { + display: table-row !important; + } + th.visible-xs.visible-sm, + td.visible-xs.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; + } + tr.visible-xs.visible-md { + display: table-row !important; + } + th.visible-xs.visible-md, + td.visible-xs.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; + } + tr.visible-xs.visible-lg { + display: table-row !important; + } + th.visible-xs.visible-lg, + td.visible-xs.visible-lg { + display: table-cell !important; + } +} + +.visible-sm { + display: none !important; +} + +tr.visible-sm { + display: none !important; +} + +th.visible-sm, +td.visible-sm { + display: none !important; +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; + } + tr.visible-sm.visible-xs { + display: table-row !important; + } + th.visible-sm.visible-xs, + td.visible-sm.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; + } + tr.visible-sm.visible-md { + display: table-row !important; + } + th.visible-sm.visible-md, + td.visible-sm.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; + } + tr.visible-sm.visible-lg { + display: table-row !important; + } + th.visible-sm.visible-lg, + td.visible-sm.visible-lg { + display: table-cell !important; + } +} + +.visible-md { + display: none !important; +} + +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; + } + tr.visible-md.visible-xs { + display: table-row !important; + } + th.visible-md.visible-xs, + td.visible-md.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; + } + tr.visible-md.visible-sm { + display: table-row !important; + } + th.visible-md.visible-sm, + td.visible-md.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; + } + tr.visible-md.visible-lg { + display: table-row !important; + } + th.visible-md.visible-lg, + td.visible-md.visible-lg { + display: table-cell !important; + } +} + +.visible-lg { + display: none !important; +} + +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; + } + tr.visible-lg.visible-xs { + display: table-row !important; + } + th.visible-lg.visible-xs, + td.visible-lg.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; + } + tr.visible-lg.visible-sm { + display: table-row !important; + } + th.visible-lg.visible-sm, + td.visible-lg.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; + } + tr.visible-lg.visible-md { + display: table-row !important; + } + th.visible-lg.visible-md, + td.visible-lg.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +.hidden-xs { + display: block !important; +} + +tr.hidden-xs { + display: table-row !important; +} + +th.hidden-xs, +td.hidden-xs { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } + tr.hidden-xs { + display: none !important; + } + th.hidden-xs, + td.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important; + } + tr.hidden-xs.hidden-sm { + display: none !important; + } + th.hidden-xs.hidden-sm, + td.hidden-xs.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important; + } + tr.hidden-xs.hidden-md { + display: none !important; + } + th.hidden-xs.hidden-md, + td.hidden-xs.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important; + } + tr.hidden-xs.hidden-lg { + display: none !important; + } + th.hidden-xs.hidden-lg, + td.hidden-xs.hidden-lg { + display: none !important; + } +} + +.hidden-sm { + display: block !important; +} + +tr.hidden-sm { + display: table-row !important; +} + +th.hidden-sm, +td.hidden-sm { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important; + } + tr.hidden-sm.hidden-xs { + display: none !important; + } + th.hidden-sm.hidden-xs, + td.hidden-sm.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } + tr.hidden-sm { + display: none !important; + } + th.hidden-sm, + td.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important; + } + tr.hidden-sm.hidden-md { + display: none !important; + } + th.hidden-sm.hidden-md, + td.hidden-sm.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important; + } + tr.hidden-sm.hidden-lg { + display: none !important; + } + th.hidden-sm.hidden-lg, + td.hidden-sm.hidden-lg { + display: none !important; + } +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important; + } + tr.hidden-md.hidden-xs { + display: none !important; + } + th.hidden-md.hidden-xs, + td.hidden-md.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important; + } + tr.hidden-md.hidden-sm { + display: none !important; + } + th.hidden-md.hidden-sm, + td.hidden-md.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important; + } + tr.hidden-md.hidden-lg { + display: none !important; + } + th.hidden-md.hidden-lg, + td.hidden-md.hidden-lg { + display: none !important; + } +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important; + } + tr.hidden-lg.hidden-xs { + display: none !important; + } + th.hidden-lg.hidden-xs, + td.hidden-lg.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important; + } + tr.hidden-lg.hidden-sm { + display: none !important; + } + th.hidden-lg.hidden-sm, + td.hidden-lg.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important; + } + tr.hidden-lg.hidden-md { + display: none !important; + } + th.hidden-lg.hidden-md, + td.hidden-lg.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print { + display: none !important; + } + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap.min.css b/containercontent/opt/chatbot_engine/static/css/bootstrap.min.css new file mode 100644 index 0000000..daf1214 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap.min.css @@ -0,0 +1,6353 @@ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { + display: block +} + +audio, canvas, video { + display: inline-block +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden] { + display: none +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100% +} + +body { + margin: 0 +} + +a:focus { + outline: thin dotted +} + +a:active, a:hover { + outline: 0 +} + +h1 { + margin: .67em 0; + font-size: 2em +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, strong { + font-weight: bold +} + +dfn { + font-style: italic +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box +} + +mark { + color: #000; + background: #ff0 +} + +code, kbd, pre, samp { + font-family: monospace, serif; + font-size: 1em +} + +pre { + white-space: pre-wrap +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019" +} + +small { + font-size: 80% +} + +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline +} + +sup { + top: -0.5em +} + +sub { + bottom: -0.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 0 +} + +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0 +} + +legend { + padding: 0; + border: 0 +} + +button, input, select, textarea { + margin: 0; + font-family: inherit; + font-size: 100% +} + +button, input { + line-height: normal +} + +button, select { + text-transform: none +} + +button, html input[type="button"], input[type="reset"], input[type="submit"] { + cursor: pointer; + -webkit-appearance: button +} + +button[disabled], html input[disabled] { + cursor: default +} + +input[type="checkbox"], input[type="radio"] { + padding: 0; + box-sizing: border-box +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield +} + +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +button::-moz-focus-inner, input::-moz-focus-inner { + padding: 0; + border: 0 +} + +textarea { + overflow: auto; + vertical-align: top +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important + } + + a, a:visited { + text-decoration: underline + } + + a[href]:after { + content: " (" attr(href) ")" + } + + abbr[title]:after { + content: " (" attr(title) ")" + } + + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { + content: "" + } + + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid + } + + thead { + display: table-header-group + } + + tr, img { + page-break-inside: avoid + } + + img { + max-width: 100% !important + } + + @page { + margin: 2cm .5cm + } + + p, h2, h3 { + orphans: 3; + widows: 3 + } + + h2, h3 { + page-break-after: avoid + } + + .navbar { + display: none + } + + .table td, .table th { + background-color: #fff !important + } + + .btn > .caret, .dropup > .btn > .caret { + border-top-color: #000 !important + } + + .label { + border: 1px solid #000 + } + + .table { + border-collapse: collapse !important + } + + .table-bordered th, .table-bordered td { + border: 1px solid #ddd !important + } +} + +*, *:before, *:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #333; + background-color: #fff +} + +input, button, select, textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +button, input, select[multiple], textarea { + background-image: none +} + +a { + color: #428bca; + text-decoration: none +} + +a:hover, a:focus { + color: #2a6496; + text-decoration: underline +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +img { + vertical-align: middle +} + +.img-responsive { + display: block; + height: auto; + max-width: 100% +} + +.img-rounded { + border-radius: 6px +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out +} + +.img-circle { + border-radius: 50% +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0 +} + +p { + margin: 0 0 10px +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4 +} + +@media (min-width: 768px) { + .lead { + font-size: 21px + } +} + +small { + font-size: 85% +} + +cite { + font-style: normal +} + +.text-muted { + color: #999 +} + +.text-primary { + color: #428bca +} + +.text-warning { + color: #c09853 +} + +.text-danger { + color: #b94a48 +} + +.text-success { + color: #468847 +} + +.text-info { + color: #3a87ad +} + +.text-left { + text-align: left +} + +.text-right { + text-align: right +} + +.text-center { + text-align: center +} + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1 +} + +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small { + font-weight: normal; + line-height: 1; + color: #999 +} + +h1, h2, h3 { + margin-top: 20px; + margin-bottom: 10px +} + +h4, h5, h6 { + margin-top: 10px; + margin-bottom: 10px +} + +h1, .h1 { + font-size: 36px +} + +h2, .h2 { + font-size: 30px +} + +h3, .h3 { + font-size: 24px +} + +h4, .h4 { + font-size: 18px +} + +h5, .h5 { + font-size: 14px +} + +h6, .h6 { + font-size: 12px +} + +h1 small, .h1 small { + font-size: 24px +} + +h2 small, .h2 small { + font-size: 18px +} + +h3 small, .h3 small, h4 small, .h4 small { + font-size: 14px +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee +} + +ul, ol { + margin-top: 0; + margin-bottom: 10px +} + +ul ul, ol ul, ul ol, ol ol { + margin-bottom: 0 +} + +.list-unstyled { + padding-left: 0; + list-style: none +} + +.list-inline { + padding-left: 0; + list-style: none +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px +} + +dl { + margin-bottom: 20px +} + +dt, dd { + line-height: 1.428571429 +} + +dt { + font-weight: bold +} + +dd { + margin-left: 0 +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap + } + + .dl-horizontal dd { + margin-left: 180px + } + + .dl-horizontal dd:before, .dl-horizontal dd:after { + display: table; + content: " " + } + + .dl-horizontal dd:after { + clear: both + } + + .dl-horizontal dd:before, .dl-horizontal dd:after { + display: table; + content: " " + } + + .dl-horizontal dd:after { + clear: both + } +} + +abbr[title], abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999 +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eee +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25 +} + +blockquote p:last-child { + margin-bottom: 0 +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999 +} + +blockquote small:before { + content: '\2014 \00A0' +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eee; + border-left: 0 +} + +blockquote.pull-right p, blockquote.pull-right small { + text-align: right +} + +blockquote.pull-right small:before { + content: '' +} + +blockquote.pull-right small:after { + content: '\00A0 \2014' +} + +q:before, q:after, blockquote:before, blockquote:after { + content: "" +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429 +} + +code, pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px +} + +pre.prettyprint { + margin-bottom: 20px +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0 +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto +} + +.container:before, .container:after { + display: table; + content: " " +} + +.container:after { + clear: both +} + +.container:before, .container:after { + display: table; + content: " " +} + +.container:after { + clear: both +} + +.row { + margin-right: -15px; + margin-left: -15px +} + +.row:before, .row:after { + display: table; + content: " " +} + +.row:after { + clear: both +} + +.row:before, .row:after { + display: table; + content: " " +} + +.row:after { + clear: both +} + +.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, .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, .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, .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 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px +} + +.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 { + float: left +} + +.col-xs-1 { + width: 8.333333333333332% +} + +.col-xs-2 { + width: 16.666666666666664% +} + +.col-xs-3 { + width: 25% +} + +.col-xs-4 { + width: 33.33333333333333% +} + +.col-xs-5 { + width: 41.66666666666667% +} + +.col-xs-6 { + width: 50% +} + +.col-xs-7 { + width: 58.333333333333336% +} + +.col-xs-8 { + width: 66.66666666666666% +} + +.col-xs-9 { + width: 75% +} + +.col-xs-10 { + width: 83.33333333333334% +} + +.col-xs-11 { + width: 91.66666666666666% +} + +.col-xs-12 { + width: 100% +} + +@media (min-width: 768px) { + .container { + max-width: 750px + } + + .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 { + float: left + } + + .col-sm-1 { + width: 8.333333333333332% + } + + .col-sm-2 { + width: 16.666666666666664% + } + + .col-sm-3 { + width: 25% + } + + .col-sm-4 { + width: 33.33333333333333% + } + + .col-sm-5 { + width: 41.66666666666667% + } + + .col-sm-6 { + width: 50% + } + + .col-sm-7 { + width: 58.333333333333336% + } + + .col-sm-8 { + width: 66.66666666666666% + } + + .col-sm-9 { + width: 75% + } + + .col-sm-10 { + width: 83.33333333333334% + } + + .col-sm-11 { + width: 91.66666666666666% + } + + .col-sm-12 { + width: 100% + } + + .col-sm-push-1 { + left: 8.333333333333332% + } + + .col-sm-push-2 { + left: 16.666666666666664% + } + + .col-sm-push-3 { + left: 25% + } + + .col-sm-push-4 { + left: 33.33333333333333% + } + + .col-sm-push-5 { + left: 41.66666666666667% + } + + .col-sm-push-6 { + left: 50% + } + + .col-sm-push-7 { + left: 58.333333333333336% + } + + .col-sm-push-8 { + left: 66.66666666666666% + } + + .col-sm-push-9 { + left: 75% + } + + .col-sm-push-10 { + left: 83.33333333333334% + } + + .col-sm-push-11 { + left: 91.66666666666666% + } + + .col-sm-pull-1 { + right: 8.333333333333332% + } + + .col-sm-pull-2 { + right: 16.666666666666664% + } + + .col-sm-pull-3 { + right: 25% + } + + .col-sm-pull-4 { + right: 33.33333333333333% + } + + .col-sm-pull-5 { + right: 41.66666666666667% + } + + .col-sm-pull-6 { + right: 50% + } + + .col-sm-pull-7 { + right: 58.333333333333336% + } + + .col-sm-pull-8 { + right: 66.66666666666666% + } + + .col-sm-pull-9 { + right: 75% + } + + .col-sm-pull-10 { + right: 83.33333333333334% + } + + .col-sm-pull-11 { + right: 91.66666666666666% + } + + .col-sm-offset-1 { + margin-left: 8.333333333333332% + } + + .col-sm-offset-2 { + margin-left: 16.666666666666664% + } + + .col-sm-offset-3 { + margin-left: 25% + } + + .col-sm-offset-4 { + margin-left: 33.33333333333333% + } + + .col-sm-offset-5 { + margin-left: 41.66666666666667% + } + + .col-sm-offset-6 { + margin-left: 50% + } + + .col-sm-offset-7 { + margin-left: 58.333333333333336% + } + + .col-sm-offset-8 { + margin-left: 66.66666666666666% + } + + .col-sm-offset-9 { + margin-left: 75% + } + + .col-sm-offset-10 { + margin-left: 83.33333333333334% + } + + .col-sm-offset-11 { + margin-left: 91.66666666666666% + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px + } + + .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 { + float: left + } + + .col-md-1 { + width: 8.333333333333332% + } + + .col-md-2 { + width: 16.666666666666664% + } + + .col-md-3 { + width: 25% + } + + .col-md-4 { + width: 33.33333333333333% + } + + .col-md-5 { + width: 41.66666666666667% + } + + .col-md-6 { + width: 50% + } + + .col-md-7 { + width: 58.333333333333336% + } + + .col-md-8 { + width: 66.66666666666666% + } + + .col-md-9 { + width: 75% + } + + .col-md-10 { + width: 83.33333333333334% + } + + .col-md-11 { + width: 91.66666666666666% + } + + .col-md-12 { + width: 100% + } + + .col-md-push-0 { + left: auto + } + + .col-md-push-1 { + left: 8.333333333333332% + } + + .col-md-push-2 { + left: 16.666666666666664% + } + + .col-md-push-3 { + left: 25% + } + + .col-md-push-4 { + left: 33.33333333333333% + } + + .col-md-push-5 { + left: 41.66666666666667% + } + + .col-md-push-6 { + left: 50% + } + + .col-md-push-7 { + left: 58.333333333333336% + } + + .col-md-push-8 { + left: 66.66666666666666% + } + + .col-md-push-9 { + left: 75% + } + + .col-md-push-10 { + left: 83.33333333333334% + } + + .col-md-push-11 { + left: 91.66666666666666% + } + + .col-md-pull-0 { + right: auto + } + + .col-md-pull-1 { + right: 8.333333333333332% + } + + .col-md-pull-2 { + right: 16.666666666666664% + } + + .col-md-pull-3 { + right: 25% + } + + .col-md-pull-4 { + right: 33.33333333333333% + } + + .col-md-pull-5 { + right: 41.66666666666667% + } + + .col-md-pull-6 { + right: 50% + } + + .col-md-pull-7 { + right: 58.333333333333336% + } + + .col-md-pull-8 { + right: 66.66666666666666% + } + + .col-md-pull-9 { + right: 75% + } + + .col-md-pull-10 { + right: 83.33333333333334% + } + + .col-md-pull-11 { + right: 91.66666666666666% + } + + .col-md-offset-0 { + margin-left: 0 + } + + .col-md-offset-1 { + margin-left: 8.333333333333332% + } + + .col-md-offset-2 { + margin-left: 16.666666666666664% + } + + .col-md-offset-3 { + margin-left: 25% + } + + .col-md-offset-4 { + margin-left: 33.33333333333333% + } + + .col-md-offset-5 { + margin-left: 41.66666666666667% + } + + .col-md-offset-6 { + margin-left: 50% + } + + .col-md-offset-7 { + margin-left: 58.333333333333336% + } + + .col-md-offset-8 { + margin-left: 66.66666666666666% + } + + .col-md-offset-9 { + margin-left: 75% + } + + .col-md-offset-10 { + margin-left: 83.33333333333334% + } + + .col-md-offset-11 { + margin-left: 91.66666666666666% + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px + } + + .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 { + float: left + } + + .col-lg-1 { + width: 8.333333333333332% + } + + .col-lg-2 { + width: 16.666666666666664% + } + + .col-lg-3 { + width: 25% + } + + .col-lg-4 { + width: 33.33333333333333% + } + + .col-lg-5 { + width: 41.66666666666667% + } + + .col-lg-6 { + width: 50% + } + + .col-lg-7 { + width: 58.333333333333336% + } + + .col-lg-8 { + width: 66.66666666666666% + } + + .col-lg-9 { + width: 75% + } + + .col-lg-10 { + width: 83.33333333333334% + } + + .col-lg-11 { + width: 91.66666666666666% + } + + .col-lg-12 { + width: 100% + } + + .col-lg-push-0 { + left: auto + } + + .col-lg-push-1 { + left: 8.333333333333332% + } + + .col-lg-push-2 { + left: 16.666666666666664% + } + + .col-lg-push-3 { + left: 25% + } + + .col-lg-push-4 { + left: 33.33333333333333% + } + + .col-lg-push-5 { + left: 41.66666666666667% + } + + .col-lg-push-6 { + left: 50% + } + + .col-lg-push-7 { + left: 58.333333333333336% + } + + .col-lg-push-8 { + left: 66.66666666666666% + } + + .col-lg-push-9 { + left: 75% + } + + .col-lg-push-10 { + left: 83.33333333333334% + } + + .col-lg-push-11 { + left: 91.66666666666666% + } + + .col-lg-pull-0 { + right: auto + } + + .col-lg-pull-1 { + right: 8.333333333333332% + } + + .col-lg-pull-2 { + right: 16.666666666666664% + } + + .col-lg-pull-3 { + right: 25% + } + + .col-lg-pull-4 { + right: 33.33333333333333% + } + + .col-lg-pull-5 { + right: 41.66666666666667% + } + + .col-lg-pull-6 { + right: 50% + } + + .col-lg-pull-7 { + right: 58.333333333333336% + } + + .col-lg-pull-8 { + right: 66.66666666666666% + } + + .col-lg-pull-9 { + right: 75% + } + + .col-lg-pull-10 { + right: 83.33333333333334% + } + + .col-lg-pull-11 { + right: 91.66666666666666% + } + + .col-lg-offset-0 { + margin-left: 0 + } + + .col-lg-offset-1 { + margin-left: 8.333333333333332% + } + + .col-lg-offset-2 { + margin-left: 16.666666666666664% + } + + .col-lg-offset-3 { + margin-left: 25% + } + + .col-lg-offset-4 { + margin-left: 33.33333333333333% + } + + .col-lg-offset-5 { + margin-left: 41.66666666666667% + } + + .col-lg-offset-6 { + margin-left: 50% + } + + .col-lg-offset-7 { + margin-left: 58.333333333333336% + } + + .col-lg-offset-8 { + margin-left: 66.66666666666666% + } + + .col-lg-offset-9 { + margin-left: 75% + } + + .col-lg-offset-10 { + margin-left: 83.33333333333334% + } + + .col-lg-offset-11 { + margin-left: 91.66666666666666% + } +} + +table { + max-width: 100%; + background-color: transparent +} + +th { + text-align: left +} + +.table { + width: 100%; + margin-bottom: 20px +} + +.table thead > tr > th, .table tbody > tr > th, .table tfoot > tr > th, .table thead > tr > td, .table tbody > tr > td, .table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #ddd +} + +.table thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd +} + +.table caption + thead tr:first-child th, .table colgroup + thead tr:first-child th, .table thead:first-child tr:first-child th, .table caption + thead tr:first-child td, .table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child td { + border-top: 0 +} + +.table tbody + tbody { + border-top: 2px solid #ddd +} + +.table .table { + background-color: #fff +} + +.table-condensed thead > tr > th, .table-condensed tbody > tr > th, .table-condensed tfoot > tr > th, .table-condensed thead > tr > td, .table-condensed tbody > tr > td, .table-condensed tfoot > tr > td { + padding: 5px +} + +.table-bordered { + border: 1px solid #ddd +} + +.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td { + border: 1px solid #ddd +} + +.table-bordered > thead > tr > th, .table-bordered > thead > tr > td { + border-bottom-width: 2px +} + +.table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9 +} + +.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th { + background-color: #f5f5f5 +} + +table col[class*="col-"] { + display: table-column; + float: none +} + +table td[class*="col-"], table th[class*="col-"] { + display: table-cell; + float: none +} + +.table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th { + background-color: #f5f5f5 +} + +.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6 +} + +.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3 +} + +.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7 +} + +.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7 +} + +.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5 +} + +.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be +} + +@media (max-width: 768px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #ddd + } + + .table-responsive > .table { + margin-bottom: 0; + background-color: #fff + } + + .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td { + white-space: nowrap + } + + .table-responsive > .table-bordered { + border: 0 + } + + .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0 + } + + .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0 + } + + .table-responsive > .table-bordered > thead > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > thead > tr:last-child > td, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0 + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0 +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5 +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +input[type="radio"], input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal +} + +input[type="file"] { + display: block +} + +select[multiple], select[size] { + height: auto +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit +} + +input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { + height: auto +} + +.form-control:-moz-placeholder { + color: #999 +} + +.form-control::-moz-placeholder { + color: #999 +} + +.form-control:-ms-input-placeholder { + color: #999 +} + +.form-control::-webkit-input-placeholder { + color: #999 +} + +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #555; + vertical-align: middle; + background-color: #fff; + 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 .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s +} + +.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) +} + +.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eee +} + +textarea.form-control { + height: auto +} + +.form-group { + margin-bottom: 15px +} + +.radio, .checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle +} + +.radio label, .checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer +} + +.radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px +} + +.radio + .radio, .checkbox + .checkbox { + margin-top: -5px +} + +.radio-inline, .checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer +} + +.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px +} + +input[type="radio"][disabled], input[type="checkbox"][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline { + cursor: not-allowed +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +select.input-sm { + height: 30px; + line-height: 30px +} + +textarea.input-sm { + height: auto +} + +.input-lg { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px +} + +select.input-lg { + height: 45px; + line-height: 45px +} + +textarea.input-lg { + height: auto +} + +.has-warning .help-block, .has-warning .control-label { + color: #c09853 +} + +.has-warning .form-control { + border-color: #c09853; + -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) +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853 +} + +.has-error .help-block, .has-error .control-label { + color: #b94a48 +} + +.has-error .form-control { + border-color: #b94a48; + -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) +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392 +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48 +} + +.has-success .help-block, .has-success .control-label { + color: #468847 +} + +.has-success .form-control { + border-color: #468847; + -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) +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847 +} + +.form-control-static { + padding-top: 7px; + margin-bottom: 0 +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373 +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .form-inline .form-control { + display: inline-block + } + + .form-inline .radio, .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0 + } + + .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0 + } +} + +.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0 +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px +} + +.form-horizontal .form-group:before, .form-horizontal .form-group:after { + display: table; + content: " " +} + +.form-horizontal .form-group:after { + clear: both +} + +.form-horizontal .form-group:before, .form-horizontal .form-group:after { + display: table; + content: " " +} + +.form-horizontal .form-group:after { + clear: both +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px +} + +.btn:hover, .btn:focus { + color: #333; + text-decoration: none +} + +.btn:active, .btn.active { + background-image: none; + outline: 0; + -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) +} + +.btn.disabled, .btn[disabled], fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: .65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc +} + +.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + color: #333; + background-color: #ebebeb; + border-color: #adadad +} + +.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default { + background-image: none +} + +.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc +} + +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { + color: #fff; + background-color: #3276b1; + border-color: #285e8e +} + +.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary { + background-image: none +} + +.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ed9c28; + border-color: #d58512 +} + +.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning { + background-image: none +} + +.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236 +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { + color: #fff; + background-color: #d2322d; + border-color: #ac2925 +} + +.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger { + background-image: none +} + +.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + color: #fff; + background-color: #47a447; + border-color: #398439 +} + +.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success { + background-image: none +} + +.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { + color: #fff; + background-color: #39b3d7; + border-color: #269abc +} + +.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info { + background-image: none +} + +.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0 +} + +.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none +} + +.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active { + border-color: transparent +} + +.btn-link:hover, .btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent +} + +.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus { + color: #999; + text-decoration: none +} + +.btn-lg { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px +} + +.btn-sm, .btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-xs { + padding: 1px 5px +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0 +} + +.btn-block + .btn-block { + margin-top: 5px +} + +input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { + width: 100% +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear +} + +.fade.in { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.in { + display: block +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height .35s ease; + transition: height .35s ease +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg') +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1 +} + +.glyphicon-asterisk:before { + content: "\2a" +} + +.glyphicon-plus:before { + content: "\2b" +} + +.glyphicon-euro:before { + content: "\20ac" +} + +.glyphicon-minus:before { + content: "\2212" +} + +.glyphicon-cloud:before { + content: "\2601" +} + +.glyphicon-envelope:before { + content: "\2709" +} + +.glyphicon-pencil:before { + content: "\270f" +} + +.glyphicon-glass:before { + content: "\e001" +} + +.glyphicon-music:before { + content: "\e002" +} + +.glyphicon-search:before { + content: "\e003" +} + +.glyphicon-heart:before { + content: "\e005" +} + +.glyphicon-star:before { + content: "\e006" +} + +.glyphicon-star-empty:before { + content: "\e007" +} + +.glyphicon-user:before { + content: "\e008" +} + +.glyphicon-film:before { + content: "\e009" +} + +.glyphicon-th-large:before { + content: "\e010" +} + +.glyphicon-th:before { + content: "\e011" +} + +.glyphicon-th-list:before { + content: "\e012" +} + +.glyphicon-ok:before { + content: "\e013" +} + +.glyphicon-remove:before { + content: "\e014" +} + +.glyphicon-zoom-in:before { + content: "\e015" +} + +.glyphicon-zoom-out:before { + content: "\e016" +} + +.glyphicon-off:before { + content: "\e017" +} + +.glyphicon-signal:before { + content: "\e018" +} + +.glyphicon-cog:before { + content: "\e019" +} + +.glyphicon-trash:before { + content: "\e020" +} + +.glyphicon-home:before { + content: "\e021" +} + +.glyphicon-file:before { + content: "\e022" +} + +.glyphicon-time:before { + content: "\e023" +} + +.glyphicon-road:before { + content: "\e024" +} + +.glyphicon-download-alt:before { + content: "\e025" +} + +.glyphicon-download:before { + content: "\e026" +} + +.glyphicon-upload:before { + content: "\e027" +} + +.glyphicon-inbox:before { + content: "\e028" +} + +.glyphicon-play-circle:before { + content: "\e029" +} + +.glyphicon-repeat:before { + content: "\e030" +} + +.glyphicon-refresh:before { + content: "\e031" +} + +.glyphicon-list-alt:before { + content: "\e032" +} + +.glyphicon-flag:before { + content: "\e034" +} + +.glyphicon-headphones:before { + content: "\e035" +} + +.glyphicon-volume-off:before { + content: "\e036" +} + +.glyphicon-volume-down:before { + content: "\e037" +} + +.glyphicon-volume-up:before { + content: "\e038" +} + +.glyphicon-qrcode:before { + content: "\e039" +} + +.glyphicon-barcode:before { + content: "\e040" +} + +.glyphicon-tag:before { + content: "\e041" +} + +.glyphicon-tags:before { + content: "\e042" +} + +.glyphicon-book:before { + content: "\e043" +} + +.glyphicon-print:before { + content: "\e045" +} + +.glyphicon-font:before { + content: "\e047" +} + +.glyphicon-bold:before { + content: "\e048" +} + +.glyphicon-italic:before { + content: "\e049" +} + +.glyphicon-text-height:before { + content: "\e050" +} + +.glyphicon-text-width:before { + content: "\e051" +} + +.glyphicon-align-left:before { + content: "\e052" +} + +.glyphicon-align-center:before { + content: "\e053" +} + +.glyphicon-align-right:before { + content: "\e054" +} + +.glyphicon-align-justify:before { + content: "\e055" +} + +.glyphicon-list:before { + content: "\e056" +} + +.glyphicon-indent-left:before { + content: "\e057" +} + +.glyphicon-indent-right:before { + content: "\e058" +} + +.glyphicon-facetime-video:before { + content: "\e059" +} + +.glyphicon-picture:before { + content: "\e060" +} + +.glyphicon-map-marker:before { + content: "\e062" +} + +.glyphicon-adjust:before { + content: "\e063" +} + +.glyphicon-tint:before { + content: "\e064" +} + +.glyphicon-edit:before { + content: "\e065" +} + +.glyphicon-share:before { + content: "\e066" +} + +.glyphicon-check:before { + content: "\e067" +} + +.glyphicon-move:before { + content: "\e068" +} + +.glyphicon-step-backward:before { + content: "\e069" +} + +.glyphicon-fast-backward:before { + content: "\e070" +} + +.glyphicon-backward:before { + content: "\e071" +} + +.glyphicon-play:before { + content: "\e072" +} + +.glyphicon-pause:before { + content: "\e073" +} + +.glyphicon-stop:before { + content: "\e074" +} + +.glyphicon-forward:before { + content: "\e075" +} + +.glyphicon-fast-forward:before { + content: "\e076" +} + +.glyphicon-step-forward:before { + content: "\e077" +} + +.glyphicon-eject:before { + content: "\e078" +} + +.glyphicon-chevron-left:before { + content: "\e079" +} + +.glyphicon-chevron-right:before { + content: "\e080" +} + +.glyphicon-plus-sign:before { + content: "\e081" +} + +.glyphicon-minus-sign:before { + content: "\e082" +} + +.glyphicon-remove-sign:before { + content: "\e083" +} + +.glyphicon-ok-sign:before { + content: "\e084" +} + +.glyphicon-question-sign:before { + content: "\e085" +} + +.glyphicon-info-sign:before { + content: "\e086" +} + +.glyphicon-screenshot:before { + content: "\e087" +} + +.glyphicon-remove-circle:before { + content: "\e088" +} + +.glyphicon-ok-circle:before { + content: "\e089" +} + +.glyphicon-ban-circle:before { + content: "\e090" +} + +.glyphicon-arrow-left:before { + content: "\e091" +} + +.glyphicon-arrow-right:before { + content: "\e092" +} + +.glyphicon-arrow-up:before { + content: "\e093" +} + +.glyphicon-arrow-down:before { + content: "\e094" +} + +.glyphicon-share-alt:before { + content: "\e095" +} + +.glyphicon-resize-full:before { + content: "\e096" +} + +.glyphicon-resize-small:before { + content: "\e097" +} + +.glyphicon-exclamation-sign:before { + content: "\e101" +} + +.glyphicon-gift:before { + content: "\e102" +} + +.glyphicon-leaf:before { + content: "\e103" +} + +.glyphicon-eye-open:before { + content: "\e105" +} + +.glyphicon-eye-close:before { + content: "\e106" +} + +.glyphicon-warning-sign:before { + content: "\e107" +} + +.glyphicon-plane:before { + content: "\e108" +} + +.glyphicon-random:before { + content: "\e110" +} + +.glyphicon-comment:before { + content: "\e111" +} + +.glyphicon-magnet:before { + content: "\e112" +} + +.glyphicon-chevron-up:before { + content: "\e113" +} + +.glyphicon-chevron-down:before { + content: "\e114" +} + +.glyphicon-retweet:before { + content: "\e115" +} + +.glyphicon-shopping-cart:before { + content: "\e116" +} + +.glyphicon-folder-close:before { + content: "\e117" +} + +.glyphicon-folder-open:before { + content: "\e118" +} + +.glyphicon-resize-vertical:before { + content: "\e119" +} + +.glyphicon-resize-horizontal:before { + content: "\e120" +} + +.glyphicon-hdd:before { + content: "\e121" +} + +.glyphicon-bullhorn:before { + content: "\e122" +} + +.glyphicon-certificate:before { + content: "\e124" +} + +.glyphicon-thumbs-up:before { + content: "\e125" +} + +.glyphicon-thumbs-down:before { + content: "\e126" +} + +.glyphicon-hand-right:before { + content: "\e127" +} + +.glyphicon-hand-left:before { + content: "\e128" +} + +.glyphicon-hand-up:before { + content: "\e129" +} + +.glyphicon-hand-down:before { + content: "\e130" +} + +.glyphicon-circle-arrow-right:before { + content: "\e131" +} + +.glyphicon-circle-arrow-left:before { + content: "\e132" +} + +.glyphicon-circle-arrow-up:before { + content: "\e133" +} + +.glyphicon-circle-arrow-down:before { + content: "\e134" +} + +.glyphicon-globe:before { + content: "\e135" +} + +.glyphicon-tasks:before { + content: "\e137" +} + +.glyphicon-filter:before { + content: "\e138" +} + +.glyphicon-fullscreen:before { + content: "\e140" +} + +.glyphicon-dashboard:before { + content: "\e141" +} + +.glyphicon-heart-empty:before { + content: "\e143" +} + +.glyphicon-link:before { + content: "\e144" +} + +.glyphicon-phone:before { + content: "\e145" +} + +.glyphicon-usd:before { + content: "\e148" +} + +.glyphicon-gbp:before { + content: "\e149" +} + +.glyphicon-sort:before { + content: "\e150" +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151" +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152" +} + +.glyphicon-sort-by-order:before { + content: "\e153" +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154" +} + +.glyphicon-sort-by-attributes:before { + content: "\e155" +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156" +} + +.glyphicon-unchecked:before { + content: "\e157" +} + +.glyphicon-expand:before { + content: "\e158" +} + +.glyphicon-collapse-down:before { + content: "\e159" +} + +.glyphicon-collapse-up:before { + content: "\e160" +} + +.glyphicon-log-in:before { + content: "\e161" +} + +.glyphicon-flash:before { + content: "\e162" +} + +.glyphicon-log-out:before { + content: "\e163" +} + +.glyphicon-new-window:before { + content: "\e164" +} + +.glyphicon-record:before { + content: "\e165" +} + +.glyphicon-save:before { + content: "\e166" +} + +.glyphicon-open:before { + content: "\e167" +} + +.glyphicon-saved:before { + content: "\e168" +} + +.glyphicon-import:before { + content: "\e169" +} + +.glyphicon-export:before { + content: "\e170" +} + +.glyphicon-send:before { + content: "\e171" +} + +.glyphicon-floppy-disk:before { + content: "\e172" +} + +.glyphicon-floppy-saved:before { + content: "\e173" +} + +.glyphicon-floppy-remove:before { + content: "\e174" +} + +.glyphicon-floppy-save:before { + content: "\e175" +} + +.glyphicon-floppy-open:before { + content: "\e176" +} + +.glyphicon-credit-card:before { + content: "\e177" +} + +.glyphicon-transfer:before { + content: "\e178" +} + +.glyphicon-cutlery:before { + content: "\e179" +} + +.glyphicon-header:before { + content: "\e180" +} + +.glyphicon-compressed:before { + content: "\e181" +} + +.glyphicon-earphone:before { + content: "\e182" +} + +.glyphicon-phone-alt:before { + content: "\e183" +} + +.glyphicon-tower:before { + content: "\e184" +} + +.glyphicon-stats:before { + content: "\e185" +} + +.glyphicon-sd-video:before { + content: "\e186" +} + +.glyphicon-hd-video:before { + content: "\e187" +} + +.glyphicon-subtitles:before { + content: "\e188" +} + +.glyphicon-sound-stereo:before { + content: "\e189" +} + +.glyphicon-sound-dolby:before { + content: "\e190" +} + +.glyphicon-sound-5-1:before { + content: "\e191" +} + +.glyphicon-sound-6-1:before { + content: "\e192" +} + +.glyphicon-sound-7-1:before { + content: "\e193" +} + +.glyphicon-copyright-mark:before { + content: "\e194" +} + +.glyphicon-registration-mark:before { + content: "\e195" +} + +.glyphicon-cloud-download:before { + content: "\e197" +} + +.glyphicon-cloud-upload:before { + content: "\e198" +} + +.glyphicon-tree-conifer:before { + content: "\e199" +} + +.glyphicon-tree-deciduous:before { + content: "\e200" +} + +.glyphicon-briefcase:before { + content: "\1f4bc" +} + +.glyphicon-calendar:before { + content: "\1f4c5" +} + +.glyphicon-pushpin:before { + content: "\1f4cc" +} + +.glyphicon-paperclip:before { + content: "\1f4ce" +} + +.glyphicon-camera:before { + content: "\1f4f7" +} + +.glyphicon-lock:before { + content: "\1f512" +} + +.glyphicon-bell:before { + content: "\1f514" +} + +.glyphicon-bookmark:before { + content: "\1f516" +} + +.glyphicon-fire:before { + content: "\1f525" +} + +.glyphicon-wrench:before { + content: "\1f527" +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; + content: "" +} + +.dropdown { + position: relative +} + +.dropdown-toggle:focus { + outline: 0 +} + +.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; + font-size: 14px; + list-style: none; + 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 +} + +.dropdown-menu.pull-right { + right: 0; + left: auto +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333; + white-space: nowrap +} + +.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { + color: #fff; + text-decoration: none; + background-color: #428bca +} + +.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #428bca; + outline: 0 +} + +.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + color: #999 +} + +.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false) +} + +.open > .dropdown-menu { + display: block +} + +.open > a { + outline: 0 +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999 +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990 +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto +} + +.dropup .caret, .navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000; + content: "" +} + +.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto + } +} + +.btn-default .caret { + border-top-color: #333 +} + +.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret { + border-top-color: #fff +} + +.dropup .btn-default .caret { + border-bottom-color: #333 +} + +.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret { + border-bottom-color: #fff +} + +.btn-group, .btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle +} + +.btn-group > .btn, .btn-group-vertical > .btn { + position: relative; + float: left +} + +.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active { + z-index: 2 +} + +.btn-group > .btn:focus, .btn-group-vertical > .btn:focus { + outline: 0 +} + +.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { + margin-left: -1px +} + +.btn-toolbar:before, .btn-toolbar:after { + display: table; + content: " " +} + +.btn-toolbar:after { + clear: both +} + +.btn-toolbar:before, .btn-toolbar:after { + display: table; + content: " " +} + +.btn-toolbar:after { + clear: both +} + +.btn-toolbar .btn-group { + float: left +} + +.btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn-group { + margin-left: 5px +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0 +} + +.btn-group > .btn:first-child { + margin-left: 0 +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.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 +} + +.btn-group > .btn-group { + float: left +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { + outline: 0 +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px +} + +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px +} + +.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) +} + +.btn .caret { + margin-left: 0 +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0 +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px +} + +.btn-group-vertical > .btn, .btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100% +} + +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + display: table; + content: " " +} + +.btn-group-vertical > .btn-group:after { + clear: both +} + +.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after { + display: table; + content: " " +} + +.btn-group-vertical > .btn-group:after { + clear: both +} + +.btn-group-vertical > .btn-group > .btn { + float: none +} + +.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 +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0 +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0 +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1% +} + +[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none +} + +.input-group { + position: relative; + display: table; + border-collapse: separate +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0 +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0 +} + +.input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { + height: 45px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px +} + +select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { + height: 45px; + line-height: 45px +} + +textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn { + height: auto +} + +.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 +} + +select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px +} + +textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn { + height: auto +} + +.input-group-addon, .input-group-btn, .input-group .form-control { + display: table-cell +} + +.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 +} + +.input-group-addon, .input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle +} + +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px +} + +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px +} + +.input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] { + margin-top: 0 +} + +.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group-addon:first-child { + border-right: 0 +} + +.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0 +} + +.input-group-addon:last-child { + border-left: 0 +} + +.input-group-btn { + position: relative; + white-space: nowrap +} + +.input-group-btn > .btn { + position: relative +} + +.input-group-btn > .btn + .btn { + margin-left: -4px +} + +.input-group-btn > .btn:hover, .input-group-btn > .btn:active { + z-index: 2 +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.nav:before, .nav:after { + display: table; + content: " " +} + +.nav:after { + clear: both +} + +.nav:before, .nav:after { + display: table; + content: " " +} + +.nav:after { + clear: both +} + +.nav > li { + position: relative; + display: block +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px +} + +.nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: #eee +} + +.nav > li.disabled > a { + color: #999 +} + +.nav > li.disabled > a:hover, .nav > li.disabled > a:focus { + color: #999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent +} + +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #eee; + border-color: #428bca +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5 +} + +.nav > li > a > img { + max-width: none +} + +.nav-tabs { + border-bottom: 1px solid #ddd +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0 +} + +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd +} + +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0 +} + +.nav-tabs.nav-justified > li { + float: none +} + +.nav-tabs.nav-justified > li > a { + text-align: center +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1% + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #ddd +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #fff +} + +.nav-pills > li { + float: left +} + +.nav-pills > li > a { + border-radius: 5px +} + +.nav-pills > li + li { + margin-left: 2px +} + +.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca +} + +.nav-stacked > li { + float: none +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0 +} + +.nav-justified { + width: 100% +} + +.nav-justified > li { + float: none +} + +.nav-justified > li > a { + text-align: center +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1% + } +} + +.nav-tabs-justified { + border-bottom: 0 +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #ddd +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #fff +} + +.tabbable:before, .tabbable:after { + display: table; + content: " " +} + +.tabbable:after { + clear: both +} + +.tabbable:before, .tabbable:after { + display: table; + content: " " +} + +.tabbable:after { + clear: both +} + +.tab-content > .tab-pane, .pill-content > .pill-pane { + display: none +} + +.tab-content > .active, .pill-content > .active { + display: block +} + +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca +} + +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496 +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar { + position: relative; + z-index: 1000; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent +} + +.navbar:before, .navbar:after { + display: table; + content: " " +} + +.navbar:after { + clear: both +} + +.navbar:before, .navbar:after { + display: table; + content: " " +} + +.navbar:after { + clear: both +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px + } +} + +.navbar-header:before, .navbar-header:after { + display: table; + content: " " +} + +.navbar-header:after { + clear: both +} + +.navbar-header:before, .navbar-header:after { + display: table; + content: " " +} + +.navbar-header:after { + clear: both +} + +@media (min-width: 768px) { + .navbar-header { + float: left + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch +} + +.navbar-collapse:before, .navbar-collapse:after { + display: table; + content: " " +} + +.navbar-collapse:after { + clear: both +} + +.navbar-collapse:before, .navbar-collapse:after { + display: table; + content: " " +} + +.navbar-collapse:after { + clear: both +} + +.navbar-collapse.in { + overflow-y: auto +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none + } + + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important + } + + .navbar-collapse.in { + overflow-y: visible + } + + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px + } + + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px + } + + .navbar-collapse .navbar-text:last-child { + margin-right: 0 + } +} + +.container > .navbar-header, .container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px +} + +@media (min-width: 768px) { + .container > .navbar-header, .container > .navbar-collapse { + margin-right: 0; + margin-left: 0 + } +} + +.navbar-static-top { + border-width: 0 0 1px +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0 + } +} + +.navbar-fixed-top, .navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + border-width: 0 0 1px +} + +@media (min-width: 768px) { + .navbar-fixed-top, .navbar-fixed-bottom { + border-radius: 0 + } +} + +.navbar-fixed-top { + top: 0; + z-index: 1030 +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0 +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none + } +} + +.navbar-nav { + margin: 7.5px -15px +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none + } + + .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px + } + + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px + } + + .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0 + } + + .navbar-nav > li { + float: left + } + + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important + } + + .navbar-right { + float: right !important + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -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) +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle + } + + .navbar-form .form-control { + display: inline-block + } + + .navbar-form .radio, .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0 + } + + .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0 + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.navbar-nav.pull-right > li > .dropdown-menu, .navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto +} + +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px + } +} + +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7 +} + +.navbar-default .navbar-brand { + color: #777 +} + +.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent +} + +.navbar-default .navbar-text { + color: #777 +} + +.navbar-default .navbar-nav > li > a { + color: #777 +} + +.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent +} + +.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 +} + +.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 +} + +.navbar-default .navbar-toggle { + border-color: #ddd +} + +.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus { + background-color: #ddd +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #ccc +} + +.navbar-default .navbar-collapse, .navbar-default .navbar-form { + border-color: #e6e6e6 +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, .navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333; + border-bottom-color: #333 +} + +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7 +} + +.navbar-default .navbar-nav > .open > a .caret, .navbar-default .navbar-nav > .open > a:hover .caret, .navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #555; + border-bottom-color: #555 +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777; + border-bottom-color: #777 +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777 + } + + .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 + } + + .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 + } + + .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 + } +} + +.navbar-default .navbar-link { + color: #777 +} + +.navbar-default .navbar-link:hover { + color: #333 +} + +.navbar-inverse { + /*background-color: #222;*/ + background-color: rgba(0, 0, 0, 0.8); + border-color: #080808 +} + +.navbar-inverse .navbar-brand { + color: #999 +} + +.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-text { + color: #999 +} + +.navbar-inverse .navbar-nav > li > a { + color: #999 +} + +.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent +} + +.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808 +} + +.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 +} + +.navbar-inverse .navbar-toggle { + border-color: #333 +} + +.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { + background-color: #333 +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff +} + +.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { + border-color: #101010 +} + +.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808 +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #fff; + border-bottom-color: #fff +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999; + border-bottom-color: #999 +} + +.navbar-inverse .navbar-nav > .open > a .caret, .navbar-inverse .navbar-nav > .open > a:hover .caret, .navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #fff; + border-bottom-color: #fff +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808 + } + + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #999 + } + + .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 + } + + .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: #080808 + } + + .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 + } +} + +.navbar-inverse .navbar-link { + color: #999 +} + +.navbar-inverse .navbar-link:hover { + color: #fff +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px +} + +.breadcrumb > li { + display: inline-block +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0" +} + +.breadcrumb > .active { + color: #999 +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px +} + +.pagination > li { + display: inline +} + +.pagination > li > a, .pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd +} + +.pagination > li:first-child > a, .pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px +} + +.pagination > li:last-child > a, .pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px +} + +.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { + background-color: #eee +} + +.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #428bca; + border-color: #428bca +} + +.pagination > .disabled > span, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { + color: #999; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd +} + +.pagination-lg > li > a, .pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px +} + +.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px +} + +.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px +} + +.pagination-sm > li > a, .pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px +} + +.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px +} + +.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none +} + +.pager:before, .pager:after { + display: table; + content: " " +} + +.pager:after { + clear: both +} + +.pager:before, .pager:after { + display: table; + content: " " +} + +.pager:after { + clear: both +} + +.pager li { + display: inline +} + +.pager li > a, .pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px +} + +.pager li > a:hover, .pager li > a:focus { + text-decoration: none; + background-color: #eee +} + +.pager .next > a, .pager .next > span { + float: right +} + +.pager .previous > a, .pager .previous > span { + float: left +} + +.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { + color: #999; + cursor: not-allowed; + background-color: #fff +} + +.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 +} + +.label[href]:hover, .label[href]:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.label:empty { + display: none +} + +.label-default { + background-color: #999 +} + +.label-default[href]:hover, .label-default[href]:focus { + background-color: #808080 +} + +.label-primary { + background-color: #428bca +} + +.label-primary[href]:hover, .label-primary[href]:focus { + background-color: #3071a9 +} + +.label-success { + background-color: #5cb85c +} + +.label-success[href]:hover, .label-success[href]:focus { + background-color: #449d44 +} + +.label-info { + background-color: #5bc0de +} + +.label-info[href]:hover, .label-info[href]:focus { + background-color: #31b0d5 +} + +.label-warning { + background-color: #f0ad4e +} + +.label-warning[href]:hover, .label-warning[href]:focus { + background-color: #ec971f +} + +.label-danger { + background-color: #d9534f +} + +.label-danger[href]:hover, .label-danger[href]:focus { + background-color: #c9302c +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999; + border-radius: 10px +} + +.badge:empty { + display: none +} + +a.badge:hover, a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer +} + +.btn .badge { + position: relative; + top: -1px +} + +a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff +} + +.nav-pills > li > a > .badge { + margin-left: 3px +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eee +} + +.jumbotron h1 { + line-height: 1; + color: inherit +} + +.jumbotron p { + line-height: 1.4 +} + +.container .jumbotron { + border-radius: 6px +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px + } + + .container .jumbotron { + padding-right: 60px; + padding-left: 60px + } + + .jumbotron h1 { + font-size: 63px + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100% +} + +a.thumbnail:hover, a.thumbnail:focus { + border-color: #428bca +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto +} + +.thumbnail .caption { + padding: 9px; + color: #333 +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px +} + +.alert h4 { + margin-top: 0; + color: inherit +} + +.alert .alert-link { + font-weight: bold +} + +.alert > p, .alert > ul { + margin-bottom: 0 +} + +.alert > p + p { + margin-top: 5px +} + +.alert-dismissable { + padding-right: 35px +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6 +} + +.alert-success hr { + border-top-color: #c9e2b3 +} + +.alert-success .alert-link { + color: #356635 +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1 +} + +.alert-info hr { + border-top-color: #a6e1ec +} + +.alert-info .alert-link { + color: #2d6987 +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5 +} + +.alert-warning hr { + border-top-color: #f8e5be +} + +.alert-warning .alert-link { + color: #a47e3c +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7 +} + +.alert-danger hr { + border-top-color: #e6c1c7 +} + +.alert-danger .alert-link { + color: #953b39 +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0 + } + to { + background-position: 40px 0 + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0 + } + to { + background-position: 0 0 + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + 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) +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + 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 .6s ease; + transition: width .6s ease +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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 +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite +} + +.progress-bar-success { + background-color: #5cb85c +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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) +} + +.progress-bar-info { + background-color: #5bc0de +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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) +} + +.progress-bar-warning { + background-color: #f0ad4e +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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) +} + +.progress-bar-danger { + background-color: #d9534f +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + 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: -moz-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) +} + +.media, .media-body { + overflow: hidden; + zoom: 1 +} + +.media, .media .media { + margin-top: 15px +} + +.media:first-child { + margin-top: 0 +} + +.media-object { + display: block +} + +.media-heading { + margin: 0 0 5px +} + +.media > .pull-left { + margin-right: 10px +} + +.media > .pull-right { + margin-left: 10px +} + +.media-list { + padding-left: 0; + list-style: none +} + +.list-group { + padding-left: 0; + margin-bottom: 20px +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px +} + +.list-group-item > .badge { + float: right +} + +.list-group-item > .badge + .badge { + margin-right: 5px +} + +a.list-group-item { + color: #555 +} + +a.list-group-item .list-group-item-heading { + color: #333 +} + +a.list-group-item:hover, a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5 +} + +.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 +} + +.list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading { + color: inherit +} + +.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 +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3 +} + +.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) +} + +.panel-body { + padding: 15px +} + +.panel-body:before, .panel-body:after { + display: table; + content: " " +} + +.panel-body:after { + clear: both +} + +.panel-body:before, .panel-body:after { + display: table; + content: " " +} + +.panel-body:after { + clear: both +} + +.panel > .list-group { + margin-bottom: 0 +} + +.panel > .list-group .list-group-item { + border-width: 1px 0 +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0 +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0 +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0 +} + +.panel > .table { + margin-bottom: 0 +} + +.panel > .panel-body + .table { + border-top: 1px solid #ddd +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px +} + +.panel-title > a { + color: inherit +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px +} + +.panel-group .panel + .panel { + margin-top: 5px +} + +.panel-group .panel-heading { + border-bottom: 0 +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #ddd +} + +.panel-group .panel-footer { + border-top: 0 +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd +} + +.panel-default { + border-color: #ddd +} + +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #ddd +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #ddd +} + +.panel-primary { + border-color: #428bca +} + +.panel-primary > .panel-heading { + color: #fff; + background-color: #428bca; + border-color: #428bca +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #428bca +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #428bca +} + +.panel-success { + border-color: #d6e9c6 +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6 +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6 +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6 +} + +.panel-warning { + border-color: #fbeed5 +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5 +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #fbeed5 +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #fbeed5 +} + +.panel-danger { + border-color: #eed3d7 +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7 +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #eed3d7 +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #eed3d7 +} + +.panel-info { + border-color: #bce8f1 +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1 +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1 +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1 +} + +.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) +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15) +} + +.well-lg { + padding: 24px; + border-radius: 6px +} + +.well-sm { + padding: 9px; + border-radius: 3px +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; + filter: alpha(opacity=20) +} + +.close:hover, .close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; + filter: alpha(opacity=50) +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +body.modal-open, .modal-open .navbar-fixed-top, .modal-open .navbar-fixed-bottom { + margin-right: 15px +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform .3s ease-out; + -moz-transition: -moz-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0) +} + +.modal-dialog { + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto +} + +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: 0; + -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 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0) +} + +.modal-backdrop.in { + opacity: .5; + filter: alpha(opacity=50) +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5 +} + +.modal-header .close { + margin-top: -2px +} + +.modal-title { + margin: 0; + line-height: 1.428571429 +} + +.modal-body { + position: relative; + padding: 20px +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5 +} + +.modal-footer:before, .modal-footer:after { + display: table; + content: " " +} + +.modal-footer:after { + clear: both +} + +.modal-footer:before, .modal-footer:after { + display: table; + content: " " +} + +.modal-footer:after { + clear: both +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0 +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 600px; + padding-top: 30px; + padding-bottom: 30px + } + + .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) + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible +} + +.tooltip.in { + opacity: .9; + filter: alpha(opacity=90) +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000; + border-width: 5px 5px 0 +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: #000; + border-width: 5px 5px 0 +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: #000; + border-width: 5px 5px 0 +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000; + border-width: 5px 5px 5px 0 +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000; + border-width: 5px 0 5px 5px +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000; + border-width: 0 5px 5px +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: #000; + border-width: 0 5px 5px +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: #000; + border-width: 0 5px 5px +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #fff; + 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); + background-clip: padding-box +} + +.popover.top { + margin-top: -10px +} + +.popover.right { + margin-left: 10px +} + +.popover.bottom { + margin-top: 10px +} + +.popover.left { + margin-left: -10px +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0 +} + +.popover-content { + padding: 9px 14px +} + +.popover .arrow, .popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid +} + +.popover .arrow { + border-width: 11px +} + +.popover .arrow:after { + border-width: 10px; + content: "" +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0 +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #fff; + border-bottom-width: 0; + content: " " +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0 +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #fff; + border-left-width: 0; + content: " " +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0 +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #fff; + border-top-width: 0; + content: " " +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0 +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #fff; + border-right-width: 0; + content: " " +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + transition: .6s ease-in-out left +} + +.carousel-inner > .item > img, .carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1 +} + +.carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { + display: block +} + +.carousel-inner > .active { + left: 0 +} + +.carousel-inner > .next, .carousel-inner > .prev { + position: absolute; + top: 0; + width: 100% +} + +.carousel-inner > .next { + left: 100% +} + +.carousel-inner > .prev { + left: -100% +} + +.carousel-inner > .next.left, .carousel-inner > .prev.right { + left: 0 +} + +.carousel-inner > .active.left { + left: -100% +} + +.carousel-inner > .active.right { + left: 100% +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: .5; + filter: alpha(opacity=50) +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-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) +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-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) +} + +.carousel-control:hover, .carousel-control:focus { + color: #fff; + text-decoration: none; + opacity: .9; + filter: alpha(opacity=90) +} + +.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block +} + +.carousel-control .icon-prev, .carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif +} + +.carousel-control .icon-prev:before { + content: '\2039' +} + +.carousel-control .icon-next:before { + content: '\203a' +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #fff; + border-radius: 10px +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + 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) +} + +.carousel-caption .btn { + text-shadow: none +} + +@media screen and (min-width: 768px) { + .carousel-control .icon-prev, .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px + } + + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px + } + + .carousel-indicators { + bottom: 20px + } +} + +.clearfix:before, .clearfix:after { + display: table; + content: " " +} + +.clearfix:after { + clear: both +} + +.pull-right { + float: right !important +} + +.pull-left { + float: left !important +} + +.hide { + display: none !important +} + +.show { + display: block !important +} + +.invisible { + visibility: hidden +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.affix { + position: fixed +} + +@-ms-viewport { + width: device-width +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px + } +} + +.hidden { + display: none !important; + visibility: hidden !important +} + +.visible-xs { + display: none !important +} + +tr.visible-xs { + display: none !important +} + +th.visible-xs, td.visible-xs { + display: none !important +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important + } + + tr.visible-xs { + display: table-row !important + } + + th.visible-xs, td.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important + } + + tr.visible-xs.visible-sm { + display: table-row !important + } + + th.visible-xs.visible-sm, td.visible-xs.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important + } + + tr.visible-xs.visible-md { + display: table-row !important + } + + th.visible-xs.visible-md, td.visible-xs.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important + } + + tr.visible-xs.visible-lg { + display: table-row !important + } + + th.visible-xs.visible-lg, td.visible-xs.visible-lg { + display: table-cell !important + } +} + +.visible-sm { + display: none !important +} + +tr.visible-sm { + display: none !important +} + +th.visible-sm, td.visible-sm { + display: none !important +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important + } + + tr.visible-sm.visible-xs { + display: table-row !important + } + + th.visible-sm.visible-xs, td.visible-sm.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important + } + + tr.visible-sm { + display: table-row !important + } + + th.visible-sm, td.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important + } + + tr.visible-sm.visible-md { + display: table-row !important + } + + th.visible-sm.visible-md, td.visible-sm.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important + } + + tr.visible-sm.visible-lg { + display: table-row !important + } + + th.visible-sm.visible-lg, td.visible-sm.visible-lg { + display: table-cell !important + } +} + +.visible-md { + display: none !important +} + +tr.visible-md { + display: none !important +} + +th.visible-md, td.visible-md { + display: none !important +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important + } + + tr.visible-md.visible-xs { + display: table-row !important + } + + th.visible-md.visible-xs, td.visible-md.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important + } + + tr.visible-md.visible-sm { + display: table-row !important + } + + th.visible-md.visible-sm, td.visible-md.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important + } + + tr.visible-md { + display: table-row !important + } + + th.visible-md, td.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important + } + + tr.visible-md.visible-lg { + display: table-row !important + } + + th.visible-md.visible-lg, td.visible-md.visible-lg { + display: table-cell !important + } +} + +.visible-lg { + display: none !important +} + +tr.visible-lg { + display: none !important +} + +th.visible-lg, td.visible-lg { + display: none !important +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important + } + + tr.visible-lg.visible-xs { + display: table-row !important + } + + th.visible-lg.visible-xs, td.visible-lg.visible-xs { + display: table-cell !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important + } + + tr.visible-lg.visible-sm { + display: table-row !important + } + + th.visible-lg.visible-sm, td.visible-lg.visible-sm { + display: table-cell !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important + } + + tr.visible-lg.visible-md { + display: table-row !important + } + + th.visible-lg.visible-md, td.visible-lg.visible-md { + display: table-cell !important + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important + } + + tr.visible-lg { + display: table-row !important + } + + th.visible-lg, td.visible-lg { + display: table-cell !important + } +} + +.hidden-xs { + display: block !important +} + +tr.hidden-xs { + display: table-row !important +} + +th.hidden-xs, td.hidden-xs { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important + } + + tr.hidden-xs { + display: none !important + } + + th.hidden-xs, td.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important + } + + tr.hidden-xs.hidden-sm { + display: none !important + } + + th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important + } + + tr.hidden-xs.hidden-md { + display: none !important + } + + th.hidden-xs.hidden-md, td.hidden-xs.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important + } + + tr.hidden-xs.hidden-lg { + display: none !important + } + + th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg { + display: none !important + } +} + +.hidden-sm { + display: block !important +} + +tr.hidden-sm { + display: table-row !important +} + +th.hidden-sm, td.hidden-sm { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important + } + + tr.hidden-sm.hidden-xs { + display: none !important + } + + th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important + } + + tr.hidden-sm { + display: none !important + } + + th.hidden-sm, td.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important + } + + tr.hidden-sm.hidden-md { + display: none !important + } + + th.hidden-sm.hidden-md, td.hidden-sm.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important + } + + tr.hidden-sm.hidden-lg { + display: none !important + } + + th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg { + display: none !important + } +} + +.hidden-md { + display: block !important +} + +tr.hidden-md { + display: table-row !important +} + +th.hidden-md, td.hidden-md { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important + } + + tr.hidden-md.hidden-xs { + display: none !important + } + + th.hidden-md.hidden-xs, td.hidden-md.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important + } + + tr.hidden-md.hidden-sm { + display: none !important + } + + th.hidden-md.hidden-sm, td.hidden-md.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important + } + + tr.hidden-md { + display: none !important + } + + th.hidden-md, td.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important + } + + tr.hidden-md.hidden-lg { + display: none !important + } + + th.hidden-md.hidden-lg, td.hidden-md.hidden-lg { + display: none !important + } +} + +.hidden-lg { + display: block !important +} + +tr.hidden-lg { + display: table-row !important +} + +th.hidden-lg, td.hidden-lg { + display: table-cell !important +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important + } + + tr.hidden-lg.hidden-xs { + display: none !important + } + + th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs { + display: none !important + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important + } + + tr.hidden-lg.hidden-sm { + display: none !important + } + + th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm { + display: none !important + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important + } + + tr.hidden-lg.hidden-md { + display: none !important + } + + th.hidden-lg.hidden-md, td.hidden-lg.hidden-md { + display: none !important + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important + } + + tr.hidden-lg { + display: none !important + } + + th.hidden-lg, td.hidden-lg { + display: none !important + } +} + +.visible-print { + display: none !important +} + +tr.visible-print { + display: none !important +} + +th.visible-print, td.visible-print { + display: none !important +} + +@media print { + .visible-print { + display: block !important + } + + tr.visible-print { + display: table-row !important + } + + th.visible-print, td.visible-print { + display: table-cell !important + } + + .hidden-print { + display: none !important + } + + tr.hidden-print { + display: none !important + } + + th.hidden-print, td.hidden-print { + display: none !important + } +} \ No newline at end of file diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/alerts.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/alerts.less new file mode 100644 index 0000000..c4199db --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/alerts.less @@ -0,0 +1,73 @@ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- + +.alert { + padding: @alert-padding; + margin-bottom: @line-height-computed; + border: 1px solid transparent; + border-radius: @alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing @headings-color + color: inherit; + } + + // Provide class for links that match alerts + .alert-link { + font-weight: @alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + + > p + p { + margin-top: 5px; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + padding-right: (@alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); +} + +.alert-info { + .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); +} + +.alert-warning { + .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); +} + +.alert-danger { + .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/badges.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/badges.less new file mode 100644 index 0000000..6ee16dc --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/badges.less @@ -0,0 +1,66 @@ +// +// Badges +// -------------------------------------------------- + + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: @font-size-small; + font-weight: @badge-font-weight; + color: @badge-color; + line-height: @badge-line-height; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: @badge-bg; + border-radius: @badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + + .btn-xs &, + .btn-group-xs > .btn & { + top: 0; + padding: 1px 5px; + } + + // Hover state, but only for links + a& { + &:hover, + &:focus { + color: @badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Account for badges in navs + .list-group-item.active > &, + .nav-pills > .active > a > & { + color: @badge-active-color; + background-color: @badge-active-bg; + } + + .list-group-item > & { + float: right; + } + + .list-group-item > & + & { + margin-right: 5px; + } + + .nav-pills > li > a > & { + margin-left: 3px; + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/bootstrap.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/bootstrap.less new file mode 100644 index 0000000..4b9916e --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/bootstrap.less @@ -0,0 +1,56 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// Core variables and mixins +@import "variables.less"; +@import "mixins.less"; + +// Reset and dependencies +@import "normalize.less"; +@import "print.less"; +@import "glyphicons.less"; + +// Core CSS +@import "scaffolding.less"; +@import "type.less"; +@import "code.less"; +@import "grid.less"; +@import "tables.less"; +@import "forms.less"; +@import "buttons.less"; + +// Components +@import "component-animations.less"; +@import "dropdowns.less"; +@import "button-groups.less"; +@import "input-groups.less"; +@import "navs.less"; +@import "navbar.less"; +@import "breadcrumbs.less"; +@import "pagination.less"; +@import "pager.less"; +@import "labels.less"; +@import "badges.less"; +@import "jumbotron.less"; +@import "thumbnails.less"; +@import "alerts.less"; +@import "progress-bars.less"; +@import "media.less"; +@import "list-group.less"; +@import "panels.less"; +@import "responsive-embed.less"; +@import "wells.less"; +@import "close.less"; + +// Components w/ JavaScript +@import "modals.less"; +@import "tooltip.less"; +@import "popovers.less"; +@import "carousel.less"; + +// Utility classes +@import "utilities.less"; +@import "responsive-utilities.less"; diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/breadcrumbs.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/breadcrumbs.less new file mode 100644 index 0000000..cb01d50 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/breadcrumbs.less @@ -0,0 +1,26 @@ +// +// Breadcrumbs +// -------------------------------------------------- + + +.breadcrumb { + padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; + margin-bottom: @line-height-computed; + list-style: none; + background-color: @breadcrumb-bg; + border-radius: @border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: @breadcrumb-color; + } + } + + > .active { + color: @breadcrumb-active-color; + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/button-groups.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/button-groups.less new file mode 100644 index 0000000..6a0c5a8 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/button-groups.less @@ -0,0 +1,244 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + &:extend(.clearfix all); + + .btn, + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + .border-right-radius(0); + } +} +// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + .border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-right-radius(0); + } +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { &:extend(.btn-xs); } +.btn-group-sm > .btn { &:extend(.btn-sm); } +.btn-group-lg > .btn { &:extend(.btn-lg); } + + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + .box-shadow(none); + } +} + + +// Reposition the caret +.btn .caret { + margin-left: 0; +} +// Carets in other button sizes +.btn-lg .caret { + border-width: @caret-width-large @caret-width-large 0; + border-bottom-width: 0; +} +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 @caret-width-large @caret-width-large; +} + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + &:extend(.clearfix all); + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + border-top-right-radius: @btn-border-radius-base; + .border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: @btn-border-radius-base; + .border-top-radius(0); + } +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + .border-bottom-radius(0); + } +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + .border-top-radius(0); +} + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use +// `display: none;` or `visibility: hidden;` as that also hides the popover. +// Simply visually hiding the inputs via `opacity` would leave them clickable in +// certain cases which is prevented by using `clip` and `pointer-events`. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 and +// https://github.com/twbs/bootstrap/pull/14559 for more information. + +[data-toggle="buttons"] { + > .btn, + > .btn-group > .btn { + input[type="radio"], + input[type="checkbox"] { + position: absolute; + clip: rect(0,0,0,0); + pointer-events: none; + } + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/buttons.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/buttons.less new file mode 100644 index 0000000..9cbb8f4 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/buttons.less @@ -0,0 +1,166 @@ +// +// Buttons +// -------------------------------------------------- + + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: @btn-font-weight; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base); + .user-select(none); + + &, + &:active, + &.active { + &:focus, + &.focus { + .tab-focus(); + } + } + + &:hover, + &:focus, + &.focus { + color: @btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: @cursor-disabled; + .opacity(.65); + .box-shadow(none); + } + + a& { + &.disabled, + fieldset[disabled] & { + pointer-events: none; // Future-proof disabling of clicks on `` elements + } + } +} + + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); +} +.btn-primary { + .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); +} +// Success appears as green +.btn-success { + .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); +} +// Info appears as blue-green +.btn-info { + .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); +} +// Warning appears as orange +.btn-warning { + .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); +} +// Danger and error appear as red +.btn-danger { + .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); +} + + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: @link-color; + font-weight: normal; + border-radius: 0; + + &, + &:active, + &.active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + .box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: @link-hover-decoration; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @btn-link-disabled-color; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large); +} +.btn-sm { + // line-height: ensure proper height of button next to small input + .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); +} +.btn-xs { + .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small); +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/carousel.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/carousel.less new file mode 100644 index 0000000..87ed696 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/carousel.less @@ -0,0 +1,269 @@ +// +// Carousel +// -------------------------------------------------- + + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + .transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + &:extend(.img-responsive); + line-height: 1; + } + + // WebKit CSS3 transforms for supported devices + @media all and (transform-3d), (-webkit-transform-3d) { + .transition-transform(~'0.6s ease-in-out'); + .backface-visibility(~'hidden'); + .perspective(1000px); + + &.next, + &.active.right { + .translate3d(100%, 0, 0); + left: 0; + } + &.prev, + &.active.left { + .translate3d(-100%, 0, 0); + left: 0; + } + &.next.left, + &.prev.right, + &.active { + .translate3d(0, 0, 0); + left: 0; + } + } + } + + > .active, + > .next, + > .prev { + display: block; + } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: @carousel-control-width; + .opacity(@carousel-control-opacity); + font-size: @carousel-control-font-size; + color: @carousel-control-color; + text-align: center; + text-shadow: @carousel-text-shadow; + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); + } + &.right { + left: auto; + right: 0; + #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: @carousel-control-color; + text-decoration: none; + .opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; + } + + + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.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; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid @carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0,0,0,0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: @carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: @carousel-caption-color; + text-align: center; + text-shadow: @carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + + +// Scale up controls for tablets and up +@media screen and (min-width: @screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: -15px; + } + .glyphicon-chevron-right, + .icon-next { + margin-right: -15px; + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/close.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/close.less new file mode 100644 index 0000000..6d5bfe0 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/close.less @@ -0,0 +1,34 @@ +// +// Close icons +// -------------------------------------------------- + + +.close { + float: right; + font-size: (@font-size-base * 1.5); + font-weight: @close-font-weight; + line-height: 1; + color: @close-color; + text-shadow: @close-text-shadow; + .opacity(.2); + + &:hover, + &:focus { + color: @close-color; + text-decoration: none; + cursor: pointer; + .opacity(.5); + } + + // Additional properties for button version + // iOS requires the button element instead of an anchor tag. + // If you want the anchor version, it requires `href="#"`. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + button& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/code.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/code.less new file mode 100644 index 0000000..a08b4d4 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/code.less @@ -0,0 +1,69 @@ +// +// Code (inline and block) +// -------------------------------------------------- + + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: @font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: @code-color; + background-color: @code-bg; + border-radius: @border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: @kbd-color; + background-color: @kbd-bg; + border-radius: @border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + + kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; + } +} + +// Blocks of code +pre { + display: block; + padding: ((@line-height-computed - 1) / 2); + margin: 0 0 (@line-height-computed / 2); + font-size: (@font-size-base - 1); // 14px to 13px + line-height: @line-height-base; + word-break: break-all; + word-wrap: break-word; + color: @pre-color; + background-color: @pre-bg; + border: 1px solid @pre-border-color; + border-radius: @border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: @pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/component-animations.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/component-animations.less new file mode 100644 index 0000000..0bcee91 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/component-animations.less @@ -0,0 +1,33 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + .transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { display: block; } + tr&.in { display: table-row; } + tbody&.in { display: table-row-group; } +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + .transition-property(~"height, visibility"); + .transition-duration(.35s); + .transition-timing-function(ease); +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/dropdowns.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/dropdowns.less new file mode 100644 index 0000000..f6876c1 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/dropdowns.less @@ -0,0 +1,216 @@ +// +// Dropdown menus +// -------------------------------------------------- + + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: @caret-width-base dashed; + border-top: @caret-width-base solid ~"\9"; // IE8 + border-right: @caret-width-base solid transparent; + border-left: @caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropup, +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: @zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: @font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: @dropdown-bg; + border: 1px solid @dropdown-fallback-border; // IE8 fallback + border: 1px solid @dropdown-border; + border-radius: @border-radius-base; + .box-shadow(0 6px 12px rgba(0,0,0,.175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + .nav-divider(@dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: @line-height-base; + color: @dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: @dropdown-link-hover-color; + background-color: @dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: @dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: @dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: @dropdown-link-disabled-color; + } + + // Nuke hover/focus effects + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + .reset-filter(); + cursor: @cursor-disabled; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: @font-size-small; + line-height: @line-height-base; + color: @dropdown-header-color; + white-space: nowrap; // as with > li > a +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: (@zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: @caret-width-base dashed; + border-bottom: @caret-width-base solid ~"\9"; // IE8 + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; + } +} + + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: @grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + .dropdown-menu-right(); + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + .dropdown-menu-left(); + } + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/forms.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/forms.less new file mode 100644 index 0000000..b064ede --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/forms.less @@ -0,0 +1,607 @@ +// +// Forms +// -------------------------------------------------- + + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); + line-height: inherit; + color: @legend-color; + border: 0; + border-bottom: 1px solid @legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + .box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + .tab-focus(); +} + +// Adjust output element +output { + display: block; + padding-top: (@padding-base-vertical + 1); + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; +} + + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// 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"] + +.form-control { + display: block; + width: 100%; + height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + line-height: @line-height-base; + color: @input-color; + background-color: @input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid @input-border; + border-radius: @input-border-radius; // Note: This has no effect on s in CSS. + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); + + // Customize the `:focus` state to imitate native WebKit styles. + .form-control-focus(); + + // Placeholder + .placeholder(); + + // Disabled and read-only inputs + // + // HTML5 says that controls under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, we + // don't honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + background-color: @input-bg-disabled; + opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655 + } + + &[disabled], + fieldset[disabled] & { + cursor: @cursor-disabled; + } + + // Reset height for `textarea`s + textarea& { + height: auto; + } +} + + +// Search inputs in iOS +// +// This overrides the extra rounded corners on search inputs in iOS so that our +// `.form-control` class can properly style them. Note that this cannot simply +// be added to `.form-control` as it's not specific enough. For details, see +// https://github.com/twbs/bootstrap/issues/11586. + +input[type="search"] { + -webkit-appearance: none; +} + + +// Special styles for iOS temporal inputs +// +// In Mobile Safari, setting `display: block` on temporal inputs causes the +// text within the input to become vertically misaligned. As a workaround, we +// set a pixel line-height that matches the given height of the input, but only +// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848 +// +// Note that as of 8.3, iOS doesn't support `datetime` or `week`. + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + &.form-control { + line-height: @input-height-base; + } + + &.input-sm, + .input-group-sm & { + line-height: @input-height-small; + } + + &.input-lg, + .input-group-lg & { + line-height: @input-height-large; + } + } +} + + +// Form groups +// +// Designed to help with the organization and spacing of vertical forms. For +// horizontal forms, use the predefined grid classes. + +.form-group { + margin-bottom: @form-group-margin-bottom; +} + + +// Checkboxes and radios +// +// Indent the labels to position radios/checkboxes as hanging controls. + +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; + + label { + min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } +} +.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; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing +} + +// Radios and checkboxes on same line +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; // space out consecutive inline controls +} + +// Apply same disabled cursor tweak as for inputs +// Some special care is needed because Star + +// Import the fonts +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('@{icon-font-path}@{icon-font-name}.eot'); + src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'), + url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'), + url('@{icon-font-path}@{icon-font-name}.woff') format('woff'), + url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'), + url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg'); +} + +// Catchall baseclass +.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; +} + +// Individual icons +.glyphicon-asterisk { &:before { content: "\2a"; } } +.glyphicon-plus { &:before { content: "\2b"; } } +.glyphicon-euro, +.glyphicon-eur { &:before { content: "\20ac"; } } +.glyphicon-minus { &:before { content: "\2212"; } } +.glyphicon-cloud { &:before { content: "\2601"; } } +.glyphicon-envelope { &:before { content: "\2709"; } } +.glyphicon-pencil { &:before { content: "\270f"; } } +.glyphicon-glass { &:before { content: "\e001"; } } +.glyphicon-music { &:before { content: "\e002"; } } +.glyphicon-search { &:before { content: "\e003"; } } +.glyphicon-heart { &:before { content: "\e005"; } } +.glyphicon-star { &:before { content: "\e006"; } } +.glyphicon-star-empty { &:before { content: "\e007"; } } +.glyphicon-user { &:before { content: "\e008"; } } +.glyphicon-film { &:before { content: "\e009"; } } +.glyphicon-th-large { &:before { content: "\e010"; } } +.glyphicon-th { &:before { content: "\e011"; } } +.glyphicon-th-list { &:before { content: "\e012"; } } +.glyphicon-ok { &:before { content: "\e013"; } } +.glyphicon-remove { &:before { content: "\e014"; } } +.glyphicon-zoom-in { &:before { content: "\e015"; } } +.glyphicon-zoom-out { &:before { content: "\e016"; } } +.glyphicon-off { &:before { content: "\e017"; } } +.glyphicon-signal { &:before { content: "\e018"; } } +.glyphicon-cog { &:before { content: "\e019"; } } +.glyphicon-trash { &:before { content: "\e020"; } } +.glyphicon-home { &:before { content: "\e021"; } } +.glyphicon-file { &:before { content: "\e022"; } } +.glyphicon-time { &:before { content: "\e023"; } } +.glyphicon-road { &:before { content: "\e024"; } } +.glyphicon-download-alt { &:before { content: "\e025"; } } +.glyphicon-download { &:before { content: "\e026"; } } +.glyphicon-upload { &:before { content: "\e027"; } } +.glyphicon-inbox { &:before { content: "\e028"; } } +.glyphicon-play-circle { &:before { content: "\e029"; } } +.glyphicon-repeat { &:before { content: "\e030"; } } +.glyphicon-refresh { &:before { content: "\e031"; } } +.glyphicon-list-alt { &:before { content: "\e032"; } } +.glyphicon-lock { &:before { content: "\e033"; } } +.glyphicon-flag { &:before { content: "\e034"; } } +.glyphicon-headphones { &:before { content: "\e035"; } } +.glyphicon-volume-off { &:before { content: "\e036"; } } +.glyphicon-volume-down { &:before { content: "\e037"; } } +.glyphicon-volume-up { &:before { content: "\e038"; } } +.glyphicon-qrcode { &:before { content: "\e039"; } } +.glyphicon-barcode { &:before { content: "\e040"; } } +.glyphicon-tag { &:before { content: "\e041"; } } +.glyphicon-tags { &:before { content: "\e042"; } } +.glyphicon-book { &:before { content: "\e043"; } } +.glyphicon-bookmark { &:before { content: "\e044"; } } +.glyphicon-print { &:before { content: "\e045"; } } +.glyphicon-camera { &:before { content: "\e046"; } } +.glyphicon-font { &:before { content: "\e047"; } } +.glyphicon-bold { &:before { content: "\e048"; } } +.glyphicon-italic { &:before { content: "\e049"; } } +.glyphicon-text-height { &:before { content: "\e050"; } } +.glyphicon-text-width { &:before { content: "\e051"; } } +.glyphicon-align-left { &:before { content: "\e052"; } } +.glyphicon-align-center { &:before { content: "\e053"; } } +.glyphicon-align-right { &:before { content: "\e054"; } } +.glyphicon-align-justify { &:before { content: "\e055"; } } +.glyphicon-list { &:before { content: "\e056"; } } +.glyphicon-indent-left { &:before { content: "\e057"; } } +.glyphicon-indent-right { &:before { content: "\e058"; } } +.glyphicon-facetime-video { &:before { content: "\e059"; } } +.glyphicon-picture { &:before { content: "\e060"; } } +.glyphicon-map-marker { &:before { content: "\e062"; } } +.glyphicon-adjust { &:before { content: "\e063"; } } +.glyphicon-tint { &:before { content: "\e064"; } } +.glyphicon-edit { &:before { content: "\e065"; } } +.glyphicon-share { &:before { content: "\e066"; } } +.glyphicon-check { &:before { content: "\e067"; } } +.glyphicon-move { &:before { content: "\e068"; } } +.glyphicon-step-backward { &:before { content: "\e069"; } } +.glyphicon-fast-backward { &:before { content: "\e070"; } } +.glyphicon-backward { &:before { content: "\e071"; } } +.glyphicon-play { &:before { content: "\e072"; } } +.glyphicon-pause { &:before { content: "\e073"; } } +.glyphicon-stop { &:before { content: "\e074"; } } +.glyphicon-forward { &:before { content: "\e075"; } } +.glyphicon-fast-forward { &:before { content: "\e076"; } } +.glyphicon-step-forward { &:before { content: "\e077"; } } +.glyphicon-eject { &:before { content: "\e078"; } } +.glyphicon-chevron-left { &:before { content: "\e079"; } } +.glyphicon-chevron-right { &:before { content: "\e080"; } } +.glyphicon-plus-sign { &:before { content: "\e081"; } } +.glyphicon-minus-sign { &:before { content: "\e082"; } } +.glyphicon-remove-sign { &:before { content: "\e083"; } } +.glyphicon-ok-sign { &:before { content: "\e084"; } } +.glyphicon-question-sign { &:before { content: "\e085"; } } +.glyphicon-info-sign { &:before { content: "\e086"; } } +.glyphicon-screenshot { &:before { content: "\e087"; } } +.glyphicon-remove-circle { &:before { content: "\e088"; } } +.glyphicon-ok-circle { &:before { content: "\e089"; } } +.glyphicon-ban-circle { &:before { content: "\e090"; } } +.glyphicon-arrow-left { &:before { content: "\e091"; } } +.glyphicon-arrow-right { &:before { content: "\e092"; } } +.glyphicon-arrow-up { &:before { content: "\e093"; } } +.glyphicon-arrow-down { &:before { content: "\e094"; } } +.glyphicon-share-alt { &:before { content: "\e095"; } } +.glyphicon-resize-full { &:before { content: "\e096"; } } +.glyphicon-resize-small { &:before { content: "\e097"; } } +.glyphicon-exclamation-sign { &:before { content: "\e101"; } } +.glyphicon-gift { &:before { content: "\e102"; } } +.glyphicon-leaf { &:before { content: "\e103"; } } +.glyphicon-fire { &:before { content: "\e104"; } } +.glyphicon-eye-open { &:before { content: "\e105"; } } +.glyphicon-eye-close { &:before { content: "\e106"; } } +.glyphicon-warning-sign { &:before { content: "\e107"; } } +.glyphicon-plane { &:before { content: "\e108"; } } +.glyphicon-calendar { &:before { content: "\e109"; } } +.glyphicon-random { &:before { content: "\e110"; } } +.glyphicon-comment { &:before { content: "\e111"; } } +.glyphicon-magnet { &:before { content: "\e112"; } } +.glyphicon-chevron-up { &:before { content: "\e113"; } } +.glyphicon-chevron-down { &:before { content: "\e114"; } } +.glyphicon-retweet { &:before { content: "\e115"; } } +.glyphicon-shopping-cart { &:before { content: "\e116"; } } +.glyphicon-folder-close { &:before { content: "\e117"; } } +.glyphicon-folder-open { &:before { content: "\e118"; } } +.glyphicon-resize-vertical { &:before { content: "\e119"; } } +.glyphicon-resize-horizontal { &:before { content: "\e120"; } } +.glyphicon-hdd { &:before { content: "\e121"; } } +.glyphicon-bullhorn { &:before { content: "\e122"; } } +.glyphicon-bell { &:before { content: "\e123"; } } +.glyphicon-certificate { &:before { content: "\e124"; } } +.glyphicon-thumbs-up { &:before { content: "\e125"; } } +.glyphicon-thumbs-down { &:before { content: "\e126"; } } +.glyphicon-hand-right { &:before { content: "\e127"; } } +.glyphicon-hand-left { &:before { content: "\e128"; } } +.glyphicon-hand-up { &:before { content: "\e129"; } } +.glyphicon-hand-down { &:before { content: "\e130"; } } +.glyphicon-circle-arrow-right { &:before { content: "\e131"; } } +.glyphicon-circle-arrow-left { &:before { content: "\e132"; } } +.glyphicon-circle-arrow-up { &:before { content: "\e133"; } } +.glyphicon-circle-arrow-down { &:before { content: "\e134"; } } +.glyphicon-globe { &:before { content: "\e135"; } } +.glyphicon-wrench { &:before { content: "\e136"; } } +.glyphicon-tasks { &:before { content: "\e137"; } } +.glyphicon-filter { &:before { content: "\e138"; } } +.glyphicon-briefcase { &:before { content: "\e139"; } } +.glyphicon-fullscreen { &:before { content: "\e140"; } } +.glyphicon-dashboard { &:before { content: "\e141"; } } +.glyphicon-paperclip { &:before { content: "\e142"; } } +.glyphicon-heart-empty { &:before { content: "\e143"; } } +.glyphicon-link { &:before { content: "\e144"; } } +.glyphicon-phone { &:before { content: "\e145"; } } +.glyphicon-pushpin { &:before { content: "\e146"; } } +.glyphicon-usd { &:before { content: "\e148"; } } +.glyphicon-gbp { &:before { content: "\e149"; } } +.glyphicon-sort { &:before { content: "\e150"; } } +.glyphicon-sort-by-alphabet { &:before { content: "\e151"; } } +.glyphicon-sort-by-alphabet-alt { &:before { content: "\e152"; } } +.glyphicon-sort-by-order { &:before { content: "\e153"; } } +.glyphicon-sort-by-order-alt { &:before { content: "\e154"; } } +.glyphicon-sort-by-attributes { &:before { content: "\e155"; } } +.glyphicon-sort-by-attributes-alt { &:before { content: "\e156"; } } +.glyphicon-unchecked { &:before { content: "\e157"; } } +.glyphicon-expand { &:before { content: "\e158"; } } +.glyphicon-collapse-down { &:before { content: "\e159"; } } +.glyphicon-collapse-up { &:before { content: "\e160"; } } +.glyphicon-log-in { &:before { content: "\e161"; } } +.glyphicon-flash { &:before { content: "\e162"; } } +.glyphicon-log-out { &:before { content: "\e163"; } } +.glyphicon-new-window { &:before { content: "\e164"; } } +.glyphicon-record { &:before { content: "\e165"; } } +.glyphicon-save { &:before { content: "\e166"; } } +.glyphicon-open { &:before { content: "\e167"; } } +.glyphicon-saved { &:before { content: "\e168"; } } +.glyphicon-import { &:before { content: "\e169"; } } +.glyphicon-export { &:before { content: "\e170"; } } +.glyphicon-send { &:before { content: "\e171"; } } +.glyphicon-floppy-disk { &:before { content: "\e172"; } } +.glyphicon-floppy-saved { &:before { content: "\e173"; } } +.glyphicon-floppy-remove { &:before { content: "\e174"; } } +.glyphicon-floppy-save { &:before { content: "\e175"; } } +.glyphicon-floppy-open { &:before { content: "\e176"; } } +.glyphicon-credit-card { &:before { content: "\e177"; } } +.glyphicon-transfer { &:before { content: "\e178"; } } +.glyphicon-cutlery { &:before { content: "\e179"; } } +.glyphicon-header { &:before { content: "\e180"; } } +.glyphicon-compressed { &:before { content: "\e181"; } } +.glyphicon-earphone { &:before { content: "\e182"; } } +.glyphicon-phone-alt { &:before { content: "\e183"; } } +.glyphicon-tower { &:before { content: "\e184"; } } +.glyphicon-stats { &:before { content: "\e185"; } } +.glyphicon-sd-video { &:before { content: "\e186"; } } +.glyphicon-hd-video { &:before { content: "\e187"; } } +.glyphicon-subtitles { &:before { content: "\e188"; } } +.glyphicon-sound-stereo { &:before { content: "\e189"; } } +.glyphicon-sound-dolby { &:before { content: "\e190"; } } +.glyphicon-sound-5-1 { &:before { content: "\e191"; } } +.glyphicon-sound-6-1 { &:before { content: "\e192"; } } +.glyphicon-sound-7-1 { &:before { content: "\e193"; } } +.glyphicon-copyright-mark { &:before { content: "\e194"; } } +.glyphicon-registration-mark { &:before { content: "\e195"; } } +.glyphicon-cloud-download { &:before { content: "\e197"; } } +.glyphicon-cloud-upload { &:before { content: "\e198"; } } +.glyphicon-tree-conifer { &:before { content: "\e199"; } } +.glyphicon-tree-deciduous { &:before { content: "\e200"; } } +.glyphicon-cd { &:before { content: "\e201"; } } +.glyphicon-save-file { &:before { content: "\e202"; } } +.glyphicon-open-file { &:before { content: "\e203"; } } +.glyphicon-level-up { &:before { content: "\e204"; } } +.glyphicon-copy { &:before { content: "\e205"; } } +.glyphicon-paste { &:before { content: "\e206"; } } +// The following 2 Glyphicons are omitted for the time being because +// they currently use Unicode codepoints that are outside the +// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle +// non-BMP codepoints in CSS string escapes, and thus can't display these two icons. +// Notably, the bug affects some older versions of the Android Browser. +// More info: https://github.com/twbs/bootstrap/issues/10106 +// .glyphicon-door { &:before { content: "\1f6aa"; } } +// .glyphicon-key { &:before { content: "\1f511"; } } +.glyphicon-alert { &:before { content: "\e209"; } } +.glyphicon-equalizer { &:before { content: "\e210"; } } +.glyphicon-king { &:before { content: "\e211"; } } +.glyphicon-queen { &:before { content: "\e212"; } } +.glyphicon-pawn { &:before { content: "\e213"; } } +.glyphicon-bishop { &:before { content: "\e214"; } } +.glyphicon-knight { &:before { content: "\e215"; } } +.glyphicon-baby-formula { &:before { content: "\e216"; } } +.glyphicon-tent { &:before { content: "\26fa"; } } +.glyphicon-blackboard { &:before { content: "\e218"; } } +.glyphicon-bed { &:before { content: "\e219"; } } +.glyphicon-apple { &:before { content: "\f8ff"; } } +.glyphicon-erase { &:before { content: "\e221"; } } +.glyphicon-hourglass { &:before { content: "\231b"; } } +.glyphicon-lamp { &:before { content: "\e223"; } } +.glyphicon-duplicate { &:before { content: "\e224"; } } +.glyphicon-piggy-bank { &:before { content: "\e225"; } } +.glyphicon-scissors { &:before { content: "\e226"; } } +.glyphicon-bitcoin { &:before { content: "\e227"; } } +.glyphicon-btc { &:before { content: "\e227"; } } +.glyphicon-xbt { &:before { content: "\e227"; } } +.glyphicon-yen { &:before { content: "\00a5"; } } +.glyphicon-jpy { &:before { content: "\00a5"; } } +.glyphicon-ruble { &:before { content: "\20bd"; } } +.glyphicon-rub { &:before { content: "\20bd"; } } +.glyphicon-scale { &:before { content: "\e230"; } } +.glyphicon-ice-lolly { &:before { content: "\e231"; } } +.glyphicon-ice-lolly-tasted { &:before { content: "\e232"; } } +.glyphicon-education { &:before { content: "\e233"; } } +.glyphicon-option-horizontal { &:before { content: "\e234"; } } +.glyphicon-option-vertical { &:before { content: "\e235"; } } +.glyphicon-menu-hamburger { &:before { content: "\e236"; } } +.glyphicon-modal-window { &:before { content: "\e237"; } } +.glyphicon-oil { &:before { content: "\e238"; } } +.glyphicon-grain { &:before { content: "\e239"; } } +.glyphicon-sunglasses { &:before { content: "\e240"; } } +.glyphicon-text-size { &:before { content: "\e241"; } } +.glyphicon-text-color { &:before { content: "\e242"; } } +.glyphicon-text-background { &:before { content: "\e243"; } } +.glyphicon-object-align-top { &:before { content: "\e244"; } } +.glyphicon-object-align-bottom { &:before { content: "\e245"; } } +.glyphicon-object-align-horizontal{ &:before { content: "\e246"; } } +.glyphicon-object-align-left { &:before { content: "\e247"; } } +.glyphicon-object-align-vertical { &:before { content: "\e248"; } } +.glyphicon-object-align-right { &:before { content: "\e249"; } } +.glyphicon-triangle-right { &:before { content: "\e250"; } } +.glyphicon-triangle-left { &:before { content: "\e251"; } } +.glyphicon-triangle-bottom { &:before { content: "\e252"; } } +.glyphicon-triangle-top { &:before { content: "\e253"; } } +.glyphicon-console { &:before { content: "\e254"; } } +.glyphicon-superscript { &:before { content: "\e255"; } } +.glyphicon-subscript { &:before { content: "\e256"; } } +.glyphicon-menu-left { &:before { content: "\e257"; } } +.glyphicon-menu-right { &:before { content: "\e258"; } } +.glyphicon-menu-down { &:before { content: "\e259"; } } +.glyphicon-menu-up { &:before { content: "\e260"; } } diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/grid.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/grid.less new file mode 100644 index 0000000..e100655 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/grid.less @@ -0,0 +1,84 @@ +// +// Grid system +// -------------------------------------------------- + + +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +.container { + .container-fixed(); + + @media (min-width: @screen-sm-min) { + width: @container-sm; + } + @media (min-width: @screen-md-min) { + width: @container-md; + } + @media (min-width: @screen-lg-min) { + width: @container-lg; + } +} + + +// Fluid container +// +// Utilizes the mixin meant for fixed width containers, but without any defined +// width for fluid, full width layouts. + +.container-fluid { + .container-fixed(); +} + + +// Row +// +// Rows contain and clear the floats of your columns. + +.row { + .make-row(); +} + + +// Columns +// +// Common styles for small and large grid columns + +.make-grid-columns(); + + +// Extra small grid +// +// Columns, offsets, pushes, and pulls for extra small devices like +// smartphones. + +.make-grid(xs); + + +// Small grid +// +// Columns, offsets, pushes, and pulls for the small device range, from phones +// to tablets. + +@media (min-width: @screen-sm-min) { + .make-grid(sm); +} + + +// Medium grid +// +// Columns, offsets, pushes, and pulls for the desktop device range. + +@media (min-width: @screen-md-min) { + .make-grid(md); +} + + +// Large grid +// +// Columns, offsets, pushes, and pulls for the large desktop device range. + +@media (min-width: @screen-lg-min) { + .make-grid(lg); +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/input-groups.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/input-groups.less new file mode 100644 index 0000000..457ea60 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/input-groups.less @@ -0,0 +1,167 @@ +// +// Input groups +// -------------------------------------------------- + +// Base styles +// ------------------------- +.input-group { + position: relative; // For dropdowns + display: table; + border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table + + // Undo padding and float of grid classes + &[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; + } + + .form-control { + // Ensure that the input is always above the *appended* addon button for + // proper border colors. + position: relative; + z-index: 2; + + // IE9 fubars the placeholder attribute in text inputs and the arrows on + // select elements in input groups. To fix it, we float the input. Details: + // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 + float: left; + + width: 100%; + margin-bottom: 0; + } +} + +// Sizing options +// +// Remix the default form control sizing classes into new ones for easier +// manipulation. + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + .input-lg(); +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + .input-sm(); +} + + +// Display as table-cell +// ------------------------- +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; + + &:not(:first-child):not(:last-child) { + border-radius: 0; + } +} +// Addon and addon wrapper for buttons +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; // Match the inputs +} + +// Text input groups +// ------------------------- +.input-group-addon { + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + font-weight: normal; + line-height: 1; + color: @input-color; + text-align: center; + background-color: @input-group-addon-bg; + border: 1px solid @input-group-addon-border-color; + border-radius: @border-radius-base; + + // Sizing + &.input-sm { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + border-radius: @border-radius-small; + } + &.input-lg { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; + border-radius: @border-radius-large; + } + + // Nuke default margins from checkboxes and radios to vertically center within. + input[type="radio"], + input[type="checkbox"] { + margin-top: 0; + } +} + +// Reset rounded corners +.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-right-radius(0); +} +.input-group-addon:first-child { + border-right: 0; +} +.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-left-radius(0); +} +.input-group-addon:last-child { + border-left: 0; +} + +// Button input groups +// ------------------------- +.input-group-btn { + position: relative; + // Jankily prevent input button groups from wrapping with `white-space` and + // `font-size` in combination with `inline-block` on buttons. + font-size: 0; + white-space: nowrap; + + // Negative margin for spacing, position for bringing hovered/focused/actived + // element above the siblings. + > .btn { + position: relative; + + .btn { + margin-left: -1px; + } + // Bring the "active" button to the front + &:hover, + &:focus, + &:active { + z-index: 2; + } + } + + // Negative margin to only have a 1px border between the two + &:first-child { + > .btn, + > .btn-group { + margin-right: -1px; + } + } + &:last-child { + > .btn, + > .btn-group { + z-index: 2; + margin-left: -1px; + } + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/jumbotron.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/jumbotron.less new file mode 100644 index 0000000..fa80a38 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/jumbotron.less @@ -0,0 +1,52 @@ +// +// Jumbotron +// -------------------------------------------------- + + +.jumbotron { + padding-top: @jumbotron-padding; + padding-bottom: @jumbotron-padding; + margin-bottom: @jumbotron-padding; + color: @jumbotron-color; + background-color: @jumbotron-bg; + + h1, + .h1 { + color: @jumbotron-heading-color; + } + + p { + margin-bottom: (@jumbotron-padding / 2); + font-size: @jumbotron-font-size; + font-weight: 200; + } + + > hr { + border-top-color: darken(@jumbotron-bg, 10%); + } + + .container &, + .container-fluid & { + border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container + } + + .container { + max-width: 100%; + } + + @media screen and (min-width: @screen-sm-min) { + padding-top: (@jumbotron-padding * 1.6); + padding-bottom: (@jumbotron-padding * 1.6); + + .container &, + .container-fluid & { + padding-left: (@jumbotron-padding * 2); + padding-right: (@jumbotron-padding * 2); + } + + h1, + .h1 { + font-size: @jumbotron-heading-font-size; + } + } +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/labels.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/labels.less new file mode 100644 index 0000000..9a5a270 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/labels.less @@ -0,0 +1,64 @@ +// +// Labels +// -------------------------------------------------- + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: @label-color; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + + // Add hover effects, but only for links + a& { + &:hover, + &:focus { + color: @label-link-hover-color; + text-decoration: none; + cursor: pointer; + } + } + + // Empty labels collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for labels in buttons + .btn & { + position: relative; + top: -1px; + } +} + +// Colors +// Contextual variations (linked labels get darker on :hover) + +.label-default { + .label-variant(@label-default-bg); +} + +.label-primary { + .label-variant(@label-primary-bg); +} + +.label-success { + .label-variant(@label-success-bg); +} + +.label-info { + .label-variant(@label-info-bg); +} + +.label-warning { + .label-variant(@label-warning-bg); +} + +.label-danger { + .label-variant(@label-danger-bg); +} diff --git a/containercontent/opt/chatbot_engine/static/css/bootstrap/list-group.less b/containercontent/opt/chatbot_engine/static/css/bootstrap/list-group.less new file mode 100644 index 0000000..216b912 --- /dev/null +++ b/containercontent/opt/chatbot_engine/static/css/bootstrap/list-group.less @@ -0,0 +1,130 @@ +// +// List groups +// -------------------------------------------------- + + +// Base class +// +// Easily usable on