diff --git a/.tx/config b/.tx/config index 7581d243ab..86428c7d3c 100644 --- a/.tx/config +++ b/.tx/config @@ -33,6 +33,7 @@ trans.pl = public/language/pl/category.json trans.pt_BR = public/language/pt_BR/category.json trans.ru = public/language/ru/category.json trans.ro = public/language/ro/category.json +trans.rw = public/language/rw/category.json trans.sc = public/language/sc/category.json trans.sk = public/language/sk/category.json trans.sr = public/language/sr/category.json @@ -76,6 +77,7 @@ trans.pl = public/language/pl/login.json trans.pt_BR = public/language/pt_BR/login.json trans.ru = public/language/ru/login.json trans.ro = public/language/ro/login.json +trans.rw = public/language/rw/login.json trans.sc = public/language/sc/login.json trans.sk = public/language/sk/login.json trans.sr = public/language/sr/login.json @@ -119,6 +121,7 @@ trans.pl = public/language/pl/recent.json trans.pt_BR = public/language/pt_BR/recent.json trans.ru = public/language/ru/recent.json trans.ro = public/language/ro/recent.json +trans.rw = public/language/rw/recent.json trans.sc = public/language/sc/recent.json trans.sk = public/language/sk/recent.json trans.sr = public/language/sr/recent.json @@ -162,6 +165,7 @@ trans.pl = public/language/pl/unread.json trans.pt_BR = public/language/pt_BR/unread.json trans.ru = public/language/ru/unread.json trans.ro = public/language/ro/unread.json +trans.rw = public/language/rw/unread.json trans.sc = public/language/sc/unread.json trans.sk = public/language/sk/unread.json trans.sr = public/language/sr/unread.json @@ -205,6 +209,7 @@ trans.pl = public/language/pl/modules.json trans.pt_BR = public/language/pt_BR/modules.json trans.ru = public/language/ru/modules.json trans.ro = public/language/ro/modules.json +trans.rw = public/language/rw/modules.json trans.sc = public/language/sc/modules.json trans.sk = public/language/sk/modules.json trans.sr = public/language/sr/modules.json @@ -248,6 +253,7 @@ trans.pl = public/language/pl/register.json trans.pt_BR = public/language/pt_BR/register.json trans.ru = public/language/ru/register.json trans.ro = public/language/ro/register.json +trans.rw = public/language/rw/register.json trans.sc = public/language/sc/register.json trans.sk = public/language/sk/register.json trans.sr = public/language/sr/register.json @@ -291,6 +297,7 @@ trans.pl = public/language/pl/user.json trans.pt_BR = public/language/pt_BR/user.json trans.ru = public/language/ru/user.json trans.ro = public/language/ro/user.json +trans.rw = public/language/rw/user.json trans.sc = public/language/sc/user.json trans.sk = public/language/sk/user.json trans.sr = public/language/sr/user.json @@ -334,6 +341,7 @@ trans.pl = public/language/pl/global.json trans.pt_BR = public/language/pt_BR/global.json trans.ru = public/language/ru/global.json trans.ro = public/language/ro/global.json +trans.rw = public/language/rw/global.json trans.sc = public/language/sc/global.json trans.sk = public/language/sk/global.json trans.sr = public/language/sr/global.json @@ -377,6 +385,7 @@ trans.pl = public/language/pl/notifications.json trans.pt_BR = public/language/pt_BR/notifications.json trans.ru = public/language/ru/notifications.json trans.ro = public/language/ro/notifications.json +trans.rw = public/language/rw/notifications.json trans.sc = public/language/sc/notifications.json trans.sk = public/language/sk/notifications.json trans.sr = public/language/sr/notifications.json @@ -420,6 +429,7 @@ trans.pl = public/language/pl/reset_password.json trans.pt_BR = public/language/pt_BR/reset_password.json trans.ru = public/language/ru/reset_password.json trans.ro = public/language/ro/reset_password.json +trans.rw = public/language/rw/reset_password.json trans.sc = public/language/sc/reset_password.json trans.sk = public/language/sk/reset_password.json trans.sr = public/language/sr/reset_password.json @@ -463,6 +473,7 @@ trans.pl = public/language/pl/users.json trans.pt_BR = public/language/pt_BR/users.json trans.ru = public/language/ru/users.json trans.ro = public/language/ro/users.json +trans.rw = public/language/rw/users.json trans.sc = public/language/sc/users.json trans.sk = public/language/sk/users.json trans.sr = public/language/sr/users.json @@ -474,7 +485,7 @@ trans.zh_CN = public/language/zh_CN/users.json trans.zh_TW = public/language/zh_TW/users.json type = KEYVALUEJSON -[nodebb.language] +[nodebb.language-1] file_filter = public/language//language.json source_file = public/language/en_GB/language.json source_lang = en_GB @@ -506,6 +517,7 @@ trans.pl = public/language/pl/language.json trans.pt_BR = public/language/pt_BR/language.json trans.ru = public/language/ru/language.json trans.ro = public/language/ro/language.json +trans.rw = public/language/rw/language.json trans.sc = public/language/sc/language.json trans.sk = public/language/sk/language.json trans.sr = public/language/sr/language.json @@ -549,6 +561,7 @@ trans.pl = public/language/pl/pages.json trans.pt_BR = public/language/pt_BR/pages.json trans.ru = public/language/ru/pages.json trans.ro = public/language/ro/pages.json +trans.rw = public/language/rw/pages.json trans.sc = public/language/sc/pages.json trans.sk = public/language/sk/pages.json trans.sr = public/language/sr/pages.json @@ -592,6 +605,7 @@ trans.pl = public/language/pl/topic.json trans.pt_BR = public/language/pt_BR/topic.json trans.ru = public/language/ru/topic.json trans.ro = public/language/ro/topic.json +trans.rw = public/language/rw/topic.json trans.sc = public/language/sc/topic.json trans.sk = public/language/sk/topic.json trans.sr = public/language/sr/topic.json @@ -635,6 +649,7 @@ trans.pl = public/language/pl/success.json trans.pt_BR = public/language/pt_BR/success.json trans.ru = public/language/ru/success.json trans.ro = public/language/ro/success.json +trans.rw = public/language/rw/success.json trans.sc = public/language/sc/success.json trans.sk = public/language/sk/success.json trans.sr = public/language/sr/success.json @@ -678,6 +693,7 @@ trans.pl = public/language/pl/error.json trans.pt_BR = public/language/pt_BR/error.json trans.ru = public/language/ru/error.json trans.ro = public/language/ro/error.json +trans.rw = public/language/rw/error.json trans.sc = public/language/sc/error.json trans.sk = public/language/sk/error.json trans.sr = public/language/sr/error.json @@ -721,6 +737,7 @@ trans.pl = public/language/pl/tags.json trans.pt_BR = public/language/pt_BR/tags.json trans.ru = public/language/ru/tags.json trans.ro = public/language/ro/tags.json +trans.rw = public/language/rw/tags.json trans.sc = public/language/sc/tags.json trans.sk = public/language/sk/tags.json trans.sr = public/language/sr/tags.json @@ -764,6 +781,7 @@ trans.pl = public/language/pl/email.json trans.pt_BR = public/language/pt_BR/email.json trans.ru = public/language/ru/email.json trans.ro = public/language/ro/email.json +trans.rw = public/language/rw/email.json trans.sc = public/language/sc/email.json trans.sk = public/language/sk/email.json trans.sr = public/language/sr/email.json @@ -807,6 +825,7 @@ trans.pl = public/language/pl/search.json trans.pt_BR = public/language/pt_BR/search.json trans.ru = public/language/ru/search.json trans.ro = public/language/ro/search.json +trans.rw = public/language/rw/search.json trans.sc = public/language/sc/search.json trans.sk = public/language/sk/search.json trans.sr = public/language/sr/search.json @@ -850,6 +869,7 @@ trans.pl = public/language/pl/groups.json trans.pt_BR = public/language/pt_BR/groups.json trans.ru = public/language/ru/groups.json trans.ro = public/language/ro/groups.json +trans.rw = public/language/rw/groups.json trans.sc = public/language/sc/groups.json trans.sk = public/language/sk/groups.json trans.sr = public/language/sr/groups.json diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..c44b71096d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM node:0.10-onbuild + +ENV NODE_ENV=production \ + daemon=false \ + silent=false + +CMD node app --setup && npm start +EXPOSE 4567 diff --git a/app.js b/app.js index 210927491b..4c4f6854bb 100644 --- a/app.js +++ b/app.js @@ -118,6 +118,7 @@ function start() { var urlObject = url.parse(nconf.get('url')); var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : ''; nconf.set('base_url', urlObject.protocol + '//' + urlObject.host); + nconf.set('secure', urlObject.protocol === 'https'); nconf.set('use_port', !!urlObject.port); nconf.set('relative_path', relativePath); nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567); @@ -345,9 +346,9 @@ function resetThemes(callback) { meta.themes.set({ type: 'local', - id: 'nodebb-theme-vanilla' + id: 'nodebb-theme-persona' }, function(err) { - winston.info('[reset] Theme reset to Vanilla'); + winston.info('[reset] Theme reset to Persona'); if (typeof callback === 'function') { callback(err); } else { diff --git a/minifier.js b/minifier.js index bca79e68f1..7289843b2f 100644 --- a/minifier.js +++ b/minifier.js @@ -4,10 +4,9 @@ var uglifyjs = require('uglify-js'), less = require('less'), async = require('async'), fs = require('fs'), - path = require('path'), crypto = require('crypto'), utils = require('./public/src/utils'), - + Minifier = { js: {} }; diff --git a/nodebb b/nodebb index a93e40c785..d19833d010 100755 --- a/nodebb +++ b/nodebb @@ -5,8 +5,7 @@ var colors = require('colors'), argv = require('minimist')(process.argv.slice(2)), fs = require('fs'), async = require('async'), - touch = require('touch'), - npm = require('npm'); + touch = require('touch'); var getRunningPid = function(callback) { fs.readFile(__dirname + '/pidfile', { @@ -119,15 +118,12 @@ switch(process.argv[2]) { case 'upgrade': async.series([ function(next) { - process.stdout.write('1. '.bold + 'Bringing base dependencies up to date\n'.yellow); - npm.load({ - loglevel: 'silent' - }, function() { - npm.commands.install(next); - }); + process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow); + require('child_process').execFile('/usr/bin/env', ['npm', 'i', '--production'], next); }, function(next) { - process.stdout.write('2. '.bold + 'Updating NodeBB data store schema\n'.yellow); + process.stdout.write('OK\n'.green); + process.stdout.write('2. '.bold + 'Updating NodeBB data store schema.\n'.yellow); var upgradeProc = cproc.fork('app.js', ['--upgrade'], { cwd: __dirname, silent: false @@ -136,7 +132,7 @@ switch(process.argv[2]) { upgradeProc.on('close', next) }, function(next) { - process.stdout.write('3. '.bold + 'Storing upgrade date in "package.json"\n'.yellow); + process.stdout.write('3. '.bold + 'Storing upgrade date in "package.json"... '.yellow); touch(__dirname + '/package.json', {}, next); } ], function(err) { @@ -145,6 +141,8 @@ switch(process.argv[2]) { } else { var message = 'NodeBB Upgrade Complete!', spaces = new Array(Math.floor(process.stdout.columns / 2) - (message.length / 2) + 1).join(' '); + + process.stdout.write('OK\n'.green); process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset); } }); diff --git a/package.json b/package.json index 6d0d473261..41ece32b77 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "0.7.3-dev", + "version": "0.7.3", "homepage": "http://www.nodebb.org", "repository": { "type": "git", @@ -14,14 +14,14 @@ "test": "mocha ./tests -t 10000" }, "dependencies": { - "async": "~0.9.0", - "bcryptjs": "~2.1.0", + "async": "~1.4.2", + "bcryptjs": "~2.2.1", "body-parser": "^1.9.0", "colors": "^1.1.0", "compression": "^1.1.0", "connect-ensure-login": "^0.1.1", "connect-flash": "^0.1.1", - "connect-multiparty": "^1.2.4", + "connect-multiparty": "^2.0.0", "cookie-parser": "^1.3.3", "cron": "^1.0.5", "csurf": "^1.6.1", @@ -40,40 +40,40 @@ "mmmagic": "^0.3.13", "morgan": "^1.3.2", "nconf": "~0.7.1", - "nodebb-plugin-composer-default": "^1.0.7", - "nodebb-plugin-dbsearch": "^0.2.12", - "nodebb-plugin-emoji-extended": "^0.4.8", - "nodebb-plugin-markdown": "^4.0.0", - "nodebb-plugin-mentions": "^0.11.7", - "nodebb-plugin-soundpack-default": "^0.1.1", - "nodebb-plugin-spam-be-gone": "^0.4.0", - "nodebb-rewards-essentials": "^0.0.1", - "nodebb-theme-lavender": "^1.0.48", - "nodebb-theme-persona": "^1.0.20", - "nodebb-theme-vanilla": "^2.0.16", - "nodebb-widget-essentials": "^1.0.2", + "nodebb-plugin-composer-default": "1.0.12", + "nodebb-plugin-dbsearch": "0.2.15", + "nodebb-plugin-emoji-extended": "0.4.9", + "nodebb-plugin-markdown": "4.0.4", + "nodebb-plugin-mentions": "1.0.0", + "nodebb-plugin-soundpack-default": "0.1.3", + "nodebb-plugin-spam-be-gone": "0.4.1", + "nodebb-rewards-essentials": "0.0.3", + "nodebb-theme-lavender": "1.0.52", + "nodebb-theme-persona": "2.0.28", + "nodebb-theme-vanilla": "3.0.17", + "nodebb-widget-essentials": "1.0.5", "npm": "^2.1.4", - "passport": "^0.2.1", + "passport": "^0.3.0", "passport-local": "1.0.0", "prompt": "^0.2.14", "request": "^2.44.0", - "rimraf": "~2.3.2", + "rimraf": "~2.4.2", "rss": "^1.0.0", - "semver": "^4.3.3", + "semver": "^5.0.1", "serve-favicon": "^2.1.5", - "sitemap": "^0.8.1", + "sitemap": "^1.0.0", "socket.io": "^1.2.1", "socket.io-client": "^1.2.1", "socket.io-redis": "^0.1.3", "socketio-wildcard": "~0.1.1", "string": "^3.0.0", - "templates.js": "^0.2.6", - "touch": "0.0.3", + "templates.js": "0.2.10", + "touch": "1.0.0", "uglify-js": "^2.4.23", "underscore": "~1.8.3", "underscore.deep": "^0.5.1", - "validator": "^3.30.0", - "winston": "^0.9.0", + "validator": "^4.0.5", + "winston": "^1.0.1", "xregexp": "~2.0.0" }, "devDependencies": { diff --git a/public/language/ar/category.json b/public/language/ar/category.json index 430a82390d..874bada6ab 100644 --- a/public/language/ar/category.json +++ b/public/language/ar/category.json @@ -1,9 +1,12 @@ { + "category": "فئة", + "subcategories": "فئة فرعية", "new_topic_button": "موضوع جديد", "guest-login-post": "يجب عليك تسجيل الدخول للرد", "no_topics": "لا توجد مواضيع في هذه الفئةلم لا تحاول إنشاء موضوع؟
", "browsing": "تصفح", "no_replies": "لا توجد ردود.", + "no_new_posts": "لا يوجد مشاركات جديدة.", "share_this_category": "انشر هذه الفئة", "watch": "متابعة", "ignore": "تجاهل", diff --git a/public/language/ar/email.json b/public/language/ar/email.json index 31c97c34e9..b37721faa3 100644 --- a/public/language/ar/email.json +++ b/public/language/ar/email.json @@ -6,7 +6,7 @@ "greeting_with_name": "مرحبًا بك يا %1", "welcome.text1": "شكرًا على تسجيلك في %1!", "welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي سجلت به.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "تم قبول نتسجيلك ، يمكنك الدخول باتسخدام اسم المستخدم و كلمة المرور.", "welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني", "invitation.text1": "%1 قام بدعوتك للانضمام لـ %2", "invitation.ctr": "إضغط هنا لإنشاء حسابك", diff --git a/public/language/ar/global.json b/public/language/ar/global.json index d2c9af8495..50b3877256 100644 --- a/public/language/ar/global.json +++ b/public/language/ar/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 من %2", "pagination.enter_index": "أدخل الرقم التسلسلي", "header.admin": "مدبر نظام", - "header.categories": "Categories", + "header.categories": "الفئات", "header.recent": "حديث", "header.unread": "غير مقروء", "header.tags": "وسم", @@ -51,7 +51,7 @@ "views": "المشاهدات", "reputation": "السمعة", "read_more": "اقرأ المزيد", - "more": "More", + "more": "المزيد", "posted_ago_by_guest": "كتب %1 من طرف زائر", "posted_ago_by": "كتب %1 من طرف %2", "posted_ago": "كتب %1", diff --git a/public/language/ar/groups.json b/public/language/ar/groups.json index ae753b2d42..ea0917cdd7 100644 --- a/public/language/ar/groups.json +++ b/public/language/ar/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "لاوجدود لمجموعات يمكن معاينتها", "pending.accept": "موافق", "pending.reject": "رفض", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "قبول الكل", + "pending.reject_all": "رفض الكل", + "pending.none": "لايوجد أعضاء ينتظرون التفعيل حالياً", + "invited.none": "لايوجد أعضاء مدعوون في حالياً", + "invited.uninvite": "إلغ الدعوة", + "invited.search": "ابحث عن أعضاء لدعوتهم للمجموعة", "cover-instructions": "اسحب وأسقِط صورة، اسحبها للموضع المرغوب، وانقر على حفظ", "cover-change": "تغيير", "cover-save": "حفظ", @@ -19,7 +19,7 @@ "details.title": "تفاصيل المجموعة", "details.members": "لائحة الأعضاء", "details.pending": "المستخدمون في الانتظار", - "details.invited": "Invited Members", + "details.invited": "اﻷعضار المدعوون", "details.has_no_posts": "أعضاء هذه المجموعة لم يضيفوا أية مشاركة", "details.latest_posts": "آخر المشاركات", "details.private": "خاص", @@ -37,13 +37,14 @@ "details.userTitleEnabled": "إظهار الوسام", "details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها", "details.hidden": "مخفي", - "details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة يدوية.", - "details.delete_group": "Delete Group", + "details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة.", + "details.delete_group": "حذف المجموعة", "event.updated": "تم تحديث بيانات المجموعة", "event.deleted": "تم حذف المجموعة %1", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "اقبل الدعوة", + "membership.invitation-pending": "الدعوة بانتظار القبول", + "membership.join-group": "انظم للمجموعة", + "membership.leave-group": "غادر المجموعة", + "membership.reject": "رفض", + "new-group.group_name": "اسم المجموعة" } \ No newline at end of file diff --git a/public/language/ar/unread.json b/public/language/ar/unread.json index 365303bf35..992ffa6f5c 100644 --- a/public/language/ar/unread.json +++ b/public/language/ar/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "حدد غير مقروء", "selected": "المحددة", "all": "الكل", - "all_categories": "All categories", + "all_categories": "كل الفئات", "topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!" } \ No newline at end of file diff --git a/public/language/ar/user.json b/public/language/ar/user.json index d4c64f1ecd..80336505fa 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -7,7 +7,7 @@ "email": "البريد الإلكتروني", "confirm_email": "تأكيد عنوان البريد الإلكتروني", "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", + "ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟", "unban_account": "Unban Account", "delete_account": "حذف الحساب", "delete_account_confirm": "هل أن متأكد أنك تريد حذف حسابك؟
هذه العملية غير قابلة للإلغاء ولن يكون بالإمكان استعادة بياناتك

أدخل اسم المستخدم الخاص بك لتأكيد عملية الحذف", diff --git a/public/language/bg/category.json b/public/language/bg/category.json index ad4fcb17ee..52d9789bd0 100644 --- a/public/language/bg/category.json +++ b/public/language/bg/category.json @@ -1,9 +1,12 @@ { + "category": "Категория", + "subcategories": "Подкатегории", "new_topic_button": "Нова тема", "guest-login-post": "Влезте, за да можете да публикувате", "no_topics": "Все още няма теми в тази категория.
Защо не създадеш една?", "browsing": "Разглежда", "no_replies": "Все още никой не е отговорил", + "no_new_posts": "Няма нови публикации.", "share_this_category": "Споделяне на тази категория", "watch": "Следене", "ignore": "Игнориране", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 2b45504325..56ae758261 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Като нов потребител, Вие можете да публикувате веднъж на %1 секунда/и, докато не натрупате %2 репутация – моля, изчакайте малко, преди да опитате да публикувате отново", "tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)", "tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)", + "too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)", "file-too-big": "Максималният разрешен размер на файл е %1 КБ – моля, качете по-малък файл", "cant-vote-self-post": "Не можете да гласувате за собствената си публикация", "already-favourited": "Вече сте отбелязали тази публикация като любима", diff --git a/public/language/bg/global.json b/public/language/bg/global.json index 7c5c0d7e2d..3d3b9e63a2 100644 --- a/public/language/bg/global.json +++ b/public/language/bg/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 от %2", "pagination.enter_index": "Въведете номер", "header.admin": "Администратор", - "header.categories": "Categories", + "header.categories": "Категории", "header.recent": "Скорошни", "header.unread": "Непрочетени", "header.tags": "Етикети", diff --git a/public/language/bg/groups.json b/public/language/bg/groups.json index 1304f49c36..1fa3860f20 100644 --- a/public/language/bg/groups.json +++ b/public/language/bg/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Ако е включено, присъединяването към група изисква одобрението на собственика ѝ", "details.hidden": "Скрита", "details.hidden_help": "Ако е включено, тази група няма да бъде извеждана в списъка от групи и потребителите ще трябва да бъдат поканени лично", - "details.delete_group": "Delete Group", + "details.delete_group": "Изтриване на групата", "event.updated": "Подробностите за групата бяха обновени", "event.deleted": "Групата „%1“ беше изтрита", "membership.accept-invitation": "Приемане на поканата", "membership.invitation-pending": "Чакаща покана", "membership.join-group": "Присъединяване към групата", "membership.leave-group": "Напускане на групата", - "membership.reject": "Отхвърляне" + "membership.reject": "Отхвърляне", + "new-group.group_name": "Име на групата:" } \ No newline at end of file diff --git a/public/language/bn/category.json b/public/language/bn/category.json index 52a6c76853..b543a8dc41 100644 --- a/public/language/bn/category.json +++ b/public/language/bn/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "নতুন টপিক", "guest-login-post": "Log in to post", "no_topics": "এই বিভাগে কোন টপিক নেই!
আপনি চাইলে একটি পোষ্ট করতে পারেন।", "browsing": "ব্রাউজিং", "no_replies": "কোন রিপ্লাই নেই", + "no_new_posts": "No new posts.", "share_this_category": "এই বিভাগটি অন্যের সাথে ভাগাভাগি করুন", "watch": "Watch", "ignore": "উপেক্ষা করুন", diff --git a/public/language/bn/groups.json b/public/language/bn/groups.json index dd582c072a..ee043d39b6 100644 --- a/public/language/bn/groups.json +++ b/public/language/bn/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/cs/category.json b/public/language/cs/category.json index 6f156ea04b..9d75bab919 100644 --- a/public/language/cs/category.json +++ b/public/language/cs/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nové téma", "guest-login-post": "Log in to post", "no_topics": "V této kategorii zatím nejsou žádné příspěvky.
Můžeš být první!", "browsing": "prohlíží", "no_replies": "Nikdo ještě neodpověděl", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignorovat", diff --git a/public/language/cs/groups.json b/public/language/cs/groups.json index 7690fb15a5..dce192132e 100644 --- a/public/language/cs/groups.json +++ b/public/language/cs/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/da/category.json b/public/language/da/category.json index 44a6bed071..d69e9f2fb5 100644 --- a/public/language/da/category.json +++ b/public/language/da/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Underkategorier", "new_topic_button": "Nyt emne", "guest-login-post": "Log ind", "no_topics": "Der er ikke nogen nye emner i denne kategori.
Hvorfor prøver du ikke at lave et?", "browsing": "browse", "no_replies": "Ingen har svaret", + "no_new_posts": "Ingen nye indlæg", "share_this_category": "Del denne kategori", "watch": "Overvåg", "ignore": "Ignorer", diff --git a/public/language/da/groups.json b/public/language/da/groups.json index f7094f1ac1..da21bef337 100644 --- a/public/language/da/groups.json +++ b/public/language/da/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Hvis aktiveret, så vil det kræve godkendelse af gruppe ejeren for at tilslutte sig en gruppe", "details.hidden": "Skjult", "details.hidden_help": "Hvis aktiveret, så vil denne gruppe ikke kunne ses i gruppelisten og bruhere skal inviteres manuelt", - "details.delete_group": "Delete Group", + "details.delete_group": "Slet Gruppe", "event.updated": "Gruppe detaljer er blevet opdateret", "event.deleted": "Gruppen \"%1\" er blevet slettet", "membership.accept-invitation": "Acceptér Invitation", "membership.invitation-pending": "Afventende Invitationer", "membership.join-group": "Bliv medlem af gruppe", "membership.leave-group": "Forlad Gruppe", - "membership.reject": "Afvis" + "membership.reject": "Afvis", + "new-group.group_name": "Gruppe Navn:" } \ No newline at end of file diff --git a/public/language/de/category.json b/public/language/de/category.json index f073846d6d..f2c4311b78 100644 --- a/public/language/de/category.json +++ b/public/language/de/category.json @@ -1,9 +1,12 @@ { + "category": "Kategorie", + "subcategories": "Unterkategorien", "new_topic_button": "Neues Thema", "guest-login-post": "Anmelden um einen Beitrag zu erstellen", "no_topics": "Es gibt noch keine Themen in dieser Kategorie.
Warum beginnst du nicht eins?", "browsing": "Aktiv", "no_replies": "Niemand hat geantwortet", + "no_new_posts": "Keine neue Beiträge.", "share_this_category": "Teile diese Kategorie", "watch": "Beobachten", "ignore": "Ignorieren", diff --git a/public/language/de/error.json b/public/language/de/error.json index d8150de62e..e2176721e4 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Als neuer Benutzer können Sie nur einen Beitrag innerhalb von %1 Sekunden erstellen - Bitte warten Sie bevor Sie erneut einen Beitrag erstellen.", "tag-too-short": "Bitte geben Sie ein längeres Schlagwort ein. Tags sollten mindestens %1 Zeichen enthalten.", "tag-too-long": "Bitte geben Sie ein kürzeres Schlagwort ein. Tags können nicht länger als %1 Zeichen sein.", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Nicht genügend Tags. Themen müssen mindestens %1 Tag(s) enthalten", + "too-many-tags": "Zu viele Tags. Themen dürfen nicht mehr als %1 Tag(s) enthalten", "file-too-big": "Die maximale Dateigröße ist %1 kB, bitte laden Sie eine kleinere Datei hoch.", "cant-vote-self-post": "Du kannst deinen eigenen Beitrag nicht bewerten", "already-favourited": "Dieser Beitrag ist bereits in deinen Favoriten enthalten", diff --git a/public/language/de/global.json b/public/language/de/global.json index 690257122e..a2d6127ba5 100644 --- a/public/language/de/global.json +++ b/public/language/de/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 von %2", "pagination.enter_index": "Seitenzahl eingeben", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Kategorien", "header.recent": "Aktuell", "header.unread": "Ungelesen", "header.tags": "Tags", diff --git a/public/language/de/groups.json b/public/language/de/groups.json index 0f26786358..be381125a2 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Wenn aktiviert, setzt ein Gruppenbeitritt die Zustimmung eines Gruppenbesitzers voraus", "details.hidden": "Versteckt", "details.hidden_help": "Wenn aktiviert, wird diese Gruppe in der Gruppenliste nicht zu finden sein, und Benutzer werden manuell eingeladen werden müssen.", - "details.delete_group": "Delete Group", + "details.delete_group": "Gruppe löschen", "event.updated": "Gruppendetails wurden aktualisiert", "event.deleted": "Die Gruppe \"%1\" wurde gelöscht.", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Einladung akzeptieren", + "membership.invitation-pending": "Einladung ausstehend", + "membership.join-group": "Gruppe beitreten", + "membership.leave-group": "Gruppe verlassen", + "membership.reject": "Ablehnen", + "new-group.group_name": "Gruppenname:" } \ No newline at end of file diff --git a/public/language/el/category.json b/public/language/el/category.json index b49b18c0e2..2452ab3542 100644 --- a/public/language/el/category.json +++ b/public/language/el/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Νέο Θέμα", "guest-login-post": "Log in to post", "no_topics": "Δεν υπάρχουν θέματα σε αυτή την κατηγορία.
Γιατί δεν δοκιμάζεις να δημοσιεύσεις ένα εσύ;", "browsing": "περιηγούνται", "no_replies": "Κανείς δεν έχει απαντήσει", + "no_new_posts": "No new posts.", "share_this_category": "Μοιράσου αυτή την κατηγορία", "watch": "Watch", "ignore": "Αγνόηση", diff --git a/public/language/el/groups.json b/public/language/el/groups.json index b81d08c2c4..4eb70181f2 100644 --- a/public/language/el/groups.json +++ b/public/language/el/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/el/language.json b/public/language/el/language.json index 9e32448715..fe984351cc 100644 --- a/public/language/el/language.json +++ b/public/language/el/language.json @@ -1,5 +1,5 @@ { - "name": "Ελληνικά (Ελλάδα/Κύπρος)", + "name": "Greek", "code": "el", "dir": "ltr" } \ No newline at end of file diff --git a/public/language/en@pirate/category.json b/public/language/en@pirate/category.json index 7e84700d2f..3c9ba366a2 100644 --- a/public/language/en@pirate/category.json +++ b/public/language/en@pirate/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "Thar be no topics in 'tis category.
Why don't ye give a go' postin' one?", "browsing": "browsin'", "no_replies": "No one has replied to ye message", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/en@pirate/groups.json b/public/language/en@pirate/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/en@pirate/groups.json +++ b/public/language/en@pirate/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/en_GB/category.json b/public/language/en_GB/category.json index 53a0eb3bc8..aa15153b0b 100644 --- a/public/language/en_GB/category.json +++ b/public/language/en_GB/category.json @@ -1,10 +1,14 @@ { + "category": "Category", + "subcategories": "Subcategories", + "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", "browsing": "browsing", "no_replies": "No one has replied", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", diff --git a/public/language/en_GB/global.json b/public/language/en_GB/global.json index d6c0a71e52..5a9b750b96 100644 --- a/public/language/en_GB/global.json +++ b/public/language/en_GB/global.json @@ -39,6 +39,7 @@ "header.notifications": "Notifications", "header.search": "Search", "header.profile": "Profile", + "header.navigation": "Navigation", "notifications.loading": "Loading Notifications", "chats.loading": "Loading Chats", @@ -87,7 +88,7 @@ "online": "Online", "away": "Away", - "dnd": "Do not Disturb", + "dnd": "Do not disturb", "invisible": "Invisible", "offline": "Offline", diff --git a/public/language/en_GB/groups.json b/public/language/en_GB/groups.json index fbc841a4d3..958efd13e0 100644 --- a/public/language/en_GB/groups.json +++ b/public/language/en_GB/groups.json @@ -47,10 +47,12 @@ "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", - - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + + "membership.accept-invitation": "Accept Invitation", + "membership.invitation-pending": "Invitation Pending", + "membership.join-group": "Join Group", + "membership.leave-group": "Leave Group", + "membership.reject": "Reject", + + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/en_GB/modules.json b/public/language/en_GB/modules.json index 68d305cfa4..e4f509842f 100644 --- a/public/language/en_GB/modules.json +++ b/public/language/en_GB/modules.json @@ -5,7 +5,7 @@ "chat.no_active": "You have no active chats.", "chat.user_typing": "%1 is typing ...", "chat.user_has_messaged_you": "%1 has messaged you.", - "chat.see_all": "See all Chats", + "chat.see_all": "See all chats", "chat.no-messages": "Please select a recipient to view chat message history", "chat.recent-chats": "Recent Chats", "chat.contacts": "Contacts", @@ -23,5 +23,9 @@ "composer.user_said": "%1 said:", "composer.discard": "Are you sure you wish to discard this post?", "composer.submit_and_lock": "Submit and Lock", - "composer.toggle_dropdown": "Toggle Dropdown" + "composer.toggle_dropdown": "Toggle Dropdown", + + "bootbox.ok": "OK", + "bootbox.cancel": "Cancel", + "bootbox.confirm": "Confirm" } \ No newline at end of file diff --git a/public/language/en_GB/notifications.json b/public/language/en_GB/notifications.json index 1c256bebb4..52d5a10194 100644 --- a/public/language/en_GB/notifications.json +++ b/public/language/en_GB/notifications.json @@ -1,7 +1,7 @@ { "title": "Notifications", "no_notifs": "You have no new notifications", - "see_all": "See all Notifications", + "see_all": "See all notifications", "mark_all_read": "Mark all notifications read", "back_to_home": "Back to %1", diff --git a/public/language/en_GB/pages.json b/public/language/en_GB/pages.json index d9825d5800..6d6164ef9e 100644 --- a/public/language/en_GB/pages.json +++ b/public/language/en_GB/pages.json @@ -1,21 +1,42 @@ { "home": "Home", "unread": "Unread Topics", - "popular": "Popular Topics", + "popular-day": "Popular topics today", + "popular-week": "Popular topics this week", + "popular-month": "Popular topics this month", + "popular-alltime": "All time popular topics", "recent": "Recent Topics", - "users": "Registered Users", + + "users/online": "Online Users", + "users/latest": "Latest Users", + "users/sort-posts": "Users with the most posts", + "users/sort-reputation": "Users with the most reputation", + "users/map": "User Map", + "users/search": "User Search", + "notifications": "Notifications", "tags": "Tags", "tag": "Topics tagged under \"%1\"", - "user.edit": "Editing \"%1\"", - "user.following": "People %1 Follows", - "user.followers": "People who Follow %1", - "user.posts": "Posts made by %1", - "user.topics": "Topics created by %1", - "user.groups": "%1's Groups", - "user.favourites": "%1's Favourite Posts", - "user.settings": "User Settings", - "user.watched": "Topics watched by %1", + "register": "Register an account", + "login": "Login to your account", + "reset": "Reset your account password", + "categories": "Categories", + + "groups": "Groups", + "group": "%1 group", + + "chats": "Chats", + "chat": "Chatting with %1", + + "account/edit": "Editing \"%1\"", + "account/following": "People %1 follows", + "account/followers": "People who follow %1", + "account/posts": "Posts made by %1", + "account/topics": "Topics created by %1", + "account/groups": "%1's Groups", + "account/favourites": "%1's Favourite Posts", + "account/settings": "User Settings", + "account/watched": "Topics watched by %1", "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:" diff --git a/public/language/en_GB/user.json b/public/language/en_GB/user.json index 50d5dbf6c0..b11db877cb 100644 --- a/public/language/en_GB/user.json +++ b/public/language/en_GB/user.json @@ -97,5 +97,7 @@ "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", - "no-group-title": "No group title" + "no-group-title": "No group title", + + "select-skin": "Select a Skin" } diff --git a/public/language/en_US/category.json b/public/language/en_US/category.json index be0b8e42f5..b992c577f3 100644 --- a/public/language/en_US/category.json +++ b/public/language/en_US/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "New Topic", "guest-login-post": "Log in to post", "no_topics": "There are no topics in this category.
Why don't you try posting one?", "browsing": "browsing", "no_replies": "No one has replied", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/en_US/groups.json b/public/language/en_US/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/en_US/groups.json +++ b/public/language/en_US/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/es/category.json b/public/language/es/category.json index 1eecac4aba..da5de572f9 100644 --- a/public/language/es/category.json +++ b/public/language/es/category.json @@ -1,9 +1,12 @@ { + "category": "Categoría", + "subcategories": "Subcategorías", "new_topic_button": "Nuevo tema", "guest-login-post": "Acceder para poder escribir un mensaje", "no_topics": "No hay temas en esta categoría.
¿Por qué no te animas y publicas uno?", "browsing": "viendo ahora", "no_replies": "Nadie ha respondido aún", + "no_new_posts": "No hay mensajes nuevos.", "share_this_category": "Compartir esta categoría", "watch": "Seguir", "ignore": "Ignorar", diff --git a/public/language/es/error.json b/public/language/es/error.json index 030e014195..d4e2062425 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Como nuevo usuario, solo puedes publicar una vez cada %1 segundo(s) hasta hayas ganado una reputación de %2 - por favor espera antes de volver a publicar", "tag-too-short": "Por favor introduce una etiqueta más larga. Las etiquetas deben contener por lo menos %1 caractere(s)", "tag-too-long": "Por favor introduce una etiqueta más corta. Las etiquetas no pueden exceder los %1 caractere(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Etiquetas insuficientes. El tema debe tener al menos %1 etiqueta(s).", + "too-many-tags": "Demasiadas etiquetas. El tema no puede tener mas de %1 etiqueta(s)", "file-too-big": "El tamaño de fichero máximo es de %1 kB - por favor, suba un fichero más pequeño", "cant-vote-self-post": "No puedes votar tus propios posts", "already-favourited": "Ya ha marcado esta publicación como favorita", diff --git a/public/language/es/global.json b/public/language/es/global.json index fd67f9c881..66a7b6fbe7 100644 --- a/public/language/es/global.json +++ b/public/language/es/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 de %2", "pagination.enter_index": "Introduzca el número", "header.admin": "Administración", - "header.categories": "Categories", + "header.categories": "Categorías", "header.recent": "Recientes", "header.unread": "No leídos", "header.tags": "Etiquetas", diff --git a/public/language/es/groups.json b/public/language/es/groups.json index 1da9e025e2..6c7fde309f 100644 --- a/public/language/es/groups.json +++ b/public/language/es/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Si está habilitado, entrar en los grupos requiere aprobación de sus propietarios", "details.hidden": "Oculto", "details.hidden_help": "Si está habilitado, este grupo no aparecerá en los listados de grupos, y los usuarios tendrán que ser invitados manualmente", - "details.delete_group": "Delete Group", + "details.delete_group": "Eliminar grupo", "event.updated": "Los detalles del grupo han sido actualizados", "event.deleted": "El grupo \"%1\" ha sido eliminado", "membership.accept-invitation": "Aceptar Invitación", "membership.invitation-pending": "Invitación Pendiente", "membership.join-group": "Unirse al grupo", "membership.leave-group": "Dejar el grupo", - "membership.reject": "Rechazar" + "membership.reject": "Rechazar", + "new-group.group_name": "Nombre de Grupo:" } \ No newline at end of file diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json index 296d619a14..5258be8a9a 100644 --- a/public/language/es/notifications.json +++ b/public/language/es/notifications.json @@ -2,7 +2,7 @@ "title": "Notificaciones", "no_notifs": "No tienes nuevas notificaciones", "see_all": "Ver todas las notificaciones", - "mark_all_read": "Marcar todas las notificaciones cómo leídas", + "mark_all_read": "Marcar todas las notificaciones como leídas", "back_to_home": "Volver a %1", "outgoing_link": "Enlace externo", "outgoing_link_message": "Ahora estás saliendo de %1.", diff --git a/public/language/es/tags.json b/public/language/es/tags.json index ebb1bc6072..bf8d98d790 100644 --- a/public/language/es/tags.json +++ b/public/language/es/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "No hay temas con esta etiqueta.", "tags": "Etiquetas", - "enter_tags_here": "Introduce aquí las etiquetas, entre 1% y 2% caracteres cada una.", + "enter_tags_here": "Introduce aquí las etiquetas, entre %1 y %2 caracteres cada una.", "enter_tags_here_short": "Introduzca las etiquetas...", "no_tags": "Aún no hay etiquetas." } \ No newline at end of file diff --git a/public/language/et/category.json b/public/language/et/category.json index bbaa42bee5..f89f350050 100644 --- a/public/language/et/category.json +++ b/public/language/et/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Uus teema", "guest-login-post": "Postitamiseks logi sisse", "no_topics": "Kahjuks ei leidu siin kategoorias ühtegi teemat.
Soovid postitada?", "browsing": "vaatab", "no_replies": "Keegi pole vastanud", + "no_new_posts": "No new posts.", "share_this_category": "Jaga seda kategooriat", "watch": "Vaata", "ignore": "Ignoreeri", diff --git a/public/language/et/error.json b/public/language/et/error.json index 865e8cdc76..415dfea720 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Uue kasutajana saadte postitada vaid iga %1 sekundi tagant, seniks kuni olete teeninud vähemalt %2 reputatsiooni - palun oodake enne uue postituse tegemist.", "tag-too-short": "Palun sisestage pikem märksõna. Märksõna pikkus peab olema vähemalt %1 tähemärk(i).", "tag-too-long": "Palun sisestage lühem märksõna. Märksõna pikkus peab olema vähem kui %1 tähemärk(i).", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Liiga vähe märksõnu. Teemadel peab olemalt vähemalt %1 märksõna", + "too-many-tags": "Liiga palju märksõnu. Teemadel ei tohi olla rohkem kui %1 märksõna", "file-too-big": "Maksimaalne üleslaetava faili suurus on %1 kB - valige väiksema mahuga fail.", "cant-vote-self-post": "Sa ei saa hääletada enda postituse poolt", "already-favourited": "Sa juba märkisid selle postituse lemmikuks", diff --git a/public/language/et/global.json b/public/language/et/global.json index 153c49c35d..ce9d277529 100644 --- a/public/language/et/global.json +++ b/public/language/et/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 kõigist %2-st", "pagination.enter_index": "Sisetage indeks", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Kategooriad", "header.recent": "Hiljutised", "header.unread": "Lugemata", "header.tags": "Märksõnad", diff --git a/public/language/et/groups.json b/public/language/et/groups.json index 1ddeb7ce14..5f1331155f 100644 --- a/public/language/et/groups.json +++ b/public/language/et/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Kui sisse lülitatud, siis grupiga liitumine nõuab grupi omaniku nõusolekut", "details.hidden": "Peidetud", "details.hidden_help": "Kui sisse lülitatud, siis seda gruppi ei kuvata gruppide nimekirjas ning liikmed tuleb lisada manuaalselt", - "details.delete_group": "Delete Group", + "details.delete_group": "Kustuta grupp", "event.updated": "Grupi lisainformatsiooni on uuendatud", "event.deleted": "Grupp \"%1\" on kustutatud", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Aktsepteeri kutse", + "membership.invitation-pending": "Kutse ootel", + "membership.join-group": "Liitu grupiga", + "membership.leave-group": "Lahku grupist", + "membership.reject": "Lükka tagasi", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/fa_IR/category.json b/public/language/fa_IR/category.json index d67bba2cd7..69c060ce13 100644 --- a/public/language/fa_IR/category.json +++ b/public/language/fa_IR/category.json @@ -1,12 +1,15 @@ { + "category": "شاخه", + "subcategories": "زیر شاخه ها", "new_topic_button": "جستار تازه", "guest-login-post": "برای ثبت نظر وارد شوید", "no_topics": "هیچ پستی در این دسته نیست.
چرا شما یکی نفرستید؟", "browsing": "بیننده‌ها", "no_replies": "هیچ کسی پاسخ نداده است.", - "share_this_category": "به اشتراک‌گذاری این دسته", + "no_new_posts": "هیچ پست جدیدی موجود نیست.", + "share_this_category": "به اشتراک‌گذاری این شاخه", "watch": "نظارت کردن", "ignore": "نادیده گرفتن", - "watch.message": "در حال حاظر شما به روز رسانی های این دسته را دنبال می کنید", - "ignore.message": "در حال حاظر شما به روز رسانی های این دسته را نادیده میگیرد" + "watch.message": "در حال حاظر شما به روز رسانی های این شاخه را دنبال می کنید", + "ignore.message": "در حال حاظر شما به روز رسانی های این شاخه را نادیده میگیرد" } \ No newline at end of file diff --git a/public/language/fa_IR/error.json b/public/language/fa_IR/error.json index c646650723..22c980a709 100644 --- a/public/language/fa_IR/error.json +++ b/public/language/fa_IR/error.json @@ -2,7 +2,7 @@ "invalid-data": "داده(های) نامعتبر", "not-logged-in": "به نظر میرسد که با حساب کاربری وارد نشده اید.", "account-locked": "حساب کاربری شما موقتاً مسدود شده است.", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "استفاده از جستجو نیازمند ورود با نام کاربری و رمز عبور است. لطفا ابتدا وارد شوید. ", "invalid-cid": "شناسه دسته نامعتبر است.", "invalid-tid": "شناسه جستار نامعتبر است.", "invalid-pid": "شناسه دیدگاه نامعتبر است.", @@ -39,7 +39,7 @@ "post-edit-duration-expired": "شما تنها می توانید %1 ثانیه پس از فرستادن دیدگاه آن‌را ویرایش کنید", "still-uploading": "خواهشمندیم تا پایان بارگذاری‌ها شکیبا باشید.", "content-too-short": "خواهشمندیم دیدگاه بلندتری بنویسید. دیدگاه‌ها دست‌کم باید 1% نویسه داشته باشند.", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", + "content-too-long": "لطفا طول مطلب را کوتاه تر کنید. طول پست نمیتواند بیشتر از %1 کاراکتر باشد.", "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", diff --git a/public/language/fa_IR/global.json b/public/language/fa_IR/global.json index 773931e3ce..664ac9b73a 100644 --- a/public/language/fa_IR/global.json +++ b/public/language/fa_IR/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 از %2", "pagination.enter_index": "شماره را وارد کنید", "header.admin": "مدیر", - "header.categories": "Categories", + "header.categories": "شاخه ها", "header.recent": "تازه‌ها", "header.unread": "نخوانده‌ها", "header.tags": "برچسب‌ها", @@ -51,7 +51,7 @@ "views": "بازدیدها", "reputation": "اعتبار", "read_more": "بیشتر بخوانید", - "more": "More", + "more": "بیشتر", "posted_ago_by_guest": "ارسال شده در %1 توسط مهمان", "posted_ago_by": "ارسال شده در %1 توسط %2", "posted_ago": "ارسال شده در %1", diff --git a/public/language/fa_IR/groups.json b/public/language/fa_IR/groups.json index 4309d8390a..023b83da7d 100644 --- a/public/language/fa_IR/groups.json +++ b/public/language/fa_IR/groups.json @@ -6,20 +6,20 @@ "no_groups_found": "گروهی برای دیدن وجود ندارد", "pending.accept": "قبول", "pending.reject": "رد", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", - "cover-instructions": "کشیدن و انداختن عکس، به محل بکشید، و ذخیره را بزنید", + "pending.accept_all": "پذیرش همه", + "pending.reject_all": "رد همه", + "pending.none": "در حال حاضر هیچ عضوی در انتظار نیست", + "invited.none": "در حال حاضر هیچ کسی دعوت نشده است", + "invited.uninvite": "لغو دعوت", + "invited.search": "جستجو به دنبال کاربرانی به جهت دعوت به این گروه", + "cover-instructions": "عکس را با کلیک موس بگیرید و بکشید به محل و رها کنید، سپس ذخیره را بزنید", "cover-change": "تغییر", "cover-save": "ذخیره", "cover-saving": "در حال ذخیره کردن", "details.title": "جزئیات گروه", "details.members": "لیست اعضا", "details.pending": "اعضای در انتظار", - "details.invited": "Invited Members", + "details.invited": "اعضای دعوت شده", "details.has_no_posts": "اعضای این گروه هیچ دیدگاهی ایجاد نکرده اند", "details.latest_posts": "آخرین دیدگاه ها", "details.private": "خصوصی", @@ -38,12 +38,13 @@ "details.private_help": "اگر فعال باشد، پیوستن به گروه مستلزم موافقت صاحب گروه است", "details.hidden": "پنهان", "details.hidden_help": "اگر فعال باشد، این گروه در فهرست گروه‌ها پیدا نمی‌شود و کاربران باید دستی فراخوانده شوند", - "details.delete_group": "Delete Group", + "details.delete_group": "حذف گروه", "event.updated": "جزییات گروه با موفقیت به روز گردید", "event.deleted": "گروه \"%1\" حدف شد", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "دعوت را قبول میکنم", + "membership.invitation-pending": "در انتظار تایید", + "membership.join-group": "ورود به گروه", + "membership.leave-group": "خروج از گروه", + "membership.reject": "رد", + "new-group.group_name": "نام گروه" } \ No newline at end of file diff --git a/public/language/fa_IR/topic.json b/public/language/fa_IR/topic.json index 849d261a67..1a0f2d7505 100644 --- a/public/language/fa_IR/topic.json +++ b/public/language/fa_IR/topic.json @@ -1,7 +1,7 @@ { "topic": "جُستار", - "topic_id": "ID جستار", - "topic_id_placeholder": "ID جستار را بنویسید", + "topic_id": "شناسه جستار", + "topic_id_placeholder": "شناسه جستار را بنویسید", "no_topics_found": "هیچ جستاری یافت نشد!", "no_posts_found": "دیدگاهی یافت نشد!", "post_is_deleted": "این دیدگاه پاک شده!", diff --git a/public/language/fa_IR/user.json b/public/language/fa_IR/user.json index 3f6f0a27ee..819755917f 100644 --- a/public/language/fa_IR/user.json +++ b/public/language/fa_IR/user.json @@ -6,19 +6,19 @@ "postcount": "تعداد دیدگاه ها", "email": "رایانامه", "confirm_email": "تأیید رایانامه", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "مسدود کردن حساب کاربری", + "ban_account_confirm": "از مسدود کردن این کاربر اطمینان دارید؟", + "unban_account": "آزاد کردن حساب کاربری", "delete_account": "حذف حساب کاربری", "delete_account_confirm": "آیا مطمئنید که میخواهید حساب کاربری خود را حذف کنید؟
این عمل غیر قابل بازگشت است و شما قادر نخواهید بود هیچ کدام از اطلاعات خود را بازیابی کنید./strong>

برای تایید حذف این حساب کاربری، نام کاربری خود را وارد کنید", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", - "fullname": "نام کامل", + "delete_this_account_confirm": " آیا مطمئنید که میخواهید این حساب کاربری را حذف کنید؟
این عمل غیر قابل بازگشت است و شما قادر نخواهید بود هیچ کدام از اطلاعات را بازیابی کنید.

", + "fullname": "نام و نام خانوادگی", "website": "تارنما", "location": "محل سکونت", "age": "سن", "joined": "عضو شده", "lastonline": "آخرین حضور", - "profile": "نمایه", + "profile": "پروفایل", "profile_views": "بازدیدهای نمایه", "reputation": "اعتبار", "favourites": "پسندها", @@ -73,7 +73,7 @@ "has_no_watched_topics": "این کاربر تا به حال هیچ جستاری را نپاییده است", "email_hidden": "رایانامه پنهان شده", "hidden": "پنهان", - "paginate_description": "Paginate topics and posts instead of using infinite scroll", + "paginate_description": "صفحه بندی و نمایش جستارها و دیدگاه‌ها به جای نمایش بر اساس اسکرول موس", "topics_per_page": "شمار جستارها در هر برگه", "posts_per_page": "شمار دیدگاه‌ها در هر برگه", "notification_sounds": "پخش صدا زمانی که یک آگاه سازی دریافت میکنید", diff --git a/public/language/fi/category.json b/public/language/fi/category.json index 0c0233c3b1..7dacbad5ae 100644 --- a/public/language/fi/category.json +++ b/public/language/fi/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Uusi aihe", "guest-login-post": "Kirjaudu sisään voidaksesi kirjoittaa viesti", "no_topics": "Tässä kategoriassa ei ole yhtään aihetta.
Miksi et aloittaisi uutta?", "browsing": "selaamassa", "no_replies": "Kukaan ei ole vastannut", + "no_new_posts": "No new posts.", "share_this_category": "Jaa tämä kategoria", "watch": "Watch", "ignore": "Sivuuta", diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index a2cf33e9ce..a0b9c56f9c 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/fr/category.json b/public/language/fr/category.json index 0e0a238c35..e051891b6a 100644 --- a/public/language/fr/category.json +++ b/public/language/fr/category.json @@ -1,12 +1,15 @@ { + "category": "Catégorie", + "subcategories": "Sous-catégories", "new_topic_button": "Nouveau sujet", "guest-login-post": "Se connecter pour poster", "no_topics": "Il n'y a aucun sujet dans cette catégorie.
Pourquoi ne pas en créer un ?", "browsing": "parcouru par", "no_replies": "Personne n'a répondu", + "no_new_posts": "Pas de nouveau message", "share_this_category": "Partager cette catégorie", "watch": "Suivre", - "ignore": "Ignorer", + "ignore": "Ne plus suivre", "watch.message": "Vous suivez désormais les mises à jour de cette catégorie.", "ignore.message": "Vous ne suivez plus les mises jour de cette catégorie." } \ No newline at end of file diff --git a/public/language/fr/error.json b/public/language/fr/error.json index 4b621eea44..4d92d5a7f0 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "En tant que nouvel utilisateur, vous ne pouvez poster que toutes les %1 seconde(s) jusqu'à ce que vous obteniez une réputation de %2 - patientez avant de publier de nouveau.", "tag-too-short": "Veuillez entrer un mot-clé plus long. Les mots-clés doivent contenir au moins %1 caractère(s).", "tag-too-long": "Veuillez entrer un mot-clé plus court. Les mot-clés ne peuvent faire plus de %1 caractère(s).", - "not-enough-tags": "Pas assez de tags. Les sujets doivent avoir au moins %1 tag(s).", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Pas assez de mots-clés. Les sujets doivent avoir au moins %1 mots-clé(s).", + "too-many-tags": "Trop de mots-clés. Les sujets ne peuvent avoir au plus que %1 mots-clé(s).", "file-too-big": "La taille maximale autorisée pour un fichier est de %1 kb. Veuillez envoyer un fichier plus petit.", "cant-vote-self-post": "Vous ne pouvez pas voter pour vos propres messages", "already-favourited": "Vous avez déjà mis ce message en favoris", diff --git a/public/language/fr/global.json b/public/language/fr/global.json index 75faa6dc2e..c9a2550c37 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 sur %2", "pagination.enter_index": "Entrer un numéro de page", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Catégories", "header.recent": "Récent", "header.unread": "Non lu", "header.tags": "Mots-clés", diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index 35488f192e..75bee36650 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Si cette case est cochée, rejoindre un groupe nécessite l'accord d'un propriétaire du groupe.", "details.hidden": "Masqué", "details.hidden_help": "Si cette case est cochée, ce groupe n'est pas affiché dans la liste des groupes, et les utilisateurs devront être invités manuellement.", - "details.delete_group": "Delete Group", + "details.delete_group": "Supprimer le groupe", "event.updated": "Les détails du groupe ont été mis à jour", "event.deleted": "Le groupe \"%1\" a été supprimé", "membership.accept-invitation": "Accepter l'invitation", "membership.invitation-pending": "Invitation en attente", "membership.join-group": "Rejoindre le groupe", "membership.leave-group": "Quitter le groupe", - "membership.reject": "Refuser" + "membership.reject": "Refuser", + "new-group.group_name": "Nom du groupe :" } \ No newline at end of file diff --git a/public/language/he/category.json b/public/language/he/category.json index 03fb624861..c2ff49eeb1 100644 --- a/public/language/he/category.json +++ b/public/language/he/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "נושא חדש", "guest-login-post": "Log in to post", "no_topics": "קטגוריה זו ריקה מנושאים.
למה שלא תנסה להוסיף נושא חדש?", "browsing": "צופים בנושא זה כעת", "no_replies": "אין תגובות", + "no_new_posts": "No new posts.", "share_this_category": "שתף קטגוריה זו", "watch": "Watch", "ignore": "התעלם", diff --git a/public/language/he/groups.json b/public/language/he/groups.json index 0cb4cafcb8..b1637e28ac 100644 --- a/public/language/he/groups.json +++ b/public/language/he/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/hu/category.json b/public/language/hu/category.json index e77bbe78a5..7bd3e55ebe 100644 --- a/public/language/hu/category.json +++ b/public/language/hu/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Új témakör", "guest-login-post": "A hozzászóláshoz be kell lépni", "no_topics": "Nincs nyitva egy téma sem ebben a kategóriában.Hozzunk létre egyet.", "browsing": "böngészés", "no_replies": "Nem érkezett válasz", + "no_new_posts": "No new posts.", "share_this_category": "Kategória megosztása", "watch": "Watch", "ignore": "Ignorálás", diff --git a/public/language/hu/groups.json b/public/language/hu/groups.json index a5332f50b4..5c1ff14024 100644 --- a/public/language/hu/groups.json +++ b/public/language/hu/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/id/category.json b/public/language/id/category.json index 46613ff1ad..95e0e1bc1d 100644 --- a/public/language/id/category.json +++ b/public/language/id/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Topik Baru", "guest-login-post": "Log in to post", "no_topics": "Tidak ada topik dikategori ini
Mengapa anda tidak mencoba membuat yang baru?", "browsing": "penjelajahan", "no_replies": "Belum ada orang yang menjawab", + "no_new_posts": "No new posts.", "share_this_category": "Bagikan kategori ini", "watch": "Watch", "ignore": "Abaikan", diff --git a/public/language/id/groups.json b/public/language/id/groups.json index d67ca443d1..b3b60e6d73 100644 --- a/public/language/id/groups.json +++ b/public/language/id/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/id/topic.json b/public/language/id/topic.json index 5f119c3e80..7f6ae0f2de 100644 --- a/public/language/id/topic.json +++ b/public/language/id/topic.json @@ -2,10 +2,10 @@ "topic": "Topik", "topic_id": "ID Topik", "topic_id_placeholder": "Masukkan ID topik", - "no_topics_found": "Tidak topik yang ditemukan!", + "no_topics_found": "Topik tidak ditemukan!", "no_posts_found": "Tidak ada posting yang ditemukan!", "post_is_deleted": "Posting ini telah dihapus!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Topik terhapus!", "profile": "Profil", "posted_by": "Dibuat oleh %1", "posted_by_guest": "Dibuat oleh Tamu", @@ -13,7 +13,7 @@ "notify_me": "Beritahukan balasan baru untuk topik ini", "quote": "Kutip", "reply": "Balas", - "guest-login-reply": "Log in to reply", + "guest-login-reply": "Log in untuk membalas", "edit": "Ubah", "delete": "Hapus", "purge": "Musnahkan", @@ -76,7 +76,7 @@ "fork_no_pids": "Tidak ada posting yang dipilih!", "fork_success": "Topik berhasil dicabangkan! Klik disini untuk menuju topik yang telah dicabangkan.", "composer.title_placeholder": "Masukkan judul topik di sini...", - "composer.handle_placeholder": "Name", + "composer.handle_placeholder": "Nama", "composer.discard": "Buang", "composer.submit": "Kirim", "composer.replying_to": "Membalas ke %1", @@ -96,5 +96,5 @@ "oldest_to_newest": "Terlama ke Terbaru", "newest_to_oldest": "Terbaru ke Terlama", "most_votes": "Vote terbanyak", - "most_posts": "Most posts" + "most_posts": "Postingan terbanyak" } \ No newline at end of file diff --git a/public/language/it/category.json b/public/language/it/category.json index 224bd2b833..2e2288985d 100644 --- a/public/language/it/category.json +++ b/public/language/it/category.json @@ -1,9 +1,12 @@ { + "category": "Categoria", + "subcategories": "Sottocategorie", "new_topic_button": "Nuova Discussione", "guest-login-post": "Effettua il Log in per pubblicare", "no_topics": "Non ci sono discussioni in questa categoria.
Perché non ne inizi una?", "browsing": "visualizzando", "no_replies": "Nessuno ha risposto", + "no_new_posts": "Nessun nuovo post.", "share_this_category": "Condividi questa Categoria", "watch": "Osserva", "ignore": "Ignora", diff --git a/public/language/it/email.json b/public/language/it/email.json index 3593b754ed..7bdd9cbfaa 100644 --- a/public/language/it/email.json +++ b/public/language/it/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Richiesta di reset della password - %1!", "welcome-to": "Benvenuto in %1", - "invite": "Invitation from %1", + "invite": "Invito da %1", "greeting_no_name": "Ciao", "greeting_with_name": "Ciao %1", "welcome.text1": "Grazie per esserti registrato su %1!", "welcome.text2": "Per attivare completamente il tuo account dobbiamo verificare che sei il proprietario dell'indiritto email con cui ti sei registrato.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "Un Amministratora ha accettato la tua registrazione. Puoi adesso collegarti con il tuo nome utente e la tua password.", "welcome.cta": "Clicca qui per confermare il tuo indirizzo email", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 ti ha invitato a entrare in %2", + "invitation.ctr": "Clicca qui per creare il tuo account.", "reset.text1": "Abbiamo ricevuto una richiesta di reset della tua password, probabilmente perché l'hai dimenticata. Se non è così si prega di ignorare questa email.", "reset.text2": "Per confermare il reset della password per favore clicca il seguente link:", "reset.cta": "Clicca qui per resettare la tua password", diff --git a/public/language/it/error.json b/public/language/it/error.json index 308a5afa08..6ec26dda02 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -2,7 +2,7 @@ "invalid-data": "Dati non validi", "not-logged-in": "Non sembri essere loggato.", "account-locked": "Il tuo account è stato bloccato temporaneamente", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "La ricerca richiede un account! Si prega di loggarsi o registrarsi!", "invalid-cid": "ID Categoria non valido", "invalid-tid": "ID Topic non valido", "invalid-pid": "ID Post non valido", @@ -21,11 +21,11 @@ "email-not-confirmed-chat": "Non potrai chattare finchè non avrai confermato la tua email, per favore clicca qui per farlo ora.", "no-email-to-confirm": "Questo forum richiede la conferma dell'indirizzo email, per favore clicca qui per inserirne uno", "email-confirm-failed": "Non possiamo confermare la tua email, per favore prova ancora più tardi.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "Email di conferma già inviata, per favore attendere %1 minuti per richiederne un'altra.", "username-too-short": "Nome utente troppo corto", "username-too-long": "Nome utente troppo lungo", "user-banned": "Utente bannato", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Devi attendere %1 secondi prima di creare il tuo primo post", "no-category": "La Categoria non esiste", "no-topic": "Il Topic non esiste", "no-post": "Il Post non esiste", @@ -36,24 +36,24 @@ "no-emailers-configured": "Nessun plugin per le email è caricato, quindi la mail di test non può essere inviata", "category-disabled": "Categoria disabilitata", "topic-locked": "Discussione Bloccata", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Ti è consentito modificare un post per %1 secondi dopo averlo inviato", "still-uploading": "Per favore attendere il completamento degli uploads.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Inserisci un testo più lungo. Il messaggio deve contenere almeno %1 caratteri.", + "content-too-long": "Inserisci un post più breve. I post non possono essere più lunghi di %1 caratteri.", + "title-too-short": "Inserisci un titolo più lungo. I titoli devono contenere almeno %1 caratteri.", + "title-too-long": "Inserisci un titolo più corto. I titoli non possono essere più lunghi di %1 caratteri.", + "too-many-posts": "È possibile inserire un Post ogni %1 secondi - si prega di attendere prima di postare di nuovo", + "too-many-posts-newbie": "Come nuovo utente puoi postare solamente una volta ogni %1 secondi finché non hai raggiunto un livello di reputazione %2 - per favore attendi prima di scrivere ancora", + "tag-too-short": "Inserisci un tag più lungo. I tag devono contenere almeno %1 caratteri.", + "tag-too-long": "Per favore inserisci un tag più corto. I tags non dovrebbero essere più lunghi di %1 caratteri", + "not-enough-tags": "Tag non sufficienti. Gli argomenti devono avere almeno %1 Tag", + "too-many-tags": "Troppi Tag. Gli argomenti non possono avere più di %1 Tag", + "file-too-big": "La dimensione massima consentita è di %1 kB - si prega di caricare un file più piccolo", "cant-vote-self-post": "Non puoi votare il tuo stesso post", "already-favourited": "Hai già inserito tra i preferiti questo post", "already-unfavourited": "Hai già inserito tra i Non Preferiti questo post", "cant-ban-other-admins": "Non puoi bannare altri amministratori!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Sei l'unico Amministratore. Aggiungi un altro amministratore prima di rimuovere il tuo ruolo", "invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1", "invalid-image-extension": "Estensione immagine non valida", "invalid-file-type": "Tipo di file non valido. I formati consentiti sono: %1", @@ -62,18 +62,18 @@ "group-name-change-not-allowed": "Il cambio di nome al Gruppo non è consentito", "group-already-member": "Fai già parte di questo gruppo", "group-needs-owner": "Questo gruppo richiede almeno un proprietario.", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-already-invited": "Questo utente è già stato invitato", + "group-already-requested": "La tua richiesta di partecipazione è già stata inviata", "post-already-deleted": "Questo Post è già stato cancellato", "post-already-restored": "Questo Post è già stato ripristinato", "topic-already-deleted": "Questo Topic è già stato cancellato", "topic-already-restored": "Questo Topic è già stato ripristinato", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Non puoi svuotare il primo messaggio, elimina invece l'intera discussione", "topic-thumbnails-are-disabled": "Le anteprime della Discussione sono disabilitate.", "invalid-file": "File non valido", "uploads-are-disabled": "Uploads disabilitati", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Spiacenti, la tua firma non può essere più lunga di %1 caratteri.", + "about-me-too-long": "Spiacenti, il testo non può essere più lungo di %1 caratteri.", "cant-chat-with-yourself": "Non puoi chattare con te stesso!", "chat-restricted": "Questo utente ha ristretto i suoi messaggi in chat alle persone che segue. Per poter chattare con te ti deve prima seguire.", "too-many-messages": "Hai inviato troppi messaggi, aspetta un attimo.", @@ -81,7 +81,7 @@ "downvoting-disabled": "Il Downvoting è disabilitato", "not-enough-reputation-to-downvote": "Non hai i privilegi per votare negativamente questo post", "not-enough-reputation-to-flag": "Tu non hai abbastanza reputazione per segnalare questo Post", - "already-flagged": "You have already flagged this post", + "already-flagged": "Hai già messo marcato questo post", "reload-failed": "NodeBB ha incontrato un problema durante il ricaricamento: \"%1\". NodeBB continuerà a servire gli assets esistenti lato client, così puoi annullare quello che hai fatto prima di ricaricare.", "registration-error": "Errore nella registrazione", "parse-error": "Qualcosa è andato storto durante l'analisi della risposta proveniente dal server", diff --git a/public/language/it/global.json b/public/language/it/global.json index 47269df850..a015eb3476 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 di %2", "pagination.enter_index": "Inserisci numero", "header.admin": "Amministratore", - "header.categories": "Categories", + "header.categories": "Categorie", "header.recent": "Recenti", "header.unread": "Non letti", "header.tags": "Tags", @@ -51,7 +51,7 @@ "views": "Visualizzazioni", "reputation": "Reputazione", "read_more": "per saperne di più", - "more": "More", + "more": "Altro", "posted_ago_by_guest": "scritto %1 di Ospite", "posted_ago_by": "scritto %1 di %2", "posted_ago": "postato %1", diff --git a/public/language/it/groups.json b/public/language/it/groups.json index 1718c967ac..1f30115a7d 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "Non ci sono gruppi da vedere", "pending.accept": "Accetta", "pending.reject": "Rigetta", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Accetta tutti", + "pending.reject_all": "Rifiuta tutti", + "pending.none": "Non ci sono membri in attesa", + "invited.none": "Non ci sono inviti in sospeso", + "invited.uninvite": "Revoca invito", + "invited.search": "Ricerca un utente da invitare in questo gruppo", "cover-instructions": "Drag and Drop una fotografia, spostarla ad una posizione, e premere Salva", "cover-change": "Cambia", "cover-save": "Salva", @@ -19,7 +19,7 @@ "details.title": "Dettagli Gruppo", "details.members": "Lista Membri", "details.pending": "Membri in attesa", - "details.invited": "Invited Members", + "details.invited": "Membri invitati", "details.has_no_posts": "I membri di questo gruppo non hanno ancora postato.", "details.latest_posts": "Ultimi Post", "details.private": "Privato", @@ -38,12 +38,13 @@ "details.private_help": "Se abilitato, l'ingresso ai gruppi richiede l'approvazione di uno dei proprietari", "details.hidden": "Nascosto", "details.hidden_help": "Se abilitato, questo gruppo non sarà visibile nella lista dei gruppi e gli utenti dovranno essere invitati manualmente", - "details.delete_group": "Delete Group", + "details.delete_group": "Elimina il Gruppo", "event.updated": "I dettagli del Gruppo sono stati aggiornati", "event.deleted": "Il gruppo \"%1\" è stato eliminato", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Accetta l'invito", + "membership.invitation-pending": "Invito in sospeso", + "membership.join-group": "Entra nel Gruppo", + "membership.leave-group": "Lascia il Gruppo", + "membership.reject": "Rifiuta", + "new-group.group_name": "Nome Gruppo:" } \ No newline at end of file diff --git a/public/language/it/register.json b/public/language/it/register.json index b345928150..373ca07801 100644 --- a/public/language/it/register.json +++ b/public/language/it/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Altri metodi di registrazione", "terms_of_use": "Termini di Utilizzo", "agree_to_terms_of_use": "Accetto i Termini di Utilizzo", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "La tua registrazione è stata aggiunta alla coda di moderazione. Riceverai una mail quando verrà accettata da un amministratore." } \ No newline at end of file diff --git a/public/language/it/unread.json b/public/language/it/unread.json index 415f8b5d3c..e2e6018a47 100644 --- a/public/language/it/unread.json +++ b/public/language/it/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Segna come Letto", "selected": "Selezionati", "all": "Tutti", - "all_categories": "All categories", + "all_categories": "Tutte le categorie", "topics_marked_as_read.success": "Discussione marcata come letta!" } \ No newline at end of file diff --git a/public/language/it/user.json b/public/language/it/user.json index 692831ff5c..f4e1a869d7 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -6,12 +6,12 @@ "postcount": "Numero post", "email": "Email", "confirm_email": "Conferma Email", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "BAN dell'account", + "ban_account_confirm": "Sei sicuro di voler bannare questo utente?", + "unban_account": "Togli il BAN", "delete_account": "Elimina Account", "delete_account_confirm": "Sei sicuro di voler cancellare il tuo account?
Questa azione è irreversibile e non potrai recuperare nessun dato

Inserisci il tuo username per confermare che vuoi eliminare questo account.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Sei sicuro di voler cancellare questo account?
Questa azione è irreversibile e non potrai recuperare nessun dato

", "fullname": "Nome e Cognome", "website": "Sito Internet", "location": "Località", @@ -25,7 +25,7 @@ "watched": "Osservati", "followers": "Da chi è seguito", "following": "Chi segue", - "aboutme": "About me", + "aboutme": "Su di me", "signature": "Firma", "gravatar": "Gravatar", "birthday": "Data di nascita", @@ -68,21 +68,21 @@ "settings-require-reload": "Alcuni cambiamenti di impostazioni richiedono un ricaricamento. Clicca qui per ricaricare la pagina.", "has_no_follower": "Questo utente non è seguito da nessuno :(", "follows_no_one": "Questo utente non segue nessuno :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Questo utente non ha ancora scritto niente.", + "has_no_topics": "Questo utente non ha ancora avviato discussioni.", + "has_no_watched_topics": "Questo utente non sta osservando discussioni.", "email_hidden": "Email Nascosta", "hidden": "nascosta", - "paginate_description": "Paginate topics and posts instead of using infinite scroll", + "paginate_description": "Non utilizzare lo scroll infinito per discussioni e messaggi", "topics_per_page": "Discussioni per Pagina", "posts_per_page": "Post per Pagina", - "notification_sounds": "Play a sound when you receive a notification", + "notification_sounds": "Riproduci un suono quando si riceve una notifica", "browsing": "Impostazioni di Navigazione", - "open_links_in_new_tab": "Open outgoing links in new tab", + "open_links_in_new_tab": "Apri i link web in una nuova pagina", "enable_topic_searching": "Abilita la ricerca negli argomenti", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "follow_topics_you_reply_to": "Follow topics that you reply to", - "follow_topics_you_create": "Follow topics you create", + "topic_search_help": "Se abilitata, la ricerca negli argomenti ignorerà il comportamento predefinito del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo", + "follow_topics_you_reply_to": "Segui le discussioni a cui hai risposto", + "follow_topics_you_create": "Segui le discussioni che hai iniziato", "grouptitle": "Seleziona il titolo del gruppo che vorresti vedere", "no-group-title": "Nessun titolo al gruppo" } \ No newline at end of file diff --git a/public/language/it/users.json b/public/language/it/users.json index d9a9e68427..5fc544d8ac 100644 --- a/public/language/it/users.json +++ b/public/language/it/users.json @@ -9,13 +9,13 @@ "filter-by": "Filtra per", "online-only": "Solo online", "picture-only": "Solo con foto", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Invita", + "invitation-email-sent": "Una mail di invito è stata inviata a %1", + "user_list": "Lista utenti", + "recent_topics": "Discussioni Recenti", + "popular_topics": "Discussioni Popolari", + "unread_topics": "Discussioni non lette", + "categories": "Categorie", + "tags": "Tag", + "map": "Mappa" } \ No newline at end of file diff --git a/public/language/ja/category.json b/public/language/ja/category.json index 8d792897c4..ad17f20b8d 100644 --- a/public/language/ja/category.json +++ b/public/language/ja/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "新規スレッド", "guest-login-post": "Log in to post", "no_topics": "まだスレッドはありません.
一番目のスレッドを書いてみないか?", "browsing": "閲覧中", "no_replies": "返事はまだありません", + "no_new_posts": "No new posts.", "share_this_category": "この板を共有", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/ja/groups.json b/public/language/ja/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/ja/groups.json +++ b/public/language/ja/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/ko/category.json b/public/language/ko/category.json index e2a4059181..36b116392d 100644 --- a/public/language/ko/category.json +++ b/public/language/ko/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "새 주제 생성", "guest-login-post": "로그인", "no_topics": "이 카테고리에는 생성된 주제가 없습니다.
먼저 주제를 생성해 보세요.", "browsing": "이 주제를 읽고 있는 사용자", "no_replies": "답글이 없습니다.", + "no_new_posts": "No new posts.", "share_this_category": "이 카테고리를 공유", "watch": "관심 주제", "ignore": "관심 해제", diff --git a/public/language/ko/groups.json b/public/language/ko/groups.json index ce5f1c3912..b2e8a8ec48 100644 --- a/public/language/ko/groups.json +++ b/public/language/ko/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/lt/category.json b/public/language/lt/category.json index 3fc832a8e4..9659f81503 100644 --- a/public/language/lt/category.json +++ b/public/language/lt/category.json @@ -1,12 +1,15 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nauja tema", "guest-login-post": "Prisijungti įrašų paskelbimui", "no_topics": "Šioje kategorijoje temų nėra.
Kodėl gi jums nesukūrus naujos?", "browsing": "naršo", "no_replies": "Niekas dar neatsakė", + "no_new_posts": "No new posts.", "share_this_category": "Pasidalinti šią kategoriją", - "watch": "Watch", + "watch": "Stebėti", "ignore": "Nepaisyti", - "watch.message": "You are now watching updates from this category", - "ignore.message": "You are now ignoring updates from this category" + "watch.message": "Jūs dabar stebite atnaujinimus iš šios kategorijos", + "ignore.message": "Jūs dabar ignoruojate atnaujinimus iš šios kategorijos" } \ No newline at end of file diff --git a/public/language/lt/email.json b/public/language/lt/email.json index 12fd68ced9..ebab5de306 100644 --- a/public/language/lt/email.json +++ b/public/language/lt/email.json @@ -1,32 +1,32 @@ { - "password-reset-requested": "Password Reset Requested - %1!", + "password-reset-requested": "Slaptažodžio atstatymas būtinas - %1!", "welcome-to": "Sveiki atvykę į %1", - "invite": "Invitation from %1", + "invite": "Pakvietimas nuo %1", "greeting_no_name": "Sveiki", "greeting_with_name": "Sveiki %1", - "welcome.text1": "Thank you for registering with %1!", - "welcome.text2": "To fully activate your account, we need to verify that you own the email address you registered with.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text1": "Ačiū kad užsiregistravote %1", + "welcome.text2": "Kad pilnai aktyvuoti jūsų paskira, mums reikia įsitikinti kad jūs tikrai esate el.pašto valdytojas", + "welcome.text3": "Administratorius priemė jūsų prašymą prisijungti prie mūsų. Dabar galite prisijungti su savo slapyvardžiu/slaptažodžiu", "welcome.cta": "El. adreso patvirtinimui spauskite čia", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", - "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", - "reset.text2": "To continue with the password reset, please click on the following link:", + "invitation.text1": "%1 pakvietė tave prisijungti į %2", + "invitation.ctr": "Spauskite čia kad susikurtumėte paskyrą", + "reset.text1": "Mes, gavome prašymą atstatyti jūsų slaptažodį, tikriausiai jūs jį pamiršote. Jeigu problema ne tame, prašome ignoruoti šį laišką", + "reset.text2": "Kad tęsti slaptažodžio atstatymą, prašome paspausti šią nuorodą", "reset.cta": "Slaptažodžio atstatymui spauskite čia", "reset.notify.subject": "Slaptažodis sėkmingai pakeistas", - "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", - "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", + "reset.notify.text1": "Mes tikriname ar jūs tikrai esate %1, jūsų slaptažodis buvo pakeistas sėkmingai", + "reset.notify.text2": "Jeigu jūs neprašėte šito, prašome perspėti administratoriu nedelsiant", "digest.notifications": "Turite neskaitytų pranešimų nuo %1:", - "digest.latest_topics": "Latest topics from %1", + "digest.latest_topics": "Paskutinės temos iš %1", "digest.cta": "Kad aplankyti %1, spauskite čia", - "digest.unsub.info": "This digest was sent to you due to your subscription settings.", - "digest.no_topics": "There have been no active topics in the past %1", - "notif.chat.subject": "New chat message received from %1", + "digest.unsub.info": "Ši santrauka buvo išsiųsta į tavo prenumeratos nustatymus", + "digest.no_topics": "Nebuvo aktyvių temų praeityje %1", + "notif.chat.subject": "Nauja pokalbio žinutė gauta iš %1", "notif.chat.cta": "Pokalbio pratęsimui spauskite čia", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", + "notif.chat.unsub.info": "Šios žinutės perpėjimas buvo išsiųstas į tavo prenumeratos nustatymus", "notif.post.cta": "Spauskite čia norėdami skaityti visą temą", - "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", - "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", + "notif.post.unsub.info": "Šios žinutės perspėjimas buvo išsiųstas į tavo prenumeratos nustatymus", + "test.text1": "Ši žinutė yra bandomoji kad įsitikint, kad vartotojas teisingai nustatė nustatymus tavo NodeBB", "unsub.cta": "Spauskite čia norėdami pakeisti šiuos nustatymus", "closing": "Ačiū!" } \ No newline at end of file diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 9134db77db..c7b5d1f3ba 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -2,7 +2,7 @@ "invalid-data": "Klaidingi duomenys", "not-logged-in": "Atrodo, kad jūs neesate prisijungęs.", "account-locked": "Jūsų paskyra buvo laikinai užrakinta", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "Paieška reikalauja vartotojo - prašome prisijungti arba užsiregistruoti", "invalid-cid": "Klaidingas kategorijos ID", "invalid-tid": "Klaidingas temos ID", "invalid-pid": "Klaidingas pranešimo ID", @@ -18,42 +18,42 @@ "username-taken": "Vartotojo vardas jau užimtas", "email-taken": "El. pašto adresas jau užimtas", "email-not-confirmed": "Jūsų el. paštas nepatvirtintas, prašome paspausti čia norint jį patvirtinti.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", + "email-not-confirmed-chat": "Jūs negalite bendrauti, kol jūsų el.paštas nėra patvirtintas, prašome spausti čia kad aktyvuoti jūsų el.paštą", "no-email-to-confirm": "Šis forumas reikalauja patvirtinimo el. paštu prašome spausti čia el. adreso įrašymui", "email-confirm-failed": "Negalime patvirtinti jūsų el. adreso, prašom bandyti vėliau.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "confirm-email-already-sent": "Patvirtinimo laiškas išsiųstas, prašome palaukti %1 minute(s) kad išsiųstume kita", "username-too-short": "Slapyvardis per trumpas", "username-too-long": "Vartotojo vardas per ilgas", "user-banned": "Vartotojas užblokuotas", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Atsiprašome, jūs įpareigoti palaukti %1 sekunde(s) prieš rašant pirmą pranešimą", "no-category": "Tokios kategorijos nėra", "no-topic": "Tokios temos nėra", "no-post": "Tokio įrašo nėra", "no-group": "Grupė neegzistuoja", "no-user": "Tokio vartotojo nėra", - "no-teaser": "Teaser does not exist", + "no-teaser": "Anonsas neegzistuoja", "no-privileges": "Šiam veiksmui jūs neturite pakankamų privilegijų.", - "no-emailers-configured": "No email plugins were loaded, so a test email could not be sent", + "no-emailers-configured": "Jokie el.pašto priedai nebuvo pakrauti, bandomasis laiškas nebus išsiųstas", "category-disabled": "Kategorija išjungta", "topic-locked": "Tema užrakinta", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Jums galima redaguoti pranešims tik %1 sekunde(s) po parašymo", "still-uploading": "Prašome palaukti kol bus baigti visi kėlimai į serverį", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Prašome parašyti ilgesni pranešimą. Pranešimas turi sudaryti mažiausiai %1 simboli(us)", + "content-too-long": "Prašome parašyti trumpesnį pranešimą. Pranešimas negali sudaryti daugiau %1 simboli(us)", + "title-too-short": "Prašome įvesti ilgesni pavadinimą. Pavadinimas turi sudaryti mažiausiai %1 simboli(us)", + "title-too-long": "Prašome įvesti trumpersnį pavadinimą. Pavadinimas negali sudaryti daugiau %1 simboli(us)", + "too-many-posts": "Jus galite rašyti kas %1 sekunde(s) - prašome palaukti prieš rašant dar kartą", + "too-many-posts-newbie": "Kadangi esate naujas narys, jūs galite tik rašyti kas %1 sekunde(s) kol jūs pasieksite %2 reputacija - prašome palaukti prieš rašant dar kartą", + "tag-too-short": "Prašome įvesti ilgesnę žymą. Žyma turi sudaryti mažiausiai %1 simboli(us)", + "tag-too-long": "Prašome įvesti trumpesnę žymą. Žyma turi būti ne ilgesni negu %1 simboli(us)", + "not-enough-tags": "Neužteka žymių. Temos turi turėti mažiausiai %1 žyme(s)", + "too-many-tags": "Per daug žymių. Temos turi turėti daugiausiai %1 žyme(s)", + "file-too-big": "Didžiausias įkelimo dydis yra %1 kB - prašome kelti mažesni failą", "cant-vote-self-post": "Jūs negalite balsuoti už savo pranešimą", - "already-favourited": "You have already favourited this post", - "already-unfavourited": "You have already unfavourited this post", + "already-favourited": "Jums jau patinka šis pranešimas", + "already-unfavourited": "Jums jau nebepatinka šis pranešimas", "cant-ban-other-admins": "Jūs negalite užblokuoti kitų administratorių!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Jūs esate vienintelis administratorius. Pridėkite kitą vartotoja kaip administratorių prieš pašalindamas save", "invalid-image-type": "Neteisingas vaizdo tipas. Leidžiami tipai :%1", "invalid-image-extension": "Neteisingas vaizdo plėtinys", "invalid-file-type": "Neteisingas failo tipas. Leidžiami tipai: %1", @@ -61,30 +61,30 @@ "group-already-exists": "Tokia grupė jau egzistuoja", "group-name-change-not-allowed": "Grupės pavadinimas keitimas neleidžiamas", "group-already-member": "Jūs jau priklausote šiai grupei", - "group-needs-owner": "This group requires at least one owner", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-needs-owner": "Ši grupė reikalauja mažiausiai vieno savininko", + "group-already-invited": "Šis vartotojas jau buvo pakviestas", + "group-already-requested": "Jūsų prašymas dėl narystes jau buvo pateiktas", "post-already-deleted": "Šis įrašas jau buvo ištrintas", "post-already-restored": "Šis įrašas jau atstatytas", "topic-already-deleted": "Ši tema jau ištrinta", "topic-already-restored": "Ši tema jau atkurta", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Jūs negalite išvalyti pagrindinio pranešimo, prašome ištrinkite temą nedelsiant", "topic-thumbnails-are-disabled": "Temos paveikslėliai neleidžiami.", "invalid-file": "Klaidingas failas", "uploads-are-disabled": "Įkėlimai neleidžiami", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Atsiprašome, bet jūsų parašas negali būti ilgesnis negu %1 simbolis (ių)", + "about-me-too-long": "Atsiprašome, bet aprašymas apie jus negali būti ilgesnis negu %1 simbolis (ių)", "cant-chat-with-yourself": "Jūs negalite susirašinėti su savimi!", - "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", + "chat-restricted": "Šis vartotojas apribojo savo žinutes. Jie turi sekti jus kad jūs galėtumėte pradėti bendrauti su jais", "too-many-messages": "Išsiuntėte per daug pranešimų, kurį laiką prašome palaukti.", "reputation-system-disabled": "Reputacijos sistema išjungta.", - "downvoting-disabled": "Downvoting is disabled", + "downvoting-disabled": "Downvoting yra išjungtas", "not-enough-reputation-to-downvote": "Jūs neturite pakankamai reputacijos balsuoti prieš šį pranešimą", - "not-enough-reputation-to-flag": "You do not have enough reputation to flag this post", - "already-flagged": "You have already flagged this post", - "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", + "not-enough-reputation-to-flag": "Jūs neturite pakankamai reputacijos kad įspėti dėl šito pranešimo", + "already-flagged": "Jūs jau pranešėte apie šį pranešimą", + "reload-failed": "NodeBB susidūrė su problema persikraunant: \"%1\", NodeBB pratęs veikti su šiuo klientu. bet jums reiktu patikrinti ką jūs darėte prieš perkraunant NodeBB", "registration-error": "Registracijos klaida", - "parse-error": "Something went wrong while parsing server response", + "parse-error": "Kažkokia klaida įvyko bandant gaut serverio atsaykmą", "wrong-login-type-email": "Prisijungimui prašom naudoti jūsų el. adresą", "wrong-login-type-username": "Prisijungimui prašome naudoti vartotojo vardą" } \ No newline at end of file diff --git a/public/language/lt/global.json b/public/language/lt/global.json index 541becf696..f320a7c376 100644 --- a/public/language/lt/global.json +++ b/public/language/lt/global.json @@ -3,10 +3,10 @@ "search": "Ieškoti", "buttons.close": "Uždaryti", "403.title": "Prieiga negalima", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "Matosi užklupai į ta puslapį kur neturi tam tikrų teisių jį peržiūrėti", + "403.login": "Tikriausiai tu turėtum pabandyt prisijungt?", "404.title": "Nerasta", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "Pasirodo sėdi puslapyje kurio net nėra. Grįžk į namų puslapį.", "500.title": "Vidinė klaida.", "500.message": "Oops! Atrodo, kad kažkas nutiko!", "register": "Registruotis", @@ -22,7 +22,7 @@ "pagination.out_of": "%1 iš %2", "pagination.enter_index": "Įrašykite indeksą", "header.admin": "Administratorius", - "header.categories": "Categories", + "header.categories": "Kategorijos", "header.recent": "Naujausi", "header.unread": "Neskaityti", "header.tags": "Žymos", @@ -51,7 +51,7 @@ "views": "Peržiūros", "reputation": "Reputacija", "read_more": "skaityti plačiau", - "more": "More", + "more": "Daugiau", "posted_ago_by_guest": "parašyta %2 nuo svečio", "posted_ago_by": "parašyta %1 nuo %2", "posted_ago": "parašyta %1", diff --git a/public/language/lt/groups.json b/public/language/lt/groups.json index a6e81d61e8..bbd2c17770 100644 --- a/public/language/lt/groups.json +++ b/public/language/lt/groups.json @@ -3,15 +3,15 @@ "view_group": "Grupės peržiūra", "owner": "Grupės savininkas", "new_group": "Kurti naują grupę", - "no_groups_found": "There are no groups to see", + "no_groups_found": "Nėra grupių kurias būtu galima matyti", "pending.accept": "Priimti", "pending.reject": "Atmesti", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Priimti visus", + "pending.reject_all": "Atmesti visus", + "pending.none": "Nėra pretenduojančių narių šiuo momentu", + "invited.none": "Nėra pakviestu narių šiuo momentu", + "invited.uninvite": "Atšaukti pakvietimą", + "invited.search": "Ieškoti nario kad pakviesti į šią grupę", "cover-instructions": "Vilkite čia nuotrauką, perkelkite į reikalingą poziciją ir spauskite Save", "cover-change": "Keisti", "cover-save": "Saugoti", @@ -19,31 +19,32 @@ "details.title": "Grupės detalės", "details.members": "Narių sąrašas", "details.pending": "Laukiantys nariai", - "details.invited": "Invited Members", + "details.invited": "Pakviesti nariai", "details.has_no_posts": "Šios grupės nariai neatliko jokių įrašų.", "details.latest_posts": "Vėliausi įrašai", "details.private": "Asmeniška", - "details.grant": "Grant/Rescind Ownership", - "details.kick": "Kick", - "details.owner_options": "Group Administration", + "details.grant": "Duoti/Atšaukti Nuosavybę", + "details.kick": "Išmesti", + "details.owner_options": "Grupės Administratorius", "details.group_name": "Grupės pavadinimas", - "details.member_count": "Member Count", - "details.creation_date": "Creation Date", + "details.member_count": "Narių skaičiuotuvas", + "details.creation_date": "Sukūrimo Data", "details.description": "Aprašymas", - "details.badge_preview": "Badge Preview", + "details.badge_preview": "Ženklelio Peržiūra", "details.change_icon": "Pakeisti paveikslėlį", "details.change_colour": "Pakeisti spalvą", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", + "details.badge_text": "Ženklelio Tekstas", + "details.userTitleEnabled": "Parodyti Ženklelį", + "details.private_help": "Jeigu įjungta, prisijungt prie grupių reikalingas patvirtinimas iš grupės administratoriaus", "details.hidden": "Paslėptas", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "details.delete_group": "Delete Group", + "details.hidden_help": "Jeigu įjungta, ši grupė bus nerodo grupių sąraše, ir vartotojus reikės kviest rankiniu būdu", + "details.delete_group": "Ištrinti grupe", "event.updated": "Grupės informacija atnaujinta", "event.deleted": "Grupė \"%1\" pašalinta", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Priimti Kvietimą", + "membership.invitation-pending": "Pakvietimas Laukiamas", + "membership.join-group": "Prisijungti Prie Grupės", + "membership.leave-group": "Palikti Grupę", + "membership.reject": "Atšaukti", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index 1ad666d77e..17e2994996 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -15,12 +15,12 @@ "chat.seven_days": "7 dienos", "chat.thirty_days": "30 dienų", "chat.three_months": "3 mėnesiai", - "composer.compose": "Compose", - "composer.show_preview": "Show Preview", - "composer.hide_preview": "Hide Preview", + "composer.compose": "Sukomponuoti", + "composer.show_preview": "Rodyti pavyzdį", + "composer.hide_preview": "Slėpti pavyzdį", "composer.user_said_in": "%1 parašė į %2:", "composer.user_said": "%1 parašė:", "composer.discard": "Ar tikrai norite sunaikinti šį pranešimą?", - "composer.submit_and_lock": "Submit and Lock", - "composer.toggle_dropdown": "Toggle Dropdown" + "composer.submit_and_lock": "Pateikti ir užrakinti", + "composer.toggle_dropdown": "Perjungti Nukritimą" } \ No newline at end of file diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json index 11589e9fc5..9da122b4e0 100644 --- a/public/language/lt/notifications.json +++ b/public/language/lt/notifications.json @@ -5,22 +5,22 @@ "mark_all_read": "Žymėti visus perspėjimus kaip skaitytus", "back_to_home": "Atgal į %1", "outgoing_link": "Išeinanti nuoroda", - "outgoing_link_message": "You are now leaving %1.", - "continue_to": "Continue to %1", + "outgoing_link_message": "Jūs dabar paliekate %1", + "continue_to": "Tęsti į %1", "return_to": "Grįžti į %1", "new_notification": "Naujas pranešimas", "you_have_unread_notifications": "Jūs turite neperskaitytų pranešimų.", "new_message_from": "Nauja žinutė nuo %1", - "upvoted_your_post_in": "%1 has upvoted your post in %2.", - "moved_your_post": "%1 has moved your post.", - "moved_your_topic": "%1 has moved your topic.", - "favourited_your_post_in": "%1 has favourited your post in %2.", - "user_flagged_post_in": "%1 flagged a post in %2", + "upvoted_your_post_in": "%1 užbalsavo už jūsų pranešima čia %2.", + "moved_your_post": "%1 perkėlė jūsų pranešimą", + "moved_your_topic": "%1 perkėlė jūsų temą", + "favourited_your_post_in": "%1 patinka jūsų pranešimas čia %2", + "user_flagged_post_in": "%1pagrįso nuomone čia %2", "user_posted_to": "%1 parašė atsaką %2", "user_posted_topic": "%1 paskelbė naują temą: %2", "user_mentioned_you_in": "%1 paminėjo Jus %2", - "user_started_following_you": "%1 started following you.", - "new_register": "%1 sent a registration request.", + "user_started_following_you": "%1 pradėjo sekti tave", + "new_register": "%1 atsiuntė registracijos prašymą", "email-confirmed": "El. paštas patvirtintas", "email-confirmed-message": "Dėkojame už el. pašto patvirtinimą. Jūsų paskyra pilnai aktyvuota.", "email-confirm-error-message": "Įvyko klaida mėginant patvirtinti Jūsų el. pašto adresą. Galbūt kodas yra neteisingas, arba nebegalioajantis.", diff --git a/public/language/lt/pages.json b/public/language/lt/pages.json index 933fd00512..067b94197f 100644 --- a/public/language/lt/pages.json +++ b/public/language/lt/pages.json @@ -5,8 +5,8 @@ "recent": "Paskutinės temos", "users": "Registruoti vartotojai", "notifications": "Pranešimai", - "tags": "Tags", - "tag": "Topics tagged under \"%1\"", + "tags": "Žymos", + "tag": "Temos su šia žymą \"%1\"", "user.edit": "Redaguojama \"%1\"", "user.following": "Vartotojas %1 seka", "user.followers": "Žmonės, kurie seka %1", @@ -15,7 +15,7 @@ "user.groups": "%1's grupės", "user.favourites": "Vartotojo %1 mėgstami pranešimai", "user.settings": "Vartotojo nustatymai", - "user.watched": "Topics watched by %1", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "user.watched": "Temos stebimos %1", + "maintenance.text": "%1 dabar atnaujinimo darbuose. Prašome grįžti vėliau", "maintenance.messageIntro": "Be to, administratorius paliko šį pranešimą:" } \ No newline at end of file diff --git a/public/language/lt/register.json b/public/language/lt/register.json index a4c931e7d7..52cf32608c 100644 --- a/public/language/lt/register.json +++ b/public/language/lt/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Alternatyvūs registracijos būdai", "terms_of_use": "Naudojimo sąlygos", "agree_to_terms_of_use": "Aš sutinku su vartojimo sąlygomis", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Jūsų registracijos prašymas buvo pridėtas į laukiančiųjų sąrašą. Jūs gausite el.paštu laišką kada administratorius patvirtins jus" } \ No newline at end of file diff --git a/public/language/lt/reset_password.json b/public/language/lt/reset_password.json index 870d8563d0..6c2b1a11cf 100644 --- a/public/language/lt/reset_password.json +++ b/public/language/lt/reset_password.json @@ -13,5 +13,5 @@ "invalid_email": "Klaidingas arba neegzistuojantis el. pašto adresas!", "password_too_short": "Įvestas slaptažodis yra per trumpas, prašome pasirinkti kitą slaptažodį.", "passwords_do_not_match": "Du slaptažodžiai, kuriuos įvedėte, nesutampa.", - "password_expired": "Your password has expired, please choose a new password" + "password_expired": "Jūsų slaptažodžio laikas baigėsi, pasirinkite nauja slaptažodį" } \ No newline at end of file diff --git a/public/language/lt/search.json b/public/language/lt/search.json index 34d00a95a7..5c56ca9768 100644 --- a/public/language/lt/search.json +++ b/public/language/lt/search.json @@ -1,14 +1,14 @@ { - "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", + "results_matching": "%1 rezultatas(ai) atitinka \"%2\", (%3 sekundes)", "no-matches": "Atitikmenų nerasta", - "advanced-search": "Advanced Search", - "in": "In", + "advanced-search": "Išplėstinė paieška", + "in": "Į", "titles": "Antraštės", "titles-posts": "Antraštės ir įrašai", "posted-by": "Parašė", "in-categories": "Kategorijose", - "search-child-categories": "Search child categories", - "reply-count": "Reply Count", + "search-child-categories": "Ieškoti vaikų kategorijas", + "reply-count": "Atsakymų skaičiavimas", "at-least": "Mažiausiai", "at-most": "Daugiausia", "post-time": "Įrašo laikas", @@ -23,7 +23,7 @@ "six-months": "Šeši mėnesiai", "one-year": "Vieneri metai", "sort-by": "Rūšiuoti pagal", - "last-reply-time": "Last reply time", + "last-reply-time": "Paskutinis atsakymo laikas", "topic-title": "Temos pavadinimas", "number-of-replies": "Atsakymų skaičius", "number-of-views": "Peržiūrų skaičius", diff --git a/public/language/lt/tags.json b/public/language/lt/tags.json index 2151f58d36..c8f2158cb0 100644 --- a/public/language/lt/tags.json +++ b/public/language/lt/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Temų su šią žyma nėra.", "tags": "Žymos", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", - "enter_tags_here_short": "Enter tags...", + "enter_tags_here": "Įveskite žymas čia, tarp %1 ir %2 simbolių kiekvienam", + "enter_tags_here_short": "Įveskite žymas...", "no_tags": "Žymų kolkas nėra." } \ No newline at end of file diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index 5969a8727b..2a9772ad8b 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -5,7 +5,7 @@ "no_topics_found": "Temų nerasta!", "no_posts_found": "Įrašų nerasta!", "post_is_deleted": "Šis įrašas ištrintas!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Ši tema yra ištrinta!", "profile": "Profilis", "posted_by": "Parašė %1", "posted_by_guest": "Parašė svečias", @@ -29,7 +29,7 @@ "flag_title": "Pažymėti ši pranešimą moderatoriams", "flag_confirm": "Ar jūs tikras, kad norite pažymėti šį įrašą?", "flag_success": "Šis pranešimas buvo pažymėtas moderatorių patikrinimui.", - "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", + "deleted_message": "Ši tema buvo ištrinta. Tik Vartotojai su temos redagavimo privilegijomis gali matyti ja", "following_topic.message": "Dabar jūs gausite pranešimus kai kas nors atrašys šioje temoje.", "not_following_topic.message": "Jūs daugiau negausite pranešimų iš šios temos.", "login_to_subscribe": "Norėdami prenumeruoti šią temą, prašome prisiregistruoti arba prisijungti.", @@ -74,7 +74,7 @@ "topic_will_be_moved_to": "Ši tema bus perkelta į kategoriją", "fork_topic_instruction": "Pažymėkite ant įrašų, kuriuos norite perkelti į naują temą", "fork_no_pids": "Nepasirinktas joks įrašas!", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", + "fork_success": "Sėkmingai išsišakota iš temos! Spausk čia kad nueitu į išsišakota temą", "composer.title_placeholder": "Įrašykite temos pavadinimą...", "composer.handle_placeholder": "Vardas ir pavardė", "composer.discard": "Atšaukti", diff --git a/public/language/lt/unread.json b/public/language/lt/unread.json index 56db7f7d15..37c42dc40d 100644 --- a/public/language/lt/unread.json +++ b/public/language/lt/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Pažymėti kaip perskaitytus", "selected": "Pasirinkti", "all": "Visi", - "all_categories": "All categories", + "all_categories": "Visos kategorijos", "topics_marked_as_read.success": "Temos pažymėtos kaip perskaitytos." } \ No newline at end of file diff --git a/public/language/lt/user.json b/public/language/lt/user.json index 70f6a75bc2..b4bae70ee4 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -6,12 +6,12 @@ "postcount": "Įrašų kiekis", "email": "El. paštas", "confirm_email": "Patvirtinti el. paštą", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "Užblokuoti Paskyrą", + "ban_account_confirm": "Jūs tikrai norite užblokuoti šį vartotoją?", + "unban_account": "Atblokuoti Paskyrą", "delete_account": "Ištrinti paskyrą", "delete_account_confirm": "Ar tikrai norite ištrinti savo paskyrą?
Šis veiksmas yra negrįžtamas, ir jūs negalėsite susigrąžinti jokių duomenų

Įveskite savo vardą, kad patvirtintumėte, jog norite panaikinti šią paskyrą.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Ar jūs tikrai norite ištrint šią paskyrą?
Šis veiksmas nebesugražinamas ir jūs nebegalėsite atgauti jokių duomenų

", "fullname": "Vardas ir pavardė", "website": "Tinklalapis", "location": "Vieta", @@ -22,17 +22,17 @@ "profile_views": "Profilio peržiūros", "reputation": "Reputacija", "favourites": "Mėgstamiausi", - "watched": "Watched", + "watched": "Peržiūrėjo", "followers": "Sekėjai", "following": "Seka", - "aboutme": "About me", + "aboutme": "Apie mane", "signature": "Parašas", "gravatar": "Gravatar", "birthday": "Gimimo diena", "chat": "Susirašinėti", "follow": "Sekti", "unfollow": "Nesekti", - "more": "More", + "more": "Daugiau", "profile_update_success": "Profilis sėkmingai atnaujintas!", "change_picture": "Pakeisti paveikslėlį", "edit": "Redaguoti", @@ -65,24 +65,24 @@ "digest_monthly": "Kas mėnesį", "send_chat_notifications": "Jeigu gaunama nauja pokalbių žinutė ir aš neprisijungęs, siųsti el. laišką", "send_post_notifications": "Atsiųsti el. laišką kai parašomi atsakymai į mano prenumeruojamas temas", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", + "settings-require-reload": "Kai kurie nustatymų pakeitimai reikalauja perkrovimo. Spauskite čia kad perkrauti puslapį", "has_no_follower": "Šis vartotojas neturi jokių sekėjų :(", "follows_no_one": "Šis vartotojas nieko neseka :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Šis vartotojas pakolkas neparašė jokių pranešimų", + "has_no_topics": "Šis vartotojas pakolkas nesukūrė jokių temų", + "has_no_watched_topics": "Šis vartotojas pakolkas nestebėjo jokių temų", "email_hidden": "El. paštas paslėptas", "hidden": "paslėptas", - "paginate_description": "Paginate topics and posts instead of using infinite scroll", + "paginate_description": "Puslapiavimas temų ir pranešimų, vietoj kad naudoti judėjimą su pelytė į viršų ir į apačia", "topics_per_page": "Temų puslapyje", "posts_per_page": "Pranešimų puslapyje", - "notification_sounds": "Play a sound when you receive a notification", + "notification_sounds": "Paleisti garsą kai jūs gaunate pranešimą", "browsing": "Naršymo nustatymai", - "open_links_in_new_tab": "Open outgoing links in new tab", - "enable_topic_searching": "Enable In-Topic Searching", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "follow_topics_you_reply_to": "Follow topics that you reply to", - "follow_topics_you_create": "Follow topics you create", - "grouptitle": "Select the group title you would like to display", - "no-group-title": "No group title" + "open_links_in_new_tab": "Atidaryti išeinančias nuorodas naujam skirtuke", + "enable_topic_searching": "Įjungti Temų Ieškojimą ", + "topic_search_help": "Jeigu įjungtas, temų ieškojimas, nepaisys naršyklės puslapio ieškojimo, ir pradės ieškoti tik toje temoje kuri bus rodoma ekrane", + "follow_topics_you_reply_to": "Sekti tas temas kur atrašai tu", + "follow_topics_you_create": "Sekti tas temas kurias sukuri tu", + "grouptitle": "Pasirinkite grupės pavadinimą kurį norėtumėte kad atvaizduotu", + "no-group-title": "Nėra grupės pavadinimo" } \ No newline at end of file diff --git a/public/language/lt/users.json b/public/language/lt/users.json index ddfb31c12b..a04cdd5093 100644 --- a/public/language/lt/users.json +++ b/public/language/lt/users.json @@ -7,15 +7,15 @@ "load_more": "Įkelti daugiau", "users-found-search-took": "Rasta %1 vartotojas(-ai)! Paieška užtruko %2 sekundes.", "filter-by": "Filtruoti pagal", - "online-only": "Online only", + "online-only": "Tik prisijunge", "picture-only": "Tik paveikslėlis", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Pakviesti", + "invitation-email-sent": "Pakvietimas el.paštu buvo išsiųstas į %1!", + "user_list": "Vartotojų sąrašas", + "recent_topics": "Paskutinės temos", + "popular_topics": "Populiarios temos", + "unread_topics": "Neperskaitytos temos", + "categories": "Kategorijos", + "tags": "Žymos", + "map": "Žemėlapis" } \ No newline at end of file diff --git a/public/language/ms/category.json b/public/language/ms/category.json index fa77df77b5..667ab36081 100644 --- a/public/language/ms/category.json +++ b/public/language/ms/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Subkategori", "new_topic_button": "Topik Baru", "guest-login-post": "Log masuk untuk kirim", "no_topics": "Tiada topik dalam kategori ini.
Cuba hantar topik yang baru?", "browsing": "melihat", "no_replies": "Tiada jawapan", + "no_new_posts": "Tiada kiriman baru.", "share_this_category": "Kongsi kategori ini", "watch": "Melihat", "ignore": "Abai", diff --git a/public/language/ms/email.json b/public/language/ms/email.json index 5d55029bf5..093b25f7eb 100644 --- a/public/language/ms/email.json +++ b/public/language/ms/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Permintaan set semula kata lalaun - %1!", "welcome-to": "Selamat datang ke %1", - "invite": "Invitation from %1", + "invite": "Jemputan daripada %1", "greeting_no_name": "Salam", "greeting_with_name": "Salam %1", "welcome.text1": "Terima kasih kerana mendaftar dengan %1!", "welcome.text2": "Untuk mengaktifkan akaun anda sepenuhnya, kami perlu mengesahkan bahawa anda memiliki alamat emel yang didaftarkan.", "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", "welcome.cta": "Klik sini untuk sahkan emel anda", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 telah menjemput untuk menyertai %2", + "invitation.ctr": "Klik sini untuk buka akaun anda.", "reset.text1": "Kami menerima permintaan set semula kata laluan anda, kemungkinan kerana anda terlupa. Sekiranya tidak, sila abaikan emel ini.", "reset.text2": "Untuk meneruskan dengan set semula kata laluan, sila klik pautan berikut:", "reset.cta": "Klik sini untuk set semula kata laluan anda", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 49b0f5ff86..d346472fff 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -46,14 +46,14 @@ "too-many-posts-newbie": "Sebagai pengguna baru, anda hanya boleh mengirim sekali setiap %1 saat() sehinnga anda mendapat %2 reputasi - sila tunggu sebelum kiriman seterusnya", "tag-too-short": "Sila masukkan tag yang lebih panjang. Tag mesti mengandungi sekurang-kurangnya %1 aksara()", "tag-too-long": "Sila masukkan tag yang lebih pendek. Tag mesti mengandungi tidak lebih %1 aksara()", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Tag tidak mencukupi. Topik memerlukan sekurang-kurangnya %1 tag()", + "too-many-tags": "Tag terlalu banyak. Topik tidak boleh lebih %1 tag()", "file-too-big": "Maksimum saiz fail yang dibenarkan ialah %1 kB - sila muatnaik fail yang lebih kecil", "cant-vote-self-post": "Anda tidak boleh mengundi kiriman sendiri", "already-favourited": "Anda telah pun menggemari kiriman ini", "already-unfavourited": "Anda telah pun nyah-gemar kiriman ini", "cant-ban-other-admins": "Anda tidak boleh haramkan admin / pentadbir!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Anda satu-satunya pentadbir. Tambah pentadbir lain sebelum membuang diri anda sebagai pentadbir", "invalid-image-type": "Jenis imej tak sah. Jenis yang dibenarkan ialah: %1", "invalid-image-extension": "Sambungan imej tak sah", "invalid-file-type": "Jenis fail tak sah. Jenis fail yang dibenarkan ialah: %1", @@ -72,8 +72,8 @@ "topic-thumbnails-are-disabled": "Topik kecil dilumpuhkan.", "invalid-file": "Fail tak sah", "uploads-are-disabled": "Muatnaik dilumpuhkan", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Maaf, tandatangan anda tidak boleh lebih %1 aksara().", + "about-me-too-long": "Maaf, penerangan tentang anda tidak boleh lebih %1 aksara().", "cant-chat-with-yourself": "Anda tidak boleh sembang dengan diri sendiri!", "chat-restricted": "Pengguna ini menyekat ruangan sembangnya. Dia hendaklah mengikut anda sebelum kalian dapat bersembang", "too-many-messages": "Anda menghantar terlalu banyak pesanan, sila tunggu seketika.", @@ -81,7 +81,7 @@ "downvoting-disabled": "Undi turun dilumpuhkan", "not-enough-reputation-to-downvote": "Anda tidak mempunyai reputasi mencukupi untuk mengundi turun kiriman ini", "not-enough-reputation-to-flag": "Anda tidak mempunyai reputasi mencukupi untuk menanda kiriman ini", - "already-flagged": "You have already flagged this post", + "already-flagged": "Anda telah menanda kiriman ini", "reload-failed": "NodeBB menemui masalah ketika muat semula: \"%1\". NodeBB akan terus melayan aset pelanggan sedia ada, tapi anda seharusnya undur perbuatan yang dilakukan sebelum muat semula.", "registration-error": "Ralat pendaftaran.", "parse-error": "Sesuatu tidak kena berlaku ketika menghuraikan repson pelayan (server)", diff --git a/public/language/ms/global.json b/public/language/ms/global.json index f35004ec2a..c15415dc99 100644 --- a/public/language/ms/global.json +++ b/public/language/ms/global.json @@ -19,13 +19,13 @@ "save_changes": "Simpan perubahan", "close": "Tutup", "pagination": "Mukasurat", - "pagination.out_of": "%1 out of %2", + "pagination.out_of": "%1 daripada %2", "pagination.enter_index": "Masukkan indeks", "header.admin": "Pentadbir", - "header.categories": "Categories", + "header.categories": "Kategori", "header.recent": "Terkini", "header.unread": "Belum dibaca", - "header.tags": "Tags", + "header.tags": "Tag", "header.popular": "Popular", "header.users": "Pengguna", "header.groups": "Kumpulan", diff --git a/public/language/ms/groups.json b/public/language/ms/groups.json index 3bc71433f1..9a83a75da2 100644 --- a/public/language/ms/groups.json +++ b/public/language/ms/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "Tiada kumpulan untuk dilihat", "pending.accept": "Terima", "pending.reject": "Tolak", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Terima Semua", + "pending.reject_all": "Tolak Semua", + "pending.none": "Tiada ahli yang sedang menunggu buat masa ini", + "invited.none": "Tiada ahli yang dijemput buat masa ini", + "invited.uninvite": "Batalkan Jemputan", + "invited.search": "Cari pengguna untuk dijemput ke kumpulan ini", "cover-instructions": "Seret dan lepas gambar, lepas ke posisi, dan tekan Simpan", "cover-change": "Ubah", "cover-save": "Simpan", @@ -19,7 +19,7 @@ "details.title": "Perincian Kumpulan", "details.members": "Senarai Ahli", "details.pending": "Ahli Menunggu", - "details.invited": "Invited Members", + "details.invited": "Ahli yang dijemput", "details.has_no_posts": "Kumpulan ahli kumpulan ini belum membuat sebarang kiriman.", "details.latest_posts": "Kiriman Terkini", "details.private": "Privasi", @@ -38,12 +38,13 @@ "details.private_help": "Jika dibolehkan, menyertai kumpulan memerlukan kelulusan pemilik kumpulan", "details.hidden": "Sembunyi", "details.hidden_help": "Jika dibolehkan, kumpulan ini tidak akan dijumpai di senarai kumpulan, dan pengguna hendaklah di jemput secara manual", - "details.delete_group": "Delete Group", + "details.delete_group": "Padam Kumpulan", "event.updated": "Perincian kumpulan telah dikemaskini", "event.deleted": "Kumpulan \"%1\" telah dipadam", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Terima Jemputan", + "membership.invitation-pending": "Jemputan Menunggu", + "membership.join-group": "Masuk Kumpulan", + "membership.leave-group": "Keluar Kumpulan", + "membership.reject": "Tolak", + "new-group.group_name": "Nama Kumpulan:" } \ No newline at end of file diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json index 2da026aa39..d020f54afa 100644 --- a/public/language/ms/notifications.json +++ b/public/language/ms/notifications.json @@ -20,7 +20,7 @@ "user_posted_topic": "%1 membuka topik baru : %2", "user_mentioned_you_in": "%1 sebut anda di %2", "user_started_following_you": "%1 mula mengikut anda.", - "new_register": "%1 sent a registration request.", + "new_register": "%1 menghantar jemputan pendaftaran.", "email-confirmed": "EMel Disahkan", "email-confirmed-message": "Terima kasih kerana mengesahkan emel anda. Akaun anda telah diaktifkan sepenuhnya.", "email-confirm-error-message": "Berlaku masalah semasa mengesahkan emel anda. Mungkin kod tidak sah atau tamat tempoh.", diff --git a/public/language/ms/register.json b/public/language/ms/register.json index 633ff4703d..b0a6d79507 100644 --- a/public/language/ms/register.json +++ b/public/language/ms/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Pendaftaran Alternatif", "terms_of_use": "Terma Penggunaan", "agree_to_terms_of_use": "Saya bersetuju dengan Terma Penggunaan", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Pendaftaran anda sedang dimasukkan ke barisan pengesahan. Anda akan menerima emel setelah diterima oleh pentadbir." } \ No newline at end of file diff --git a/public/language/ms/topic.json b/public/language/ms/topic.json index 0b73e10449..258f958a20 100644 --- a/public/language/ms/topic.json +++ b/public/language/ms/topic.json @@ -4,8 +4,8 @@ "topic_id_placeholder": "Masukkan ID topik", "no_topics_found": "Tiada topik yang ditemui", "no_posts_found": "Tiada kirim yang dijumpai", - "post_is_deleted": "Kiriman ini di padam!", - "topic_is_deleted": "This topic is deleted!", + "post_is_deleted": "Kiriman ini dipadam!", + "topic_is_deleted": "Topik ini dipadam!", "profile": "Profil", "posted_by": "Dikirim oleh %1", "posted_by_guest": "Dikirim oleh pelawat", diff --git a/public/language/ms/unread.json b/public/language/ms/unread.json index d12320a5c9..6e23443905 100644 --- a/public/language/ms/unread.json +++ b/public/language/ms/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Tanda sebagai sudah dibaca", "selected": "Dipilih", "all": "Semua", - "all_categories": "All categories", + "all_categories": "Semua Kategori", "topics_marked_as_read.success": "Topik ditandakan sebagai sudah dibaca" } \ No newline at end of file diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 21a7c0a504..66fb7492e8 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -6,12 +6,12 @@ "postcount": "Jumlah Kiriman", "email": "Emel", "confirm_email": "Pastikan Emel", - "ban_account": "Ban Account", + "ban_account": "Haramkan Akaun", "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "unban_account": "Nyah-haram Akaun", "delete_account": "Padam Akaun", - "delete_account_confirm": "Anda yakin untuk paddam akaun anda?
Pebuatan ini tidak boleh diundur dan anda tidak boleh memulihkan sebarang data anda.

Masukkan nama pengguna anda untuk memastikan anda benar-benar ingin memadam akaun ini.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_account_confirm": "Anda yakin untuk padam akaun anda?
Pebuatan ini tidak boleh diundur dan anda tidak boleh memulihkan sebarang data anda.

Masukkan nama pengguna anda untuk memastikan anda benar-benar ingin memadam akaun ini.", + "delete_this_account_confirm": "Anda yakin untuk padam akaum ini?
Pebuatan ini tidak boleh diundur dan anda tidak boleh memulihkan sebarang data

", "fullname": "Nama penuh", "website": "Laman Web", "location": "Lokasi", @@ -68,9 +68,9 @@ "settings-require-reload": "Sebahagian perubahan tetapan memerlukan segar semula. Klik sini untuk segar semula halaman ini.", "has_no_follower": "Pengguna ini tiada pengikut :(", "follows_no_one": "Pengguna ini tidak mengikuti sesiapa :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Pengguna ini belum menulis sebarang kiriman lagi.", + "has_no_topics": "Pengguna ini belum menulis sebarang topik lagi.", + "has_no_watched_topics": "Pengguna ini belum melanggan sebarang topik lagi.", "email_hidden": "Emel disembunyikan", "hidden": "disembunyikan", "paginate_description": "Gunakan muka surat untuk topik dan kiriman daripada penggunaan skroll infiniti", @@ -79,8 +79,8 @@ "notification_sounds": "Mainkan bunyi apabila anda mendapat pemberitahuan", "browsing": "Melihat-lihat Tetapan", "open_links_in_new_tab": "Buka pautan luar di tab yang baru", - "enable_topic_searching": "Enable In-Topic Searching", - "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "enable_topic_searching": "Aktifkan Pencarian Dalam-Topik", + "topic_search_help": "Jika diaktifkan, pencarian dalam-topik akan membatalkan fungsi asal pencarian pelayan dan membenarkan anda untuk mencari seluruh topik, daripada menunjukkan apa yang terdapat pada skrin sahaja", "follow_topics_you_reply_to": "Ikut topik yang anda balas", "follow_topics_you_create": "Ikut topik yang anda buat", "grouptitle": "Pilih nama kumpulan yang anda ingin tunjukkan", diff --git a/public/language/ms/users.json b/public/language/ms/users.json index f66effd754..92f95319c7 100644 --- a/public/language/ms/users.json +++ b/public/language/ms/users.json @@ -9,13 +9,13 @@ "filter-by": "Saring dengan", "online-only": "Atas talian sahaja", "picture-only": "Gambar sahaja", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Jemput", + "invitation-email-sent": "Emel jemputan telah dihantar ke %1", + "user_list": "Senarai Pengguna", + "recent_topics": "Topik Terkini", + "popular_topics": "Topik Popular", + "unread_topics": "Topik Belum Dibaca", + "categories": "Kategori", + "tags": "Tag", + "map": "Peta" } \ No newline at end of file diff --git a/public/language/nb/category.json b/public/language/nb/category.json index f4b2298a0d..8a7e3b573d 100644 --- a/public/language/nb/category.json +++ b/public/language/nb/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Underkategorier", "new_topic_button": "Nytt emne", "guest-login-post": "Logg inn til innlegg", "no_topics": "Det er ingen emner i denne kategorien
Hvorfor ikke lage et?", "browsing": "leser", "no_replies": "Ingen har svart", + "no_new_posts": "Ingen nye innlegg.", "share_this_category": "Del denne kategorien", "watch": "Overvåk", "ignore": "Ignorer", diff --git a/public/language/nb/email.json b/public/language/nb/email.json index 21deb6781c..00b9ffdd7c 100644 --- a/public/language/nb/email.json +++ b/public/language/nb/email.json @@ -1,14 +1,14 @@ { "password-reset-requested": "Tilbakestilling av passord - %1!", "welcome-to": "Velkommen til %1", - "invite": "Invitation from %1", + "invite": "Invitasjon fra %1", "greeting_no_name": "Hallo", "greeting_with_name": "Hallo, %1", "welcome.text1": "Takk for at du registrerte deg hos %1!", "welcome.text2": "For å aktivere kontoen din må vi verifisere at du eier e-postadressen du registrerte med.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "En administrator har akseptert din søknad om registering. Du kan nå logge inn med ditt brukernavn og passord.", "welcome.cta": "Klikk her for å verifisere e-postadressen din", - "invitation.text1": "%1 has invited you to join %2", + "invitation.text1": "%1 har invitert deg til å bli med i %2", "invitation.ctr": "Click here to create your account.", "reset.text1": "Vi har blir bedt om å tilbakestille passordet ditt, muligens fordi du har glemt det. Hvis dette ikke stemmer kan du ignorere denne eposten.", "reset.text2": "For å fortsette med tilbakestillingen, vennligst klikk på følgende lenke:", diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index 62e2979113..a2028bd35f 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -8,10 +8,10 @@ "pending.reject": "Avslå", "pending.accept_all": "Aksepter al", "pending.reject_all": "Avslå alle", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.none": "Det er ingen ventende medlemmer på dette tidspunktet", + "invited.none": "Det er ingen inviterte medlemmer på dette tidspunktet", + "invited.uninvite": "Trekk tilbake invitasjon", + "invited.search": "Søk etter en bruker å invitere til denne gruppen", "cover-instructions": "Dra og slipp et bilde, dra til posisjon, og trykk Lagre", "cover-change": "Endre", "cover-save": "Lagre", @@ -19,7 +19,7 @@ "details.title": "Gruppedetaljer", "details.members": "Medlemsliste", "details.pending": "Ventende meldemmer", - "details.invited": "Invited Members", + "details.invited": "Inviterte medlemmer", "details.has_no_posts": "Medlemmene i denne gruppen har ikke skrevet noen innlegg.", "details.latest_posts": "Seneste innlegg", "details.private": "Privat", @@ -38,12 +38,13 @@ "details.private_help": "Hvis aktivert, vil medlemskap i grupper kreve godkjennelse fra en gruppe-eier", "details.hidden": "Skjult", "details.hidden_help": "vis aktivert, vil denne gruppen ikke bli funnet i gruppelista, og brukere må inviteres manuellt", - "details.delete_group": "Delete Group", + "details.delete_group": "Slett gruppe", "event.updated": "Gruppedetaljer har blitt oppgradert", "event.deleted": "Gruppen \"%1\" har blitt slettet", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Aksepter invitasjon", + "membership.invitation-pending": "Invitasjon venter", + "membership.join-group": "Bli med i gruppe", + "membership.leave-group": "Forlat gruppe", + "membership.reject": "Avslå", + "new-group.group_name": "Gruppenavn" } \ No newline at end of file diff --git a/public/language/nb/unread.json b/public/language/nb/unread.json index 2abd16760f..0bc52f5bcd 100644 --- a/public/language/nb/unread.json +++ b/public/language/nb/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Marker som lest", "selected": "Valgte", "all": "Alle", - "all_categories": "All categories", + "all_categories": "Alle kategorier", "topics_marked_as_read.success": "Emner merket som lest!" } \ No newline at end of file diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 85141201a5..983ed4ebb3 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -6,12 +6,12 @@ "postcount": "Antall innlegg", "email": "E-post", "confirm_email": "Bekfreft e-post", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "Utesteng kont", + "ban_account_confirm": "Vil du virkelig utestenge denne brukeren?", + "unban_account": "Opphev utestenging", "delete_account": "Slett konto", "delete_account_confirm": "Er du sikker på at du vil slette kontoen din?
Dette kan ikke reverseres, og du vil ikke kunne hente tilbake dine data.

Skriv inn ditt brukernavn for å bekrefte at du vil tilintetgjøre denne kontoen.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Er du sikker på at du vil slette denne kontoen?
Denne handlingen kan ikke reverseres og du vil ikke kunne gjenopprette noe data

", "fullname": "Fullt navn", "website": "Nettsted", "location": "Plassering", @@ -68,9 +68,9 @@ "settings-require-reload": "Noen innstillingsendringer krever at du laster siden på nytt. Klikk her for å laste på nytt.", "has_no_follower": "Denne brukeren har ingen følgere :(", "follows_no_one": "Denne brukeren følger ingen :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Denne brukeren har ikke skrevet noe enda.", + "has_no_topics": "Denne brukeren har ikke skrevet noen emner enda.", + "has_no_watched_topics": "Denne brukeren har ikke overvåket noen emner enda.", "email_hidden": "E-post skjult", "hidden": "skjult", "paginate_description": "Bruk sidevelger for emner og innlegg istedet for uendelig scrolling", diff --git a/public/language/nl/category.json b/public/language/nl/category.json index 7421cee928..19e4121127 100644 --- a/public/language/nl/category.json +++ b/public/language/nl/category.json @@ -1,9 +1,12 @@ { + "category": "Categorie", + "subcategories": "subcategorie", "new_topic_button": "Nieuw onderwerp", "guest-login-post": "Log in om een reactie te plaatsen", "no_topics": "Er zijn geen onderwerpen in deze categorie.
Waarom maak je er niet een aan?", "browsing": "browsing", "no_replies": "Niemand heeft gereageerd", + "no_new_posts": "Geen nieuwe berichten", "share_this_category": "Deel deze categorie", "watch": "Volgen", "ignore": "Negeren", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index ccd33cfb02..e9840b8bf9 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "Nieuwe gebruikersaccounts zoals deze zijn begrensd en mogen slechts iedere %1 seconde(n) berichten plaatsen, tot het moment dat %2 reputatie verdiend is - wacht daarom even met opnieuw een bericht te plaatsten", "tag-too-short": "Geef een tag op die uit meer tekens bestaat. Tags dienen uit minimaal %1 teken(s) te bestaan.", "tag-too-long": "Geef een kortere tag op. Tags mogen niet langer dan %1 teken(s) zijn", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Niet genoeg labels. Onderwerp moeten tenminste %1 label(s) hebben", + "too-many-tags": "Teveel labels. Onderwerpen kunnen niet meer dan %1 label(s) hebben ", "file-too-big": "Maximum toegestane bestandsgrootte is %1 kB - probeer een kleiner bestand te verzenden", "cant-vote-self-post": "Het is niet mogelijk op eigen berichten te stemmen", "already-favourited": "Dit bericht staat al tussen de favorieten", diff --git a/public/language/nl/global.json b/public/language/nl/global.json index 5540a722fc..336be3a677 100644 --- a/public/language/nl/global.json +++ b/public/language/nl/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 van %2", "pagination.enter_index": "Vul index in", "header.admin": "Beheer", - "header.categories": "Categories", + "header.categories": "Categorieën", "header.recent": "Recent", "header.unread": "Ongelezen", "header.tags": "Tags", diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index d91ad473b0..b6e433dfed 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Wanneer ingeschakeld, zal eerst een groepseigenaar goedkeuring moeten verlenen voordat nieuwe leden kunnen toetreden", "details.hidden": "Niet getoond", "details.hidden_help": "Indien geactiveerd zal deze groep niet getoond worden in de groepslijst en zullen gebruikers handmatig uitgenodigd moeten worden.", - "details.delete_group": "Delete Group", + "details.delete_group": "Groep verwijderen", "event.updated": "Groepsdetails zijn bijgewerkt", "event.deleted": "De groep \"%1\" is verwijderd", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Uitnodiging accepteren", + "membership.invitation-pending": "Openstaande uitnodiging", + "membership.join-group": "Deelnemen aan groep", + "membership.leave-group": "Verlaat groep", + "membership.reject": "Afwijzen", + "new-group.group_name": "Groepsnaam:" } \ No newline at end of file diff --git a/public/language/pl/category.json b/public/language/pl/category.json index 5efaa0f71c..74e175a22b 100644 --- a/public/language/pl/category.json +++ b/public/language/pl/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nowy wątek", "guest-login-post": "Zaloguj się, aby napisać.", "no_topics": "W tej kategorii nie ma jeszcze żadnych wątków.
Dlaczego ty nie utworzysz jakiegoś?", "browsing": "przegląda", "no_replies": "Nikt jeszcze nie odpowiedział", + "no_new_posts": "No new posts.", "share_this_category": "Udostępnij tę kategorię", "watch": "Watch", "ignore": "Ignoruj", diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json index 90c7195a0b..3efc724871 100644 --- a/public/language/pl/groups.json +++ b/public/language/pl/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/pt_BR/category.json b/public/language/pt_BR/category.json index f996f22b23..c8802e7429 100644 --- a/public/language/pt_BR/category.json +++ b/public/language/pt_BR/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Novo Tópico", "guest-login-post": "Logue-se para postar", "no_topics": "Não tem nenhum tópico nesta categoria.
Por que você não tenta postar o algum?", "browsing": "navegando", "no_replies": "Ninguém respondeu", + "no_new_posts": "No new posts.", "share_this_category": "Compartilhar esta categoria", "watch": "Assistir", "ignore": "Ignorar", diff --git a/public/language/pt_BR/groups.json b/public/language/pt_BR/groups.json index 5391da0e8f..04fe94a34b 100644 --- a/public/language/pt_BR/groups.json +++ b/public/language/pt_BR/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/ro/category.json b/public/language/ro/category.json index 6bc07f8f8c..cad17212dc 100644 --- a/public/language/ro/category.json +++ b/public/language/ro/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Subiect Nou", "guest-login-post": "Log in to post", "no_topics": "Nu există nici un subiect de discuție în această categorie.
De ce nu încerci să postezi tu unul?", "browsing": "navighează", "no_replies": "Nu a răspuns nimeni", + "no_new_posts": "No new posts.", "share_this_category": "Distribuie această categorie", "watch": "Watch", "ignore": "Ignoră", diff --git a/public/language/ro/groups.json b/public/language/ro/groups.json index 16d4fbb1d3..b8e9bc1c19 100644 --- a/public/language/ro/groups.json +++ b/public/language/ro/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/ru/category.json b/public/language/ru/category.json index c584f9f4c6..ed08c76fd3 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Создать тему", "guest-login-post": "Войдите чтобы создавать сообщения", "no_topics": "В этой категории еще нет тем.
Почему бы вам не создать первую?", "browsing": "просматривают", "no_replies": "Нет ответов", + "no_new_posts": "No new posts.", "share_this_category": "Поделиться этой категорией", "watch": "Следить", "ignore": "Игнорировать", diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index d4c115bd0d..16b6277be6 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -38,12 +38,13 @@ "details.private_help": "Если включено, вступление в группы будет подтверждаться владельцем группы", "details.hidden": "Скрыто", "details.hidden_help": "Если включено, группа не будет показываться в списках, а пользователи должны приглашаться вручную", - "details.delete_group": "Delete Group", + "details.delete_group": "Удалить группу", "event.updated": "Настройки группы обновлены", "event.deleted": "Группа \"%1\" удалена", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Принять приглашение", + "membership.invitation-pending": "Заявка на рассмотрении", + "membership.join-group": "Вступить", + "membership.leave-group": "Покинуть", + "membership.reject": "Отклонить", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/rw/category.json b/public/language/rw/category.json new file mode 100644 index 0000000000..de8b548b1f --- /dev/null +++ b/public/language/rw/category.json @@ -0,0 +1,15 @@ +{ + "category": "Icyiciro", + "subcategories": "Icyiciro gito", + "new_topic_button": "Ikiganiro Gishya", + "guest-login-post": "Injiramo wandike", + "no_topics": "Nta biganiro byo muri iki cyiciro bihari
Watangije kimwe hano se?", + "browsing": "abari kureba", + "no_replies": "Nta muntu urasubiza", + "no_new_posts": "Nta bishya.", + "share_this_category": "Sangiza iki cyiciro", + "watch": "Kurikirana", + "ignore": "Ihorere", + "watch.message": "Uzajya ubu ukurikirana ibishya byongewe muri iki cyiciro", + "ignore.message": "Ubu urekeye aho kuzajya ubona ibishya byongewe muri iki cyiciro" +} \ No newline at end of file diff --git a/public/language/rw/email.json b/public/language/rw/email.json new file mode 100644 index 0000000000..63c2b1bce2 --- /dev/null +++ b/public/language/rw/email.json @@ -0,0 +1,32 @@ +{ + "password-reset-requested": "Ubusabe bwo Gutangiza Bundibushya Ijambobanga - %1!", + "welcome-to": "Ikaze kuri %1", + "invite": "Ubutumire buvuye kuri %1", + "greeting_no_name": "Mwirwe", + "greeting_with_name": "Mwiriwe %1", + "welcome.text1": "Urakoze kwiyandika nk'ukoresha %1!", + "welcome.text2": "Kugirango tuguhe uburenganzira busesuye bwo gukoresha konte yawe, tugomba kubanza gusuzuma niba email watanze wiyandikisha ari iyawe. ", + "welcome.text3": "Umuyobozi w'urubuga yemeye ubusabe bwawe bwo kwandikwa nk'ukoresha urubuga. Ushobora noneho kwinjiramo ukoresheje izina n'ijambobanga byawe.", + "welcome.cta": "Kanda hano kugirango wemeze ko email watanze ari iyawe", + "invitation.text1": "%1 yagutumiye kuri %2", + "invitation.ctr": "Kanda hano kugirango utangize konte", + "reset.text1": "Twabonye ubusabe bwo gutangiza ijambobanga ryawe bundibushya, wenda bitewe n'uko wibagiwe iryo wari ufite. Niba atari ko bimeze, si ngombwa kwita ku bindi byanditse muri iyi email.", + "reset.text2": "Niba ushaka kujya aho uri butangize ijambobanga ryawe, kanda ku murongo ukurikira:", + "reset.cta": "Kanda hano kugirango utangize bundibushya ijambobanga ryawe", + "reset.notify.subject": "Ijambobanga ryahinduwe nta ngorane", + "reset.notify.text1": "Turakumenyesha ko kuri %1, ijambobanga wakoreshaga ryahinduwe nk'uko byari byasabwe.", + "reset.notify.text2": "Niba atari wowe wari wabisabye ku bushake bwawe, bimenyeshe umuyobozi w'urubuga aka kanya. ", + "digest.notifications": "Ufite amatangazo atarasomwa aturutse kuri %1:", + "digest.latest_topics": "Ibiganiro biheruka bya %1", + "digest.cta": "Kanda hano kugirango usure %1", + "digest.unsub.info": "Izi ngingo z'ingenzi zakohererejwe kuko waziyandikishijeho", + "digest.no_topics": "Nta biganiro bishyushye byagaragaye mu gihe gishize cya %1", + "notif.chat.subject": "Ubutumwa bwo mu gikari bwaturutse kuri %1", + "notif.chat.cta": "Kanda hano kugirango ukomeze", + "notif.chat.unsub.info": "Iri tangazo rijyanye n'ubutumwa bwo mu gikari waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", + "notif.post.cta": "Kanda hano kugirango usome inkuru yose", + "notif.post.unsub.info": "Iri tangazo rijyanye n'ibyashyizwe ku rubuga waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", + "test.text1": "Iyi message ni igerageza kugirango harebwe niba emailer ya NodeBB yarateguwe neza", + "unsub.cta": "Kanda hano kugirango uhindure uko bizajya bigenda", + "closing": "Murakoze!" +} \ No newline at end of file diff --git a/public/language/rw/error.json b/public/language/rw/error.json new file mode 100644 index 0000000000..93e1a9fedc --- /dev/null +++ b/public/language/rw/error.json @@ -0,0 +1,90 @@ +{ + "invalid-data": "Ibyashyizwemo Ntibyemewe", + "not-logged-in": "Biragaragara ko utinjiyemo.", + "account-locked": "Konte yawe yabaye ifunze", + "search-requires-login": "Gushaka ikintu bisaba kuba ufite konte - Injiramo cyangwa wiyandike.", + "invalid-cid": "Nimero y'Icyiciro Ntiyemewe", + "invalid-tid": "Nimero y'Ikiganiro Ntiyemewe", + "invalid-pid": "Nimero y'Icyashyizweho Ntiyemewe", + "invalid-uid": "Nimero y'Umuntu Ntiyemewe", + "invalid-username": "Izina Ntiryemewe", + "invalid-email": "Email Ntiyemewe", + "invalid-title": "Umutwe utemewe!", + "invalid-user-data": "Ibyatanzwe Ntibyemewe!", + "invalid-password": "Ijambobanga Ntiryemewe", + "invalid-username-or-password": "Tanga izina ukoresha n'ijambobanga", + "invalid-search-term": "Icyashatswe nticyemewe", + "invalid-pagination-value": "Umubare wa paji watanzwe ntiwemewe", + "username-taken": "Izina ryarafashwe mbere", + "email-taken": "Email yarafashwe mbere", + "email-not-confirmed": "Email yawe ntabwo iremezwa. Kanda hano kugirango wemeze email yawe.", + "email-not-confirmed-chat": "Ntabwo uremererwa kuganirira mu gikari kuko email yawe itari yemezwa. Kanda hano kugirango wemeze email yawe. ", + "no-email-to-confirm": "Uru rubuga rusaba ko wemeza ko utunze email. Kanda hano kugirango utange email yawe", + "email-confirm-failed": "Ntabwo email yawe yabashije kwemezwa. Ongera ugerageze mu bundi buryo. ", + "confirm-email-already-sent": "Email yo kwemeza yamaze koherezwa. Tegereza iminota (umunota) %1 mbere yo kohereza indi. ", + "username-too-short": "Izina ni rigufi cyane", + "username-too-long": "Izina ni rirerire cyane", + "user-banned": "Umuntu wirukanwe", + "user-too-new": "Wihangena kuko usabwa gutegereza amasegonda (isegonda) %1 mbere yo gushyiraho ikintu cyawe cya mbere", + "no-category": "Icyiciro kitabaho", + "no-topic": "Ikiganiro kitabaho", + "no-post": "Icyashyizweho kitabaho", + "no-group": "Itsinda ritabaho", + "no-user": "Umuntu utabaho", + "no-teaser": "Inshamake itabaho", + "no-privileges": "Ntabwo uragira uburenganzira buhagije ngo wemererwe iki gikorwa", + "no-emailers-configured": "Nta plugin yifashishwa mu kohereza email yari yashyirwamo. Email y'igerageza ntabwo yakunda. ", + "category-disabled": "Icyiciro cyabujijwe", + "topic-locked": "Ikiganiro Cyafungiranywe", + "post-edit-duration-expired": "Wemerewe gusa kugira icyo uhindura ku byo washyizeho nyuma y'amasegonda (isegonda) %1 nyuma yo kubishyiraho", + "still-uploading": "Tegereza gupakira bibanze birangire.", + "content-too-short": "Gerageza ushyireho ikintu kirekireho. Icyo ushyiraho kigomba kuba kigizwe nibura n'inyuguti (cyangwa ibimenyetso) zigera kuri %1.", + "content-too-long": "Gerageza ushyireho ibintu bigufiyaho. Icyo ushyiraho kigomba kuba kigizwe n'inyuguti (cyangwa ibimenyetso) zirenga %1. ", + "title-too-short": "Gerageza ushyireho umutwe muremureho. Umutwe ugomba kuba ugizwe n'inyuguti (cyangwa ibimenyetso) zigera kuri %1. ", + "title-too-long": "Gerageza ushyireho umutwe mugufiyaho. Umutwe ugomba kuba ugizwe n'inyuguti (cyangwa ibimenyetso) zitarenga %1. ", + "too-many-posts": "Wemerewe kugira icyo ushyiraho rimwe mu masegonda (isegonda) %1. Ba utegerejeho gato kugirango wongere", + "too-many-posts-newbie": "Nk'umuntu mushya, wemerewe gushyiraho ikintu rimwe mu masegonda (isegonda) %1 kugeza igihe ugize amanota agera kuri %2. Ba utegerejeho gato kugirango wongere", + "tag-too-short": "Gerageza ukoreshe akamenyetso kagizwe n'inyuguti (cyangwa ibimenyetso) nibura zigera kuri %1", + "tag-too-long": "Gerageza ukoreshe akamenyetso kagizwe n'inyuguti (cyangwa ibimenyetso) zitarenze %1", + "not-enough-tags": "Nta tumenyetso turiho duhagije. Ibiganiro bigomba kugira utumenyetso (akamenyetso) nibura %1", + "too-many-tags": "Hariho utumenyetso twinshi. Ibiganiro ntibyarenza utumenyetso (akamenyetso) %1", + "file-too-big": "Ubunini bwemewe bushoboka bw'ifayilo ni kB %1. Gerageza upakire ifayilo ntoyaho", + "cant-vote-self-post": "Ntabwo wemerewe kwiha amanota", + "already-favourited": "Wari wararangije gutonesha iki ngiki", + "already-unfavourited": "Wari wararekeye aho gutonesha iki ngiki", + "cant-ban-other-admins": "Ntabwo wakwirukana abandi bayobozi!", + "cant-remove-last-admin": "Ni wowe muyobozi wenyine. Ongeramo undi muntu nk'umuyobozi mbere y'uko wikura ku buyobozi", + "invalid-image-type": "Ubwoko bw'ifoto wahisemo ntibwemewe. Hemewe gusa: %1", + "invalid-image-extension": "Impera itemewe igaragaza foruma y'ifoto", + "invalid-file-type": "Ubwoko bw'ifayilo ntibwemewe. Hemewe gusa: %1", + "group-name-too-short": "Izina ry'itsinda ni rigufi cyane", + "group-already-exists": "Itsinda ryitwa gutya risanzweho", + "group-name-change-not-allowed": "Guhindura izina ry'itsinda ntibyemewe", + "group-already-member": "Usanzwe uri umunyamuryango w'iri tsinda", + "group-needs-owner": "Iri tsinda risaba kugira nibura umuyobozi umwe", + "group-already-invited": "Uyu muntu yari yaramaze gutumirwa", + "group-already-requested": "Ubusabe bwo kuba mu itsinda bwari bwaramaze koherezwa", + "post-already-deleted": "Ibi byari byarakuweho", + "post-already-restored": "Ibi byari byaragaruwe", + "topic-already-deleted": "Iki kiganiro cyari cyarakuweho", + "topic-already-restored": "Iki kiganiro cyari cyaragaruwe", + "cant-purge-main-post": "Ntabwo ushobora gusibanganya icyashyizweho kandi ibindi bigishamikiyeho. Ahubwo wakuraho ikiganiro cyose", + "topic-thumbnails-are-disabled": "Ishushondanga ntiyemerewe. ", + "invalid-file": "Ifayilo Ntiyemewe", + "uploads-are-disabled": "Ipakira Ntiryemerewe", + "signature-too-long": "Intero yawe ntabwo yemerewe kurenza inyuguti (cyangwa ibimenyetso) %1. ", + "about-me-too-long": "Inshamake y'Ubuzima yawe ntiyemerewe kurenza inyuguti (cyangwa ibimenyetso) %1.", + "cant-chat-with-yourself": "Ntabwo wakwiganiriza!", + "chat-restricted": "Uyu muntu yemerera kuganirira mu gikari n'abantu bamwe na bamwe. Agomba kuba yarahisemo kugukurikira kugirango ube wabasha kumuganiriza uciye mu gikari. ", + "too-many-messages": "Wohereje ubutumwa bwinshi cyane. Ba utegerejeho gato. ", + "reputation-system-disabled": "Ibijyanye n'itangwa ry'amanota ntibyemerewe. ", + "downvoting-disabled": "Kwambura amanota ntibyemerewe", + "not-enough-reputation-to-downvote": "Ntabwo ufite amanota ahagije ngo ube wakwemererwa kugira uwo wambura amanota", + "not-enough-reputation-to-flag": "Ntabwo ufite amanota ahagije ngo ube wakwemererwa gutambikana uyu muntu", + "already-flagged": "Wari waramaze gutambikana ibi", + "reload-failed": "NodeBB yahuye n'ingorane mu gihe cy'ipakira: \"%1\". NodeBB irakomeza kuzana ibyo yari ifite ku ruhande rw'imbere nubwo ufite kuba wasubira inyuma ugafata ibyo wari wakoze mbere yo gupakira. ", + "registration-error": "Ukwibeshya mu Iyandika", + "parse-error": "Hari ikibazo cyavutse mu gihe twari kugerageza kuzana igisubizo kivuye kuri server", + "wrong-login-type-email": "Koresha email yawe kugirango winjiremo", + "wrong-login-type-username": "Koresha izina ry'umukoresha ryawe kugirango winjiremo" +} \ No newline at end of file diff --git a/public/language/rw/global.json b/public/language/rw/global.json new file mode 100644 index 0000000000..fda0c9e222 --- /dev/null +++ b/public/language/rw/global.json @@ -0,0 +1,83 @@ +{ + "home": "Imbere", + "search": "Shaka", + "buttons.close": "Funga", + "403.title": "Ntibyemewe Kuhagera", + "403.message": "Wageze kuri paji udafitiye uburenganzira bwo kureba", + "403.login": "Wenda ahari ukeneye kugerageza kwinjiramo", + "404.title": "Ntacyabonetse", + "404.message": "Biragaragara ko wageze kuri paji itariho ikintu. Subira Imbere.", + "500.title": "Hari ikibazo cya tekinike imbere. ", + "500.message": "Ye baba we! Ntibikunze!", + "register": "Iyandikishe", + "login": "Injiramo", + "please_log_in": "Injiramo", + "logout": "Sohokamo", + "posting_restriction_info": "Gushyiraho ikintu byemewe ku banyamuryango gusa. Niba uri we, kanda hano winjiremo. ", + "welcome_back": "Urakaza Neza Urisanga", + "you_have_successfully_logged_in": "Winjiyemo nta ngorane", + "save_changes": "Bika ibyamaze gukorwa", + "close": "Funga", + "pagination": "Umubare wa Paji", + "pagination.out_of": "%1 muri %2", + "pagination.enter_index": "Shyiramo umubare", + "header.admin": "Ubuyobozi", + "header.categories": "Ibyiciro", + "header.recent": "Ibiheruka", + "header.unread": "Ibitarasomwa", + "header.tags": "Utumenyetso", + "header.popular": "Ibikunzwe", + "header.users": "Abantu", + "header.groups": "Amatsinda", + "header.chats": "Ubutumwa", + "header.notifications": "Amatangazo", + "header.search": "Shaka", + "header.profile": "Ishusho", + "notifications.loading": "Amatangazo Araje", + "chats.loading": "Ubutumwa Buraje", + "motd.welcome": "Urakaza neza kuri NodeBB, urubuga rujyanye n'ibihe bizaza", + "previouspage": "Paji Ibanza", + "nextpage": "Paji Ikurikira", + "alert.success": "Byaciyemo", + "alert.error": "Byanze", + "alert.banned": "Birukanwe", + "alert.banned.message": "Ubu ngubu umaze gukumirwa, ugiye guhita usohorwamo", + "alert.unfollow": "Ntabwo ukimukurikira %1!", + "alert.follow": "Ubu ngubu ukurikira %1!", + "online": "Ku Murongo", + "users": "Abantu", + "topics": "Ibiganiro", + "posts": "Ibyashyizweho", + "views": "Byarebwe", + "reputation": "Amanota", + "read_more": "komeza usome", + "more": "Ibindi", + "posted_ago_by_guest": "%1 bishyizweho na Umushyitsi", + "posted_ago_by": "%1 bishyizweho na %2", + "posted_ago": "%1 biriho", + "posted_in_ago_by_guest": "%2 bishyizwe muri %1 na Umushyitsi", + "posted_in_ago_by": "%2 bishyizwe muri %1 na %3", + "posted_in_ago": "%2 bishyizwe muri %1", + "replied_ago": "%1 asubije", + "user_posted_ago": "%2 %1 ashyizeho", + "guest_posted_ago": "%1 Umushyitsi ashyizeho", + "last_edited_by_ago": "%2 bihinduweho na %1", + "norecentposts": "Nta Biherutseho", + "norecenttopics": "Nta Biganiro Biherutse", + "recentposts": "Ibiherutseho", + "recentips": "Aderesi za IP Ziheruka Gusura", + "away": "Ahandi", + "dnd": "Nta Kubonana", + "invisible": "Nta Kugaragara", + "offline": "Nta Murongo", + "email": "Email", + "language": "Ururimi", + "guest": "Umushyitsi", + "guests": "Abashyitsi", + "updated.title": "Urubuga Rushyizwe ku Gihe", + "updated.message": "Uru rubuga rumaze kuvugururwa. Kanda hano kugirango niba hari ibyahindutse kuri iyi paji bikugereho. ", + "privacy": "Umuhezo", + "follow": "Kurikira", + "unfollow": "Reka Gukurikira", + "delete_all": "Siba Byose" +} \ No newline at end of file diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json new file mode 100644 index 0000000000..b1d7e5de19 --- /dev/null +++ b/public/language/rw/groups.json @@ -0,0 +1,50 @@ +{ + "groups": "Amatsinda", + "view_group": "Reba Itsinda", + "owner": "Nyir'Itsinda ", + "new_group": "Tangiza Itsinda Rishya", + "no_groups_found": "Nta matsinda agaragara", + "pending.accept": "Emera", + "pending.reject": "Hakanira", + "pending.accept_all": "Emererera Bose", + "pending.reject_all": "Hakanira Bose", + "pending.none": "Nta banyamuryango bategereje bahari", + "invited.none": "Nta banyamuryango batumiwe bahari", + "invited.uninvite": "Kuraho Ubutumire", + "invited.search": "Shaka umuntu wo gutumira muri iri tsinda", + "cover-instructions": "Terura Urekure ifoto aha. Ushobora kuringaniza ifoto uko ushatse ubundi ukande kuri Bika", + "cover-change": "Hindura", + "cover-save": "Bika", + "cover-saving": "Kubika", + "details.title": "Ibijyanye n'Itsinda", + "details.members": "Urutonde rw'Abagize Itsinda", + "details.pending": "Abategereje Kwemererwa", + "details.invited": "Abatumiwe", + "details.has_no_posts": "Uyu munyamuryango ntabwo arashyiraho ikintu na kimwe", + "details.latest_posts": "Ibiheruka Gushyirwaho", + "details.private": "Yigenga", + "details.grant": "Tanga/Ambura Ubuyobozi", + "details.kick": "Tera", + "details.owner_options": "Ubuyobozi bw'Itsinda", + "details.group_name": "Izina ry'Itsinda", + "details.member_count": "Umubare w'Abagize Itsinda", + "details.creation_date": "Igihe Ryaremewe", + "details.description": "Ibiriranga", + "details.badge_preview": "Ibisobanuro ku Kirango", + "details.change_icon": "Hindura Akarango", + "details.change_colour": "Hindura Ibara", + "details.badge_text": "Amagambo y'Ikirango", + "details.userTitleEnabled": "Erekana Ikirango", + "details.private_help": "Nubyemera, kujya mu itsinda runaka bizajya bisaba guca kwa nyir'itsinda", + "details.hidden": "Ahishe", + "details.hidden_help": "Nubyemera, iri tsinda ntabwo rizajya rigaragara ku rutonde rw'andi matsinda kandi abantu bazajya basabwa kuritumirwamo buri wese ku giti cye mbere yo kurijyamo", + "details.delete_group": "Senya Itsinda", + "event.updated": "Amakuru ku itsinda yahinduweho bijyanye n'igihe", + "event.deleted": "Itsinda rya \"%1\" ryakuweho", + "membership.accept-invitation": "Emera Ubutumire", + "membership.invitation-pending": "Ubutumire Buracyategereje", + "membership.join-group": "Injira mu Itsinda", + "membership.leave-group": "Va mu Itsinda", + "membership.reject": "Hakanira", + "new-group.group_name": "Izina ry'Itsinda:" +} \ No newline at end of file diff --git a/public/language/rw/language.json b/public/language/rw/language.json new file mode 100644 index 0000000000..20306ead7b --- /dev/null +++ b/public/language/rw/language.json @@ -0,0 +1,5 @@ +{ + "name": "Kinyarwanda", + "code": "rw", + "dir": "ltr" +} \ No newline at end of file diff --git a/public/language/rw/login.json b/public/language/rw/login.json new file mode 100644 index 0000000000..72ae32e57c --- /dev/null +++ b/public/language/rw/login.json @@ -0,0 +1,11 @@ +{ + "username-email": "Izina / Email", + "username": "Izina ", + "email": "Email", + "remember_me": "Wibukwe?", + "forgot_password": "Wibagiwe ijambobanga?", + "alternative_logins": "Ukundi Wakwinjiramo", + "failed_login_attempt": "Ntiwinjiyemo. Ongera ugerageze. ", + "login_successful": "Winjiyemo nta ngorane!", + "dont_have_account": "Nta konte ufite?" +} \ No newline at end of file diff --git a/public/language/rw/modules.json b/public/language/rw/modules.json new file mode 100644 index 0000000000..401a21121c --- /dev/null +++ b/public/language/rw/modules.json @@ -0,0 +1,26 @@ +{ + "chat.chatting_with": "Ikiganiro na ", + "chat.placeholder": "Andika ubutumwa bwawe aha. Ushobora gukanda \"Enter\" ngo wohereze.", + "chat.send": "Ohereza", + "chat.no_active": "Nta biganiro byo mu gikari ufite. ", + "chat.user_typing": "%1 ari kwandika ...", + "chat.user_has_messaged_you": "%1 yagusigiye ubutumwa.", + "chat.see_all": "Reba Ubutumwa Bwose", + "chat.no-messages": "Hitamo umuntu ushaka kurebera ibyo mwandikiranye", + "chat.recent-chats": "Ubutumwa Buheruka", + "chat.contacts": "Abo Kuvugisha", + "chat.message-history": "Ubutumwa Bwahise", + "chat.pop-out": "Fungura Akadirishya k'Igikari", + "chat.maximize": "Marirayo", + "chat.seven_days": "Iminsi 7", + "chat.thirty_days": "Iminsi 30", + "chat.three_months": "Amezi 3", + "composer.compose": "Andika", + "composer.show_preview": "Bona Uko Biza Gusa", + "composer.hide_preview": "Hisha Uko Biza Gusa", + "composer.user_said_in": "%1 yavuze muri %2:", + "composer.user_said": "%1 yavuze:", + "composer.discard": "Wiringiye neza ko ushaka kureka kubishyiraho?", + "composer.submit_and_lock": "Shyiraho kandi Unafungirane", + "composer.toggle_dropdown": "Hindura Icyerekezo" +} \ No newline at end of file diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json new file mode 100644 index 0000000000..e7cdb0a674 --- /dev/null +++ b/public/language/rw/notifications.json @@ -0,0 +1,28 @@ +{ + "title": "Amatangazo", + "no_notifs": "Nta matangazo mashya ufite", + "see_all": "Reba Amatangazo Yose", + "mark_all_read": "Garagaza amatangazo yose nk'ayasomwe", + "back_to_home": "Subira kuri %1", + "outgoing_link": "Umurongo Usohoka", + "outgoing_link_message": "Uri kuva muri %1.", + "continue_to": "Komereza kuri %1", + "return_to": "Subira kuri %1", + "new_notification": "Itangazo Rishya", + "you_have_unread_notifications": "Ufite amatangazo utarasoma. ", + "new_message_from": " %1 yakwandikiye", + "upvoted_your_post_in": "%1 yagushimye aguha inota kuri %2 washyizeho.", + "moved_your_post": "%1 yimuye icyo wari washyizeho. ", + "moved_your_topic": "%1 yimuriye ikiganiro cyawe ahandi.", + "favourited_your_post_in": "%1 yatonesheje %2 washyizeho.", + "user_flagged_post_in": "%1 yatambikanye ikintu muri %2", + "user_posted_to": "%1 yanditse kuri: %2", + "user_posted_topic": "%1 yatangije ikiganiro gishya: %2", + "user_mentioned_you_in": "%1 yakuvuze muri %2", + "user_started_following_you": "%1 yatangiye kugukurikira.", + "new_register": "%1 yasabye kwandikwa.", + "email-confirmed": "Email Yemejwe", + "email-confirmed-message": "Urakoze kugaragaza ko email yawe ikora. Ubu ngubu konte yawe irakora nta kabuza. ", + "email-confirm-error-message": "Havutse ikibazo mu gushaka kumenya niba email yawe ikora. Ushobora kuba wakoresheje kode itari yo cyangwa se yarengeje igihe. ", + "email-confirm-sent": "Hoherejwe email yo kubyemeza." +} \ No newline at end of file diff --git a/public/language/rw/pages.json b/public/language/rw/pages.json new file mode 100644 index 0000000000..aa4a415f98 --- /dev/null +++ b/public/language/rw/pages.json @@ -0,0 +1,21 @@ +{ + "home": "Imbere", + "unread": "Ibiganiro Bitarasomwa", + "popular": "Ibiganiro Bikunzwe", + "recent": "Ibiganiro Biheruka", + "users": "Abantu Banditse", + "notifications": "Amatangazo", + "tags": "Ibimenyetso", + "tag": "Ibiganiro bifite ibimenyetso bya \"%1\"", + "user.edit": "Uguhinduraho kwa \"%1\"", + "user.following": "Abantu %1 Akurikira", + "user.followers": "Abantu Bakurikira %1", + "user.posts": "Ibyashyizweho na %1", + "user.topics": "Ibiganiro byatangijwe na %1", + "user.groups": "Amatsinda ya %1", + "user.favourites": "Ibyo %1 Yatonesheje", + "user.settings": "Ugutunganya", + "user.watched": "Ibiganiro bikurikirwa na %1", + "maintenance.text": "%1 ntiboneka kuko ubu iri gutunganywa. Muze kongera kugaruka. ", + "maintenance.messageIntro": "Byongeye, kandi, umuyobozi yasize ubu butumwa: " +} \ No newline at end of file diff --git a/public/language/rw/recent.json b/public/language/rw/recent.json new file mode 100644 index 0000000000..ac9843086b --- /dev/null +++ b/public/language/rw/recent.json @@ -0,0 +1,19 @@ +{ + "title": "Ubuheruka", + "day": "Umunsi", + "week": "Icyumweru", + "month": "Ukwezi", + "year": "Umwaka", + "alltime": "Ibihe Byose", + "no_recent_topics": "Nta biganiro biheruka. ", + "no_popular_topics": "Nta biganiro bikunzwe. ", + "there-is-a-new-topic": "Hari ikiganiro gishya. ", + "there-is-a-new-topic-and-a-new-post": "Hari ikiganiro gishya kimwe n'icyashyizweho gishya kimwe. ", + "there-is-a-new-topic-and-new-posts": "Hari ikiganiro gishya kimwe n'ibyashyizweho bishya %1 .", + "there-are-new-topics": "Hari ibiganiro bishya %1. ", + "there-are-new-topics-and-a-new-post": "Hari ibiganiro bishya %1 n'icyashyizweho gishya kimwe.", + "there-are-new-topics-and-new-posts": "Hari ibiganiro bishya %1 n'ibyashyizweho bishya %2.", + "there-is-a-new-post": "Hari icyashyizweho gishya. ", + "there-are-new-posts": "Hari ibyashyizweho bishya %1.", + "click-here-to-reload": "Kanda hano wongere upakire." +} \ No newline at end of file diff --git a/public/language/rw/register.json b/public/language/rw/register.json new file mode 100644 index 0000000000..332517de87 --- /dev/null +++ b/public/language/rw/register.json @@ -0,0 +1,19 @@ +{ + "register": "Iyandike", + "help.email": "Ubusanzwe, email yawe ntabwo iba ibonwa na bose", + "help.username_restrictions": "Izina rigomba kuba ryihariye kuri uru rubuga kandi rikaba rifite uburebure bw'inyuguti buva kuri %1 kugera kuri %2. Iryo zina ni ryo abantu bazajya bifashisha nka @username mu gihe bakoresheje izina ryawe mu byo banditse. ", + "help.minimum_password_length": "Umubare w'inyuguti n'ibimenyetso bigize ijambobanga ryawe ugomba kuba nibura %1.", + "email_address": "Aderesi ya Email", + "email_address_placeholder": "Shyiramo Aderesi ya Email", + "username": "Izina Ukoresha", + "username_placeholder": "Shyiramo Izina Ukoresha", + "password": "Ijambobanga", + "password_placeholder": "Shyiramo Ijambobanga", + "confirm_password": "Emeza Ijambobanga", + "confirm_password_placeholder": "Emeza Ijambobanga", + "register_now_button": "Iyandike", + "alternative_registration": "Ukundi Wakwiyandika", + "terms_of_use": "Amategeko n'Amabwiriza", + "agree_to_terms_of_use": "Nzakurikiza Amategeko n'Amabwiriza", + "registration-added-to-queue": "Icyifuzo cy'iyandikwa ryawe cyakiriwe ariko gitegereje isuzuma. Uzabimenyeshwa biciye muri email niba ubuyobozi bwakwemereye kwandikwa. " +} \ No newline at end of file diff --git a/public/language/rw/reset_password.json b/public/language/rw/reset_password.json new file mode 100644 index 0000000000..b5450e687d --- /dev/null +++ b/public/language/rw/reset_password.json @@ -0,0 +1,17 @@ +{ + "reset_password": "Rema Bundibushya Ijambobanga", + "update_password": "Vugurura Ijambobanga", + "password_changed.title": "Ijambobanga Ryahinduwe", + "password_changed.message": "

Ijambobanga ryaremwe bundi bushya. Urasabwa kongera ukinjiramo.", + "wrong_reset_code.title": "Kode Itari Yo mu Kurema Bundibushya Ijambobanga", + "wrong_reset_code.message": "Kode yakiriwe mu kurema bundibushya ijambobanga si yo. Ongera ugerageze cyangwa se usabe indi kode.", + "new_password": "Ijambobanga Rishya", + "repeat_password": "Emeza Ijambobanga", + "enter_email": "Tanga email ukoresha maze tuze kukoherereza ubutumwa bugusobanuria uko uri bureme bundibushya konte yawe.", + "enter_email_address": "Shyiramo Email", + "password_reset_sent": "Ubusabe bwo Kurema Bundibushya Bwakiriwe", + "invalid_email": "Email Itemewe / Email Itabaho!", + "password_too_short": "Ijambobanga washyizemo ni rigufi cyane. Gerageza ufate irindi. ", + "passwords_do_not_match": "Ijambobanga waryanditse mu buryo bubiri butandukanye kandi bitemewe. ", + "password_expired": "Ijambobanga ryawe ryarashaje. Shaka irindi. " +} \ No newline at end of file diff --git a/public/language/rw/search.json b/public/language/rw/search.json new file mode 100644 index 0000000000..745860b9a1 --- /dev/null +++ b/public/language/rw/search.json @@ -0,0 +1,40 @@ +{ + "results_matching": "Habonetse ibintu (ikintu) %1 gihura na \"%2\". (Byafashe amasegonda %3)", + "no-matches": "Nta cyabonetse", + "advanced-search": "Gushaka Byisumbuye", + "in": "Muri", + "titles": "Imitwe", + "titles-posts": "Imitwe n'Ibyashyizweho", + "posted-by": "Mu Byashyizweho na", + "in-categories": "Mu Byiciro bya", + "search-child-categories": "Shakira no mu byiciro bikomokaho", + "reply-count": "Umubare w'Ibisubizo", + "at-least": "Ungana Nibura na", + "at-most": "Utarengeje", + "post-time": "Igihe Byashyiriweho", + "newer-than": "Nyuma ya", + "older-than": "Mbere ya", + "any-date": "Itariki Yose", + "yesterday": "Ejo Hashize", + "one-week": "Icyumweru kimwe", + "two-weeks": "Ibyumweru bibiri", + "one-month": "Ukwezi kumwe", + "three-months": "Amezi atatu", + "six-months": "Amezi atandatu", + "one-year": "Umwaka umwe", + "sort-by": "Bigaragare Ukurikije", + "last-reply-time": "Igihe baherukira gusubiza", + "topic-title": "Umutwe w'ikiganiro", + "number-of-replies": "Umubare w'ibisubizo", + "number-of-views": "Umubare w'ababirebye", + "topic-start-date": "Igihe ikiganiro cyatangijwe", + "username": "Izina ry'umukoresha", + "category": "Icyiciro", + "descending": "Uva ku kinini ujya ku gito", + "ascending": "Uva ku gito ujya ku kinini", + "save-preferences": "Bika ibyo wahisemo", + "clear-preferences": "Hanagura ibyo wahisemo", + "search-preferences-saved": "Ibyo wahisemo mu gihe cy'ishaka byabitswe", + "search-preferences-cleared": "Ibyo wahisemo mu gihe cy'ishaka byahanaguwe", + "show-results-as": "Ibiboneka bigaragazwe nk'" +} \ No newline at end of file diff --git a/public/language/rw/success.json b/public/language/rw/success.json new file mode 100644 index 0000000000..80f0d8d3ad --- /dev/null +++ b/public/language/rw/success.json @@ -0,0 +1,6 @@ +{ + "success": "Byaciyemo", + "topic-post": "Wabishyizeho nta ngorane. ", + "authentication-successful": "Igenzura Ryaciyemo", + "settings-saved": "Ibyatunganyijwe byakiriwe!" +} \ No newline at end of file diff --git a/public/language/rw/tags.json b/public/language/rw/tags.json new file mode 100644 index 0000000000..378fa2b3e8 --- /dev/null +++ b/public/language/rw/tags.json @@ -0,0 +1,7 @@ +{ + "no_tag_topics": "Nta biganiro bifite aka kamenyetso bihari. ", + "tags": "Utumenyetso", + "enter_tags_here": "Andika akamenyetso bijyanye aha. Buri kamenyetso kagomba kuba kagizwe n'inyuguti hagati ya %1 na %2. ", + "enter_tags_here_short": "Shyiraho utumenyetso...", + "no_tags": "Nta tumenyetso twari twashyirwaho. " +} \ No newline at end of file diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json new file mode 100644 index 0000000000..6e4804ed8b --- /dev/null +++ b/public/language/rw/topic.json @@ -0,0 +1,100 @@ +{ + "topic": "Ikiganiro", + "topic_id": "Nimero y'Ikiganiro", + "topic_id_placeholder": "Shyiramo nimero y'ikiganiro", + "no_topics_found": "Nta kiganiro cyabonetse!", + "no_posts_found": "Nta cyashyizweho cyabonetse!", + "post_is_deleted": "Ibyari byanditse byakuweho!", + "topic_is_deleted": "Iki kiganiro cyakuweho!", + "profile": "Ishusho", + "posted_by": "Byashyizweho na %1", + "posted_by_guest": "Byashyizweho na Umushyitsi", + "chat": "Igikari", + "notify_me": "Uzajye umenyeshwa ibisubizo bishya kuri iki kiganiro", + "quote": "Terura", + "reply": "Subiza", + "guest-login-reply": "Injiramo maze usubize", + "edit": "Hinduraho", + "delete": "Siba", + "purge": "Sibanganya", + "restore": "Garuraho", + "move": "Imura", + "fork": "Gabanyamo", + "link": "Shyiraho Umurongo", + "share": "Sangiza", + "tools": "Ibikoresho", + "flag": "Tambikana", + "locked": "Birafungiranye", + "bookmark_instructions": "Kanda hano kugirango ugezwe aho wari ugeze usoma. Niba utabishaka, wafunga aka kadirishya. ", + "flag_title": "Bimenyeshe ubuyobozi", + "flag_confirm": "Wiringiye neza ko ushaka kumenyesha ibi ubuyobozi? ", + "flag_success": "Bimaze kumenyeshwa ubuyobozi ngo bikurikiranwe. ", + "deleted_message": "Iki kiganiro cyamaze gukurwaho. Abantu babifitiye uburenganzira ni bo bonyine bashobora kukibona. ", + "following_topic.message": "Ntabwo uzongera kubimenyeshwa nihagira umuntu ugira icyo yandika kuri iki kiganiro. ", + "not_following_topic.message": "Ntabwo uzongera kujya umenyeshwa ku bibera muri iki kiganiro. ", + "login_to_subscribe": "Ba umunyamuryango cyangwa winjiremo niba ushaka kwiyandikisha kuri iki kiganiro. ", + "markAsUnreadForAll.success": "Ikiganiro kigizwe nk'icyasomwe na bose", + "watch": "Cunga", + "unwatch": "Rekeraho Gucunga", + "watch.title": "Ujye umenyeshwa ibyongerwaho bishya kuri iki kiganiro", + "unwatch.title": "Rekera aho gucunga iki kiganiro", + "share_this_post": "Sangiza Ibi", + "thread_tools.title": "Ibikoresho by'Ikiganiro", + "thread_tools.markAsUnreadForAll": "Bigaragaze nk'Ibyasomwe", + "thread_tools.pin": "Zamura Ikiganiro", + "thread_tools.unpin": "Manura Ikiganiro", + "thread_tools.lock": "Fungirana Ikiganiro", + "thread_tools.unlock": "Fungurira Ikiganiro", + "thread_tools.move": "Imura Ikiganiro", + "thread_tools.move_all": "Byimure Byose", + "thread_tools.fork": "Gabanyaho ku Kiganiro", + "thread_tools.delete": "Kuraho Ikiganiro", + "thread_tools.delete_confirm": "Wiringiye neza ko ushaka gukuraho iki kiganiro?", + "thread_tools.restore": "Subizaho Ikiganiro", + "thread_tools.restore_confirm": "Wiringiye neza ko ushaka kugarura iki kiganiro?", + "thread_tools.purge": "Sibanganya Ikiganiro", + "thread_tools.purge_confirm": "Wiringiye neza ko ushaka gusibanganya iki kiganiro?", + "topic_move_success": "Nta ngorane, iki kiganiro kimaze kwimurirwa muri %1", + "post_delete_confirm": "Wiringiye neza ko ushaka gukuraho iki kiganiro?", + "post_restore_confirm": "Wiringiye neza ko ushaka kugarura iki kiganiro? ", + "post_purge_confirm": "Wiringiye neza ko ushaka gusibangaya iki kiganiro?", + "load_categories": "Ibyiciro Biraje", + "disabled_categories_note": "Ibyiciro bitagaragazwa birasa n'ibipfutse", + "confirm_move": "Imura", + "confirm_fork": "Gabanyaho", + "favourite": "Tonesha", + "favourites": "Ibyatoneshejwe", + "favourites.has_no_favourites": "Nta kintu na kimwe wari watonesha. Tonesha ibintu bimwe na bimwe kugirango ujye ubibona aha!", + "loading_more_posts": "Ibindi Biraje", + "move_topic": "Imura Ikiganiro", + "move_topics": "Imura Ibiganiro", + "move_post": "Imura Icyashyizweho", + "post_moved": "Icyashizweho kirimuwe!", + "fork_topic": "Gabanyaho ku Kiganiro", + "topic_will_be_moved_to": "Iki kiganiro kirimurirwa mu cyiciro", + "fork_topic_instruction": "Kanda ku byashizweho ushaka kugabanyaho", + "fork_no_pids": "Nta kintu wahisemo!", + "fork_success": "Umaze kugabanyaho ku kiganiro! Kanda hano ugezwe ku kiganiro cyavutse. ", + "composer.title_placeholder": "Shyira umutwe w'ikiganiro cyawe aha...", + "composer.handle_placeholder": "Izina", + "composer.discard": "Byihorere", + "composer.submit": "Shyiraho", + "composer.replying_to": "Gusubiza %1", + "composer.new_topic": "Ikiganiro Gishya", + "composer.uploading": "gupakira...", + "composer.thumb_url_label": "Omekaho thumbnail URL y'ikiganiro", + "composer.thumb_title": "Ongera agafotondanga kuri iki kiganiro", + "composer.thumb_url_placeholder": "http://example.com/thumb.png", + "composer.thumb_file_label": "Cyangwa upakireho ifayilo ", + "composer.thumb_remove": "Hanagura imirongo", + "composer.drag_and_drop_images": "Terura Ubundi Utereke Amafoto Aha", + "more_users_and_guests": "Abantu (umuntu) banditse barenga %1 n'abashyitsi (umushyitsi) %2 ", + "more_users": "Abantu (umuntu) banditse barenga %1 ", + "more_guests": "Abashyitsi (umushyitsi) barenga %1 ", + "users_and_others": "%1 n'abandi %2 ", + "sort_by": "Ubigaragaze Ukurikije", + "oldest_to_newest": "Ibya Kera Ujya ku bya Vuba", + "newest_to_oldest": "Ibya Vuba Ujya ku bya Kera", + "most_votes": "Amajwi yiganje", + "most_posts": "Ibyashyizweho byiganje" +} \ No newline at end of file diff --git a/public/language/rw/unread.json b/public/language/rw/unread.json new file mode 100644 index 0000000000..075fdc7792 --- /dev/null +++ b/public/language/rw/unread.json @@ -0,0 +1,10 @@ +{ + "title": "Ibitarasomwa", + "no_unread_topics": "Nta biganiro bitarasomwa bihari. ", + "load_more": "Zana Ibindi", + "mark_as_read": "Bigire nkaho Byasomwe", + "selected": "Ibyatoranyijwe", + "all": "Byose", + "all_categories": "Ibyiciro Byose", + "topics_marked_as_read.success": "Ibiganiro byamaze kugaragazwa nk'ibyasomwe!" +} \ No newline at end of file diff --git a/public/language/rw/user.json b/public/language/rw/user.json new file mode 100644 index 0000000000..3deea4707a --- /dev/null +++ b/public/language/rw/user.json @@ -0,0 +1,88 @@ +{ + "banned": "Yarirukanwe", + "offline": "Ntari ku Murongo", + "username": "Izina ry'Umuntu", + "joindate": "Igiye Yaziye", + "postcount": "Ingano y'ibyo Yashyizeho", + "email": "Email", + "confirm_email": "Emeza Email", + "ban_account": "Irukana", + "ban_account_confirm": "Wiringiye neza ko ushaka kwirukana uyu muntu?", + "unban_account": "Garura iyi Konte", + "delete_account": "Siba Konte", + "delete_account_confirm": "Wiringiye neza ko ushaka gusiba konte yawe?
Numara kuyisiba ntabwo urabasha kwisubira kandi nturabasha kugarura ibyo wari ufiteho

Shyiramo izina ryawe kugirango wemeze ko koko ushaka gusenya iyi konte.", + "delete_this_account_confirm": "Wiringiye neza ko ushaka gusiba iyi konte?
Ntabwo uri bubashe kwisubira kandi ntabwo urabasha gusubirana ibyo wari ufiteho numara kuyisiba

", + "fullname": "Izina Ryuzuye", + "website": "Urubuga", + "location": "Ahantu", + "age": "Imyaka", + "joined": "Yaje", + "lastonline": "Aheruka ku Murongo", + "profile": "Ishusho", + "profile_views": "Ishusho Yarebwe", + "reputation": "Amanota", + "favourites": "Ibitoneshwa", + "watched": "Ibikurikiranwa", + "followers": "Abamukurikira", + "following": "Akurikira", + "aboutme": "Inshamake y'Ubuzima", + "signature": "Intero", + "gravatar": "Gravatar", + "birthday": "Itariki y'Amavuko", + "chat": "Mu Gikari", + "follow": "Kurikira", + "unfollow": "Ntukurikire", + "more": "Ibindi", + "profile_update_success": "Ishusho yashyizwe ku gihe nta ngorane!", + "change_picture": "Hindura Ifoto", + "edit": "Hinduraho", + "uploaded_picture": "Ifoto Yapakiwe", + "upload_new_picture": "Pakira Ifoto Nshya", + "upload_new_picture_from_url": "Pakira Ifoto Nshya Ukoresheje URL", + "current_password": "Ijambobanga Risanzweho", + "change_password": "Hindura Ijambobanga", + "change_password_error": "Ijambobanga Ritari Ryo!", + "change_password_error_wrong_current": "Ijambobanga ryawe watanze nk'irisanzweho ntabwo ari ryo!", + "change_password_error_length": "Ijambobanga watanze ni rigufi cyane!", + "change_password_error_match": "Ijambobanga ugomba kuryandukura mu buryo bumwe inshuro ebyiri!", + "change_password_error_privileges": "Nta burenganzira ufite bwo guhindura iri jambobanga. ", + "change_password_success": "Ijambobanga ryawe ryavuguruwe!", + "confirm_password": "Emeza Ijambobanga", + "password": "Ijambobanga", + "username_taken_workaround": "Izina ushaka kujya ukoresha twasanze ryarafashwe. Ntugire impungenge kuko twakuboneye iryo byenda kumera kimwe. Uzaba uzwi ku izina rya %1", + "upload_picture": "Gushyiraho ifoto", + "upload_a_picture": "Shyiraho ifoto", + "image_spec": "Wemerewe gushyiraho ifoto iri muri foruma ya PNG, JPG, cyangwa GIF ", + "settings": "Itunganya", + "show_email": "Hagaragazwe Email Yanjye", + "show_fullname": "Hagaragazwe Izina Ryuzuye Ryanjye", + "restrict_chats": "Emerera ubutumwa buciye mu gikari abantu ukurikira gusa", + "digest_label": "Iyandikishe ku Ngingo z'Ingenzi", + "digest_description": "Iyandikishe ku makuru aciye kuri email ajyanye n'ibivugirwa aha (amatangazo mashya n'ibiganiro) biciye muri gahunda yagenwe", + "digest_off": "Birafunze", + "digest_daily": "Buri Munsi", + "digest_weekly": "Buri Cyumweru", + "digest_monthly": "Buri Kwezi", + "send_chat_notifications": "Njye nohererezwa email igihe hari ubutumwa bwo mu gikari banyoherereje ntari ku murongo", + "send_post_notifications": "Njye nohererezwa email mu gihe hari abanditse ku biganiro niyandikishijeho", + "settings-require-reload": "Hari igihe ibyo watunganyije bitagaragara iyo utongeye ngo upakire paji uriho. Kanda hano upakire iyi paji bundibushya. ", + "has_no_follower": "Uyu muntu ntabwo afite abamukurikira :(", + "follows_no_one": "Uyu muntu ntabwo akurikira umuntu numwe :(", + "has_no_posts": "Uyu muntu nta kintu arashyiraho. ", + "has_no_topics": "Uyu muntu nta kiganiro aratangiza na kimwe. ", + "has_no_watched_topics": "Uyu muntu ntabwo arakurikira ikiganiro na kimwe.", + "email_hidden": "Email Yahishwe", + "hidden": "byahishwe", + "paginate_description": "Gabanya ibiganiro n'ibyashyizweho mu ma paji aho kugirango umuntu ajye amanuka ubudahagarara ", + "topics_per_page": "Ibiganiro kuri Buri Paji", + "posts_per_page": "Ibyashyizweho kuri Buri Paji", + "notification_sounds": "Hajye humvikana ijwi rikumenyesha ko haje itangazo rishya", + "browsing": "Gutunganya Uburyo Usoma", + "open_links_in_new_tab": "Fungurira imirongo ijya hanze mu idirishya rishya", + "enable_topic_searching": "Emerera Ugushakira mu Kiganiro", + "topic_search_help": "Nibyemerwa, ugushakira mu kiganiro bizajya biba ari byo bikorwa maze bitume umuntu abasha gushakira mu kiganiro hose aho gushakira kuri paji igaragarira amaso, imbere yawe gusa", + "follow_topics_you_reply_to": "Kurikira ibiganiro ushyiraho ibisubizo", + "follow_topics_you_create": "Kurikira ibiganiro uba watangije", + "grouptitle": "Hitamo umutwe w'itsinda ushaka ko uzajya ugaragara", + "no-group-title": "Nta mutwe w'itsinda" +} \ No newline at end of file diff --git a/public/language/rw/users.json b/public/language/rw/users.json new file mode 100644 index 0000000000..944183afcb --- /dev/null +++ b/public/language/rw/users.json @@ -0,0 +1,21 @@ +{ + "latest_users": "Abantu Bashya", + "top_posters": "Abashyizeho Byinshi", + "most_reputation": "Abafite Amanota Menshi", + "search": "Shaka", + "enter_username": "Shyiramo izina ryo gushaka", + "load_more": "Zana Ibindi", + "users-found-search-took": "Habonetse abantu (umuntu) %1! Byatwaye amasegonda %2 gusa.", + "filter-by": "Yungurura Ukurikije", + "online-only": "Abari ku murongo gusa", + "picture-only": "Ifoto gusa", + "invite": "Tumira", + "invitation-email-sent": "Ubutumire bwa email bwohererejwe %1", + "user_list": "Urutonde rw'Abantu", + "recent_topics": "Ibiganiro Biheruka", + "popular_topics": "Ibiganiro Bikunzwe", + "unread_topics": "Ibiganiro Bitarasomwa", + "categories": "Ibyiciro", + "tags": "Ibimenyetso", + "map": "Ikarita" +} \ No newline at end of file diff --git a/public/language/sc/category.json b/public/language/sc/category.json index 25d11361e2..57d0ccd73e 100644 --- a/public/language/sc/category.json +++ b/public/language/sc/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Arresonada Noa", "guest-login-post": "Log in to post", "no_topics": "Non bi sunt arresonadas in custa creze.
Pro ite non nde pones una?", "browsing": "navighende", "no_replies": "Perunu at rispostu", + "no_new_posts": "No new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", diff --git a/public/language/sc/groups.json b/public/language/sc/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/sc/groups.json +++ b/public/language/sc/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sk/category.json b/public/language/sk/category.json index 08035d7fdc..2370e4dec8 100644 --- a/public/language/sk/category.json +++ b/public/language/sk/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nová téma", "guest-login-post": "Log in to post", "no_topics": "V tejto kategórií zatiaľ nie sú žiadne príspevky.
Môžeš byť prvý!", "browsing": "prehliada", "no_replies": "Nikdo ešte neodpovedal", + "no_new_posts": "No new posts.", "share_this_category": "zdielaj túto kategóriu", "watch": "Watch", "ignore": "Ignoruj", diff --git a/public/language/sk/groups.json b/public/language/sk/groups.json index 1e1623c38f..3bd63ad94a 100644 --- a/public/language/sk/groups.json +++ b/public/language/sk/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sr/category.json b/public/language/sr/category.json index 57bcb77b34..5ab350780e 100644 --- a/public/language/sr/category.json +++ b/public/language/sr/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nova Tema", "guest-login-post": "Пријавите се за слање порука", "no_topics": "Ne postoji nijedna tema u ovoj kategoriji.
Zasto ne bi postavio jednu?", "browsing": "gleda", "no_replies": "Jos uvek nema odgovora", + "no_new_posts": "No new posts.", "share_this_category": "Podeli ovu kategoriju", "watch": "Прати", "ignore": "Игнориши", diff --git a/public/language/sr/groups.json b/public/language/sr/groups.json index a4666c6d8f..d0d34f1efd 100644 --- a/public/language/sr/groups.json +++ b/public/language/sr/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sv/category.json b/public/language/sv/category.json index d82abe3a24..b83dbb74e6 100644 --- a/public/language/sv/category.json +++ b/public/language/sv/category.json @@ -1,12 +1,15 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Nytt ämne", "guest-login-post": "Logga in för att posta", "no_topics": "Det finns inga ämnen i denna kategori.
Varför skapar inte du ett ämne?", "browsing": "läser", "no_replies": "Ingen har svarat", + "no_new_posts": "No new posts.", "share_this_category": "Dela den här kategorin", - "watch": "Watch", + "watch": "Bevaka", "ignore": "Ignorera", - "watch.message": "You are now watching updates from this category", - "ignore.message": "You are now ignoring updates from this category" + "watch.message": "Du bevakar nu uppdateringar ifrån denna kategori", + "ignore.message": "Du ignorerar nu uppdateringar ifrån denna kategori" } \ No newline at end of file diff --git a/public/language/sv/email.json b/public/language/sv/email.json index f71376777c..74f1366e24 100644 --- a/public/language/sv/email.json +++ b/public/language/sv/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Återställning av lösenord efterfrågat - %1!", "welcome-to": "Välkommen till %1", - "invite": "Invitation from %1", + "invite": "Inbjudan ifrån %1", "greeting_no_name": "Hej", "greeting_with_name": "Hej %1", "welcome.text1": "Tack för att du registerar dig på %1!", "welcome.text2": "För att slutföra aktiveringen av ditt konto, behöver vi verifiera att du har tillgång till den epostadress du registrerade dig med.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "En administrator har accepterat din registreringsansökan. Du kan logga in med ditt användarnamn och lösenord nu.", "welcome.cta": "Klicka här för att bekräfta din epostadress ", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 har bjudit in dig till %2", + "invitation.ctr": "Klicka här för att skapa ditt konto.", "reset.text1": "Vi fick en förfrågan om att återställa ditt lösenord, möjligen för att du har glömt det. Om detta inte är fallet, så kan du bortse från det här epostmeddelandet. ", "reset.text2": "För att fortsätta med återställning av lösenordet så kan du klicka på följande länk:", "reset.cta": "Klicka här för att återställa ditt lösenord", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 38992271d5..109a7e7c6a 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -2,7 +2,7 @@ "invalid-data": "Ogiltig data", "not-logged-in": "Du verkar inte vara inloggad.", "account-locked": "Ditt konto har tillfälligt blivit låst", - "search-requires-login": "Searching requires an account - please login or register.", + "search-requires-login": "Sökning kräver ett konto, var god logga in eller registrera dig.", "invalid-cid": "Ogiltigt id för kategori", "invalid-tid": "Ogiltigt id för ämne", "invalid-pid": "Ogiltigt id för inlägg", @@ -18,14 +18,14 @@ "username-taken": "Användarnamn upptaget", "email-taken": "Epostadress upptagen", "email-not-confirmed": "Din epostadress är ännu inte bekräftad. Klicka här för att bekräfta din epostadress.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", - "email-confirm-failed": "We could not confirm your email, please try again later.", - "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", + "email-not-confirmed-chat": "Du kan ej använda chatten förrän din epostadress har blivit bekräftad, var god klicka här för att bekräfta din epostadress.", + "no-email-to-confirm": "Detta forum kräver bekräftning av epostadresser, var god klicka här för att fylla i en epostadress", + "email-confirm-failed": "Vi kunde ej bekräfta din epostadress, var god försök igen senare.", + "confirm-email-already-sent": "Bekräftningsbrev redan skickat, var god vänta %1 minut(er) innan du skickar ett nytt.", "username-too-short": "Användarnamnet är för kort", "username-too-long": "Användarnamnet är för långt", "user-banned": "Användare bannlyst", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Du måste vänta %1 sekund(er) innan du gör ditt första inlägg", "no-category": "Kategorin hittades inte", "no-topic": "Ämnet hittades inte", "no-post": "Inlägget hittades inte", @@ -36,52 +36,52 @@ "no-emailers-configured": "Inga tillägg för epostadress har laddats, så något textmeddelande kunde inte skickas", "category-disabled": "Kategorin inaktiverad", "topic-locked": "Ämnet låst", - "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", + "post-edit-duration-expired": "Du kan endast ändra inlägg inom %1 sekund(er) efter att ha skickat det", "still-uploading": "Vänta medan uppladdningen slutförs.", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", - "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", - "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", - "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", - "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", - "file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file", + "content-too-short": "Skriv ett längre inlägg. Inlägg måste innehålla minst %1 tecken.", + "content-too-long": "Skriv ett kortare inlägg. Inlägg kan inte innehålla mer än %1 tecken.", + "title-too-short": "Skriv en längre rubrik. Rubriker måste innehålla minst %1 tecken.", + "title-too-long": "Skriv en kortare rubrik. Rubriker kan inte innehålla mer än %1 tecken.", + "too-many-posts": "Du måste vänta minst %1 sekund(er) mellan varje inlägg", + "too-many-posts-newbie": "Som ny användare måste du vänta %1 sekund(er) mellan varje inlägg tills dess du har %2 förtroende", + "tag-too-short": "Fyll i ett längre märkord. Märkord måste vara minst %1 tecken långa", + "tag-too-long": "Fyll i ett kortare märkord. Märkord kan ej vara längre än %1 tecken långa", + "not-enough-tags": "Ej tillräckligt många märkord. Ämnen måste ha minst %1 märkord", + "too-many-tags": "För många märkord. Ämnen kan ej har mer än %1 märkord", + "file-too-big": "Den maximalt tillåtna filstorleken är %1 kB - ladda upp en mindre fil", "cant-vote-self-post": "Du kan inte rösta på ditt eget inlägg.", "already-favourited": "Du har redan favoriserat det här inlägget", "already-unfavourited": "Du har redan avfavoriserat det här inlägget", "cant-ban-other-admins": "Du kan inte bannlysa andra administratörer.", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Du är den enda administratören. Lägg till en annan användare som administratör innan du tar bort dig själv.", "invalid-image-type": "Ogiltig bildtyp. Tillåtna typer är: % 1", "invalid-image-extension": "Ogiltigt bildformat", "invalid-file-type": "Ogiltig filtyp. Tillåtna typer är: % 1", "group-name-too-short": "Gruppnamnet är för kort", "group-already-exists": "Gruppen existerar redan", "group-name-change-not-allowed": "Gruppnamnet får inte ändras", - "group-already-member": "You are already part of this group", - "group-needs-owner": "This group requires at least one owner", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-already-member": "Du är redan en del av gruppen", + "group-needs-owner": "Gruppen kräver minst en ägare", + "group-already-invited": "Användaren har redan bjudits in", + "group-already-requested": "Din medlemsskapsförfrågan har redan skickats", "post-already-deleted": "Inlägget är redan raderat", "post-already-restored": "Inlägget är redan återställt", "topic-already-deleted": "Ämnet är redan raderat", "topic-already-restored": "Ämnet är redan återställt", - "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", + "cant-purge-main-post": "Huvudinlägg kan ej rensas, ta bort ämnet istället", "topic-thumbnails-are-disabled": "Miniatyrbilder för ämnen är inaktiverat", "invalid-file": "Ogiltig fil", "uploads-are-disabled": "Uppladdningar är inaktiverat", - "signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).", - "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", + "signature-too-long": "Din signatur kan inte vara längre än %1 tecken.", + "about-me-too-long": "Din om mig kan inte vara längre än %1 tecken.", "cant-chat-with-yourself": "Du kan inte chatta med dig själv.", "chat-restricted": "Denna användaren har begränsat sina chatt-meddelanden. Användaren måste följa dig innan ni kan chatta med varann", - "too-many-messages": "You have sent too many messages, please wait awhile.", + "too-many-messages": "Du har skickat för många meddelanden, var god vänta", "reputation-system-disabled": "Ryktessystemet är inaktiverat.", "downvoting-disabled": "Nedröstning är inaktiverat", "not-enough-reputation-to-downvote": "Du har inte tillräckligt förtroende för att rösta ner det här meddelandet", "not-enough-reputation-to-flag": "Du har inte tillräckligt förtroende för att flagga det här inlägget.", - "already-flagged": "You have already flagged this post", + "already-flagged": "Du har redan flaggat det här inlägget", "reload-failed": "NodeBB stötte på problem med att ladda om: \"%1\". NodeBB kommer fortsätta servera den befintliga resurser till klienten, men du borde återställa det du gjorde alldeles innan du försökte ladda om.", "registration-error": "Registreringsfel", "parse-error": "Något gick fel vid tolkning av svar från servern", diff --git a/public/language/sv/global.json b/public/language/sv/global.json index 647cbec5d0..b7ad673b45 100644 --- a/public/language/sv/global.json +++ b/public/language/sv/global.json @@ -3,10 +3,10 @@ "search": "Sök", "buttons.close": "Stäng", "403.title": "Tillgång Nekad", - "403.message": "You seem to have stumbled upon a page that you do not have access to.", - "403.login": "Perhaps you should try logging in?", + "403.message": "Du verkar ha ramlat in på en sida du ej har tillgång till.", + "403.login": "Du kanske bör försöka logga in?", "404.title": "Sidan saknas", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "Du verkar ha ramlat in på en sida som inte finns. Återgå till första sidan.", "500.title": "Internt fel.", "500.message": "Hoppsan! Verkar som att något gått snett!", "register": "Registrera", @@ -22,13 +22,13 @@ "pagination.out_of": "%1 av %2", "pagination.enter_index": "Skriv in index ", "header.admin": "Admin", - "header.categories": "Categories", + "header.categories": "Kategorier", "header.recent": "Senaste", "header.unread": "Olästa", "header.tags": "Märkningar", "header.popular": "Populära", "header.users": "Användare", - "header.groups": "Groups", + "header.groups": "Grupper", "header.chats": "Chattar", "header.notifications": "Notiser", "header.search": "Sök", @@ -51,7 +51,7 @@ "views": "Visningar", "reputation": "Rykte", "read_more": "läs mer", - "more": "More", + "more": "Mer", "posted_ago_by_guest": "inskickad %1 av anonym", "posted_ago_by": "inskickad %1 av %2", "posted_ago": "inskickad %1", @@ -77,7 +77,7 @@ "updated.title": "Forum uppdaterades", "updated.message": "Det här forumet har nu uppdaterats till senaste versionen. Klicka här för att ladda om sidan.", "privacy": "Integritet", - "follow": "Follow", - "unfollow": "Unfollow", + "follow": "Följ", + "unfollow": "Sluta följ", "delete_all": "Ta bort Alla" } \ No newline at end of file diff --git a/public/language/sv/groups.json b/public/language/sv/groups.json index 2cb6de26df..248beda16e 100644 --- a/public/language/sv/groups.json +++ b/public/language/sv/groups.json @@ -1,49 +1,50 @@ { "groups": "Grupper", "view_group": "Visa grupp ", - "owner": "Group Owner", - "new_group": "Create New Group", - "no_groups_found": "There are no groups to see", - "pending.accept": "Accept", - "pending.reject": "Reject", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", - "cover-instructions": "Drag and Drop a photo, drag to position, and hit Save", - "cover-change": "Change", - "cover-save": "Save", - "cover-saving": "Saving", + "owner": "Gruppägare", + "new_group": "Skapa ny grupp", + "no_groups_found": "Det finns inga grupper att se", + "pending.accept": "Acceptera", + "pending.reject": "Neka", + "pending.accept_all": "Acceptera alla", + "pending.reject_all": "Neka alla", + "pending.none": "Det finns inga väntande medlemmar just nu", + "invited.none": "Det finns inga inbjudna medlemmar just nu", + "invited.uninvite": "Dra tillbaka inbjudan", + "invited.search": "Sök efter en användare att lägga till i denna grupp", + "cover-instructions": "Dra och släpp ett foto, dra till position och tryck Spara", + "cover-change": "Ändra", + "cover-save": "Spara", + "cover-saving": "Sparar", "details.title": "Detaljer för gruppen ", "details.members": "Medlemmar", - "details.pending": "Pending Members", - "details.invited": "Invited Members", + "details.pending": "Väntande medlemmar", + "details.invited": "Inbjudna medlemmar", "details.has_no_posts": "Den här gruppens medlemmar har inte skrivit några inlägg.", "details.latest_posts": "Senaste inlägg", - "details.private": "Private", - "details.grant": "Grant/Rescind Ownership", - "details.kick": "Kick", - "details.owner_options": "Group Administration", - "details.group_name": "Group Name", - "details.member_count": "Member Count", - "details.creation_date": "Creation Date", - "details.description": "Description", - "details.badge_preview": "Badge Preview", - "details.change_icon": "Change Icon", - "details.change_colour": "Change Colour", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", - "details.hidden": "Hidden", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "details.delete_group": "Delete Group", - "event.updated": "Group details have been updated", - "event.deleted": "The group \"%1\" has been deleted", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "details.private": "Privat", + "details.grant": "Ge/Ta ifrån ägarskap", + "details.kick": "Sparka ut", + "details.owner_options": "Gruppadministration", + "details.group_name": "Gruppnamn", + "details.member_count": "Medlemsantal", + "details.creation_date": "Skapatdatum", + "details.description": "Beskrivning", + "details.badge_preview": "Förhandsgranskning av märke", + "details.change_icon": "Byt ikon", + "details.change_colour": "Byt färg", + "details.badge_text": "Märkestext", + "details.userTitleEnabled": "Visa märke", + "details.private_help": "Om aktiverat kommer en gruppägare behöva godkänna nya gruppmedlemmar", + "details.hidden": "Dold", + "details.hidden_help": "Om aktiverat kommer gruppen inte synas i grupplistan och användare måste bli inbjudna manuellt", + "details.delete_group": "Ta bort grupp", + "event.updated": "Gruppdetaljerna har uppdaterats", + "event.deleted": "Gruppen \"%1\" har tagits bort", + "membership.accept-invitation": "Acceptera inbjudan", + "membership.invitation-pending": "Inbjudan väntar på svar", + "membership.join-group": "Gå med i grupp", + "membership.leave-group": "Lämna grupp", + "membership.reject": "Neka", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/sv/login.json b/public/language/sv/login.json index 363da51e9b..1b3cf37221 100644 --- a/public/language/sv/login.json +++ b/public/language/sv/login.json @@ -1,7 +1,7 @@ { "username-email": "Användarnamn eller epostadress", "username": "Användarnamn", - "email": "Email", + "email": "Epostadress", "remember_me": "Kom ihåg mig?", "forgot_password": "Glömt lösenord?", "alternative_logins": "Alternativa inloggningssätt", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index 008af93bc0..a370feb0b1 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -15,12 +15,12 @@ "chat.seven_days": "7 Dagar", "chat.thirty_days": "30 Dagar", "chat.three_months": "3 Månader", - "composer.compose": "Compose", - "composer.show_preview": "Show Preview", - "composer.hide_preview": "Hide Preview", + "composer.compose": "Komponera", + "composer.show_preview": "Visa förhandsgranskning", + "composer.hide_preview": "Dölj förhandsgranskning", "composer.user_said_in": "%1 sa i %2:", "composer.user_said": "%1 sa:", "composer.discard": "Är du säker på att du vill förkasta det här inlägget?", - "composer.submit_and_lock": "Submit and Lock", - "composer.toggle_dropdown": "Toggle Dropdown" + "composer.submit_and_lock": "Skicka och lås", + "composer.toggle_dropdown": "Visa/Dölj dropdown" } \ No newline at end of file diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json index c95db1b8ee..424b6f4e42 100644 --- a/public/language/sv/notifications.json +++ b/public/language/sv/notifications.json @@ -2,7 +2,7 @@ "title": "Notiser", "no_notifs": "Du har inga nya notiser", "see_all": "Visa alla notiser", - "mark_all_read": "Mark all notifications read", + "mark_all_read": "Markera alla notiser som lästa", "back_to_home": "Tillbaka till %1", "outgoing_link": "Utgående länk", "outgoing_link_message": "Du lämnar nu %1. ", @@ -20,7 +20,7 @@ "user_posted_topic": "%1 har skapat ett nytt ämne: %2", "user_mentioned_you_in": "%1 nämnde dig i %2", "user_started_following_you": "%1 började följa dig.", - "new_register": "%1 sent a registration request.", + "new_register": "%1 skickade en registreringsförfrågan.", "email-confirmed": "Epost bekräftad", "email-confirmed-message": "Tack för att du bekräftat din epostadress. Ditt konto är nu fullt ut aktiverat.", "email-confirm-error-message": "Det uppstod ett fel med att bekräfta din epostadress. Kanske var koden ogiltig eller har gått ut.", diff --git a/public/language/sv/pages.json b/public/language/sv/pages.json index 94c6a26d0e..b05979fb58 100644 --- a/public/language/sv/pages.json +++ b/public/language/sv/pages.json @@ -5,17 +5,17 @@ "recent": "Senaste ämnena", "users": "Registrerade användare", "notifications": "Notiser", - "tags": "Tags", - "tag": "Topics tagged under \"%1\"", + "tags": "Märkord", + "tag": "Ämnen märkta med \"%1\"", "user.edit": "Ändrar \"%1\"", "user.following": "Personer %1 Följer", "user.followers": "Personer som följer %1", "user.posts": "Inlägg skapat av %1", "user.topics": "Ämnen skapade av %1", - "user.groups": "%1's Groups", + "user.groups": "%1s grupper", "user.favourites": "%1's favorit-inlägg", "user.settings": "Avnändarinställningar", - "user.watched": "Topics watched by %1", + "user.watched": "Ämnen bevakade av %1", "maintenance.text": "%1 genomgår underhåll just nu. Vänligen kom tillbaka lite senare.", "maintenance.messageIntro": "Ytterligare så lämnade administratören detta meddelande:" } \ No newline at end of file diff --git a/public/language/sv/recent.json b/public/language/sv/recent.json index 28a0d6f599..46d7531d3c 100644 --- a/public/language/sv/recent.json +++ b/public/language/sv/recent.json @@ -6,14 +6,14 @@ "year": "År", "alltime": "Alltid", "no_recent_topics": "Det finns inga olästa ämnen.", - "no_popular_topics": "There are no popular topics.", - "there-is-a-new-topic": "There is a new topic.", - "there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.", - "there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.", - "there-are-new-topics": "There are %1 new topics.", - "there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.", - "there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.", - "there-is-a-new-post": "There is a new post.", - "there-are-new-posts": "There are %1 new posts.", - "click-here-to-reload": "Click here to reload." + "no_popular_topics": "Det finns inga populära ämnen", + "there-is-a-new-topic": "Det finns ett nytt ämne", + "there-is-a-new-topic-and-a-new-post": "Det finns ett nytt ämne och ett nytt inlägg.", + "there-is-a-new-topic-and-new-posts": "Det finns ett nytt ämne och %1 nya inlägg.", + "there-are-new-topics": "Det finns %1 nya ämnen.", + "there-are-new-topics-and-a-new-post": "Det finns %1 nya ämnen och ett nytt inlägg..", + "there-are-new-topics-and-new-posts": "Det finns %1 nya ämnen och %2 nya inlägg.", + "there-is-a-new-post": "Det finns ett nytt inlägg.", + "there-are-new-posts": "Det finns %1 nya inlägg.", + "click-here-to-reload": "Klicka här för att ladda om." } \ No newline at end of file diff --git a/public/language/sv/register.json b/public/language/sv/register.json index 750db5cc62..6f1aa3764b 100644 --- a/public/language/sv/register.json +++ b/public/language/sv/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Alternativ registrering", "terms_of_use": "Användarvillkor", "agree_to_terms_of_use": "Jag godkänner användarvillkoren", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Din registrering har lagts till i kön. Du kommer att få ett mail när den accepteras av en administratör." } \ No newline at end of file diff --git a/public/language/sv/reset_password.json b/public/language/sv/reset_password.json index 17c4447925..9f79207d43 100644 --- a/public/language/sv/reset_password.json +++ b/public/language/sv/reset_password.json @@ -11,7 +11,7 @@ "enter_email_address": "Skriv in epostadress", "password_reset_sent": "Lösenordsåterställning skickad", "invalid_email": "Felaktig epost / Epost finns inte!", - "password_too_short": "The password entered is too short, please pick a different password.", - "passwords_do_not_match": "The two passwords you've entered do not match.", - "password_expired": "Your password has expired, please choose a new password" + "password_too_short": "Lösenordet är för kort, var god välj ett annat lösenord.", + "passwords_do_not_match": "De två lösenorden du har fyllt i matchar ej varandra.", + "password_expired": "Ditt lösenord har gått ut, var god välj ett nytt lösenord." } \ No newline at end of file diff --git a/public/language/sv/search.json b/public/language/sv/search.json index c023bf5927..eeb5a36feb 100644 --- a/public/language/sv/search.json +++ b/public/language/sv/search.json @@ -1,40 +1,40 @@ { "results_matching": "%1 resultat matchar \"%2\", (%3 sekunder)", "no-matches": "Inga träffar", - "advanced-search": "Advanced Search", - "in": "In", - "titles": "Titles", - "titles-posts": "Titles and Posts", - "posted-by": "Posted by", - "in-categories": "In Categories", - "search-child-categories": "Search child categories", - "reply-count": "Reply Count", - "at-least": "At least", - "at-most": "At most", - "post-time": "Post time", - "newer-than": "Newer than", - "older-than": "Older than", - "any-date": "Any date", - "yesterday": "Yesterday", + "advanced-search": "Avancerad sökning", + "in": "i", + "titles": "Ämnen", + "titles-posts": "Ämnen och Inlägg", + "posted-by": "Skapad av", + "in-categories": "I kategorier", + "search-child-categories": "Sök i underkategorier", + "reply-count": "Svarsantal", + "at-least": "Som minst", + "at-most": "Som mest", + "post-time": "Inläggstid", + "newer-than": "Yngre än", + "older-than": "Äldre än", + "any-date": "Alla datum", + "yesterday": "Igår", "one-week": "En vecka", "two-weeks": "Två veckor", "one-month": "En månad", - "three-months": "Three months", - "six-months": "Six months", - "one-year": "One year", - "sort-by": "Sort by", - "last-reply-time": "Last reply time", - "topic-title": "Topic title", - "number-of-replies": "Number of replies", - "number-of-views": "Number of views", - "topic-start-date": "Topic start date", - "username": "Username", - "category": "Category", - "descending": "In descending order", - "ascending": "In ascending order", + "three-months": "Tre månader", + "six-months": "Sex månader", + "one-year": "Ett år", + "sort-by": "Sortera på", + "last-reply-time": "Senaste svarstiden", + "topic-title": "Ämnestitel", + "number-of-replies": "Antal svar", + "number-of-views": "Antal visningar", + "topic-start-date": "Startdatum för ämne", + "username": "Användarnamn", + "category": "Kategori", + "descending": "I fallande ordning", + "ascending": "I stigande ordning", "save-preferences": "Spara inställningar", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as" + "clear-preferences": "Rensa inställningar", + "search-preferences-saved": "Sökinställningar sparade", + "search-preferences-cleared": "Sökinställningar rensade", + "show-results-as": "Visa resultat som" } \ No newline at end of file diff --git a/public/language/sv/tags.json b/public/language/sv/tags.json index d846962ea4..b3fbeebd24 100644 --- a/public/language/sv/tags.json +++ b/public/language/sv/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Det finns inga ämnen med detta märkord.", "tags": "Märkord", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", + "enter_tags_here": "Fyll i märkord på mellan %1 och %2 tecken här.", "enter_tags_here_short": "Ange taggar...", "no_tags": "Det finns inga märkord ännu." } \ No newline at end of file diff --git a/public/language/sv/topic.json b/public/language/sv/topic.json index d589412c3a..15befb34f1 100644 --- a/public/language/sv/topic.json +++ b/public/language/sv/topic.json @@ -34,7 +34,7 @@ "not_following_topic.message": "Du kommer inte längre få notiser från detta ämne.", "login_to_subscribe": "Var god registrera eller logga in för att kunna prenumerera på detta ämne.", "markAsUnreadForAll.success": "Ämne markerat som oläst av alla.", - "watch": "Följ", + "watch": "Bevaka", "unwatch": "Sluta bevaka", "watch.title": "Få notis om nya svar till det här ämnet", "unwatch.title": "Sluta bevaka detta ämne", diff --git a/public/language/sv/unread.json b/public/language/sv/unread.json index b6a20d21ca..0ed0a80ae7 100644 --- a/public/language/sv/unread.json +++ b/public/language/sv/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Markerad som läst", "selected": "Vald", "all": "Alla", - "all_categories": "All categories", + "all_categories": "Alla kategorier", "topics_marked_as_read.success": "Ämnet markerat som läst." } \ No newline at end of file diff --git a/public/language/sv/user.json b/public/language/sv/user.json index c76476de52..6ccc8a3760 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -6,12 +6,12 @@ "postcount": "Antal inlägg", "email": "Epost", "confirm_email": "Bekräfta epostadress ", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "ban_account": "Bannlys konto", + "ban_account_confirm": "Vill du verkligen bannlysa den här användaren?", + "unban_account": "Ta bort bannlysning", "delete_account": "Ta bort ämne", "delete_account_confirm": "Är du säker på att du vill radera ditt konto?
Denna åtgärd går inte att ångra och du kommer inte kunna återställa ditt konto

Skriv in ditt användarnamn för att bekräfta att du vill radera ditt konto.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Är du säker på att du vill ta bort detta konto?
Detta går ej att ångra - data går förlorad för alltid

", "fullname": "Hela namnet", "website": "Webbsida", "location": "Plats", @@ -68,9 +68,9 @@ "settings-require-reload": "Vissa inställningar som ändrades kräver att sidan laddas om. Klicka här för att ladda om sidan.", "has_no_follower": "Denna användare har inga följare :(", "follows_no_one": "Denna användare följer ingen :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Användaren har inte skrivit några inlägg ännu", + "has_no_topics": "Användaren har inte skrivit några ämnen ännu", + "has_no_watched_topics": "Användaren har inte bevakat några ämnen ännu", "email_hidden": "Epost dold", "hidden": "dold", "paginate_description": "Gör så att ämnen och inlägg visas som sidor istället för oändlig skroll", diff --git a/public/language/sv/users.json b/public/language/sv/users.json index 1e364986af..5acd1b0f84 100644 --- a/public/language/sv/users.json +++ b/public/language/sv/users.json @@ -5,17 +5,17 @@ "search": "Sök", "enter_username": "Ange ett användarnamn för att söka", "load_more": "Ladda fler", - "users-found-search-took": "%1 user(s) found! Search took %2 seconds.", - "filter-by": "Filter By", - "online-only": "Online only", - "picture-only": "Picture only", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "users-found-search-took": "%1 användare hittades! Sökningen tog %2 sekunder.", + "filter-by": "Filtrera på", + "online-only": "Endast online", + "picture-only": "Endast bild", + "invite": "Bjud in", + "invitation-email-sent": "En inbjudan har skickats till %1", + "user_list": "Användarlista", + "recent_topics": "Senaste ämnen", + "popular_topics": "Populära ämnen", + "unread_topics": "Olästa ämnen", + "categories": "Kategorier", + "tags": "Märkord", + "map": "Karta" } \ No newline at end of file diff --git a/public/language/th/category.json b/public/language/th/category.json index bf35101ba9..66ae73ac7b 100644 --- a/public/language/th/category.json +++ b/public/language/th/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "กระทู้", "guest-login-post": "เข้าสู่ระบบเพื่อโพส", "no_topics": "ยังไม่มีกระทู้ในหมวดนี้
โพสต์กระทู้แรก?", "browsing": "เรียกดู", "no_replies": "ยังไม่มีใครตอบ", + "no_new_posts": "No new posts.", "share_this_category": "แชร์ Category นี้", "watch": "Watch", "ignore": "ไม่ต้องสนใจอีก", diff --git a/public/language/th/groups.json b/public/language/th/groups.json index 027579e466..e1f567f52e 100644 --- a/public/language/th/groups.json +++ b/public/language/th/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/tr/category.json b/public/language/tr/category.json index b78064fb51..dec48d0741 100644 --- a/public/language/tr/category.json +++ b/public/language/tr/category.json @@ -1,9 +1,12 @@ { + "category": "Kategori", + "subcategories": "Alt kategoriler", "new_topic_button": "Yeni Başlık", "guest-login-post": "Göndermek için giriş yapın", "no_topics": " Bu kategoride hiç konu yok.
Yeni bir konu açmak istemez misiniz?", "browsing": "gözden geçiriliyor", "no_replies": "Kimse yanıtlamadı", + "no_new_posts": "Yeni ileti yok", "share_this_category": "Bu kategoriyi paylaş", "watch": "İzle", "ignore": "Yoksay", diff --git a/public/language/tr/email.json b/public/language/tr/email.json index cca2d80594..da6f0a2da8 100644 --- a/public/language/tr/email.json +++ b/public/language/tr/email.json @@ -1,15 +1,15 @@ { "password-reset-requested": "Parola Değiştirme İsteği Gönderildi", "welcome-to": "Hoşgeldiniz", - "invite": "Invitation from %1", + "invite": "%1 sizi davet etti", "greeting_no_name": "Merhaba", "greeting_with_name": "Merhaba %1", "welcome.text1": "Kaydolduğunuz için teşekkürler!", "welcome.text2": "Hesabınızı aktif hale getirmek için, kaydolduğunuz e-posta adresinin size ait olduğunu onaylamamız gerekiyor.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "Yönetici kayıt olma isteğinizi kabul etti. Kullanıcı adı/şifre ile giriş yapabilirsiniz.", "welcome.cta": "E-posta adresinizi onaylamak için buraya tıklayın", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", + "invitation.text1": "%1 sizi %2 ye katılmaya davet etti", + "invitation.ctr": "Hesap oluşturmak için buraya tıklayın", "reset.text1": "Şifrenizi değiştirmek istediğinize dair bir ileti aldık. Eğer böyle bir istek göndermediyseniz, lütfen bu e-postayı görmezden gelin.", "reset.text2": "Parola değiştirme işlemine devam etmek için aşağıdaki bağlantıya tıklayın:", "reset.cta": "Parolanızı değiştirmek için buraya tıklayın", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index a530f04e05..9c02802883 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -46,14 +46,14 @@ "too-many-posts-newbie": "Yeni bir kullanıcı olarak, %2 saygınlık kazanana kadar %1 saniye içinde bir ileti gönderebilirsiniz - tekrar ileti göndermeden önce lütfen bekleyin.", "tag-too-short": "Lütfen daha uzun bir etiket girin. Etiketler en az %1 karakter içermelidir.", "tag-too-long": "Lütfen daha kısa bir etiket girin. Etiketler %1 karakterden uzun olamaz.", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "Yeterince etiket yok. Başlılar en az %1 etikete sahip olmalıdır", + "too-many-tags": "Etiket sayısı çok fazla. Başlıklar en fazla %1 etikete sahip olabilir", "file-too-big": "İzin verilen en büyük dosya boyutu %1 kb - lütfen daha küçük bir dosya yükleyin", "cant-vote-self-post": "Kendi iletinize oy veremezsiniz", "already-favourited": "Bu iletiyi zaten favorilerinize eklediniz", "already-unfavourited": "Bu iletiyi zaten favorilerinizden çıkardınız", "cant-ban-other-admins": "Başka yöneticileri yasaklayamazsınız!", - "cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin", + "cant-remove-last-admin": "Tek yönetici sizsiniz. Kendinizi adminlikten çıkarmadan önce başka bir kullanıcıyı admin olarak ekleyiniz", "invalid-image-type": "Geçersiz resim uzantısı. Izin verilen uzantılar: %1", "invalid-image-extension": "Geçersiz resim uzantısı", "invalid-file-type": "Geçersiz dosya türü. İzin verilenler şunlar : %1", @@ -62,8 +62,8 @@ "group-name-change-not-allowed": "Grup ismini değiştiremezsiniz", "group-already-member": "Bu grubun zaten bir parçasısınız.", "group-needs-owner": "Bu grubu en az bir kişi sahiplenmesi gerekiyor", - "group-already-invited": "This user has already been invited", - "group-already-requested": "Your membership request has already been submitted", + "group-already-invited": "Bu kullanıcı zaten davet edilmiş", + "group-already-requested": "Üyelik isteğiniz zaten gönderildi", "post-already-deleted": "İleti zaten silinmiş", "post-already-restored": "İleti zaten geri getirilmiş", "topic-already-deleted": "Başlık zaten silinmiş", @@ -81,7 +81,7 @@ "downvoting-disabled": "Aşagı oylama kapatılmış", "not-enough-reputation-to-downvote": "Bu iletiyi aşagı oylamak için yeterince saygınlığınız yok.", "not-enough-reputation-to-flag": "Bu iletiyi bayraklamak için yeterince saygınlığınız yok", - "already-flagged": "You have already flagged this post", + "already-flagged": "Bu iletiyi zaten bayrakladınız", "reload-failed": "NodeBB tekrar yüklenirken bir sorunla karşılaştı: “%1“. NodeBB varolan dosyaları servis etmeye devam edecek.", "registration-error": "Kayıt Hatası", "parse-error": "Sunucu yanıtı çözümlemesi sırasında bir şeyler ters gitti", diff --git a/public/language/tr/global.json b/public/language/tr/global.json index 7e63e5e3bd..979e9715c5 100644 --- a/public/language/tr/global.json +++ b/public/language/tr/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 - %2", "pagination.enter_index": "İndex gir", "header.admin": "Yönetim", - "header.categories": "Categories", + "header.categories": "Kategoriler", "header.recent": "Yeni", "header.unread": "Okunmamış", "header.tags": "Etiketler", @@ -51,7 +51,7 @@ "views": "Görüntülemeler", "reputation": "Saygınlık", "read_more": "daha fazla oku", - "more": "More", + "more": "Daha Fazla", "posted_ago_by_guest": "Ziyaretçi tarafından %1 yayımlandı", "posted_ago_by": "%2 tarafından %1 yayımlandı", "posted_ago": "%1 yayımlandı", diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index bac723142e..c1c65af240 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -6,12 +6,12 @@ "no_groups_found": "Henüz hiç grup yok", "pending.accept": "Onayla", "pending.reject": "Reddet", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", - "pending.none": "There are no pending members at this time", - "invited.none": "There are no invited members at this time", - "invited.uninvite": "Rescind Invitation", - "invited.search": "Search for a user to invite to this group", + "pending.accept_all": "Hepsini Kabul Et", + "pending.reject_all": "Hepsini Reddet", + "pending.none": "Şu anda bekleyen üye yok", + "invited.none": "Şu anda davet edilmiş üye yok", + "invited.uninvite": "Daveti iptal et", + "invited.search": "Gruba davet etmek için kullanıcı ara", "cover-instructions": "Bir fotoğrafı Sürükleyin ve Bırakın, uygun yere sürükleyip Kaydet'e tıklayın.", "cover-change": "Değiştir", "cover-save": "Kaydet", @@ -19,7 +19,7 @@ "details.title": "Grup Detayları", "details.members": "Üye Listesi", "details.pending": "Üyeler bekleniyor", - "details.invited": "Invited Members", + "details.invited": "Davet Edilen Üyeler", "details.has_no_posts": "Bu grubun üyeleri henüz bir ileti göndermedi.", "details.latest_posts": "En son iletiler", "details.private": "Özel", @@ -38,12 +38,13 @@ "details.private_help": "Gruba katılmak için eğer etkinse grup sahibini onayı gerekir, ", "details.hidden": "Gizli", "details.hidden_help": "Bu grup eğer etkinse grup listelerinde bulunmaz, ve kullanıcılar bizzat davet eder", - "details.delete_group": "Delete Group", + "details.delete_group": "Grubu Sil", "event.updated": "Grup detayları güncellenmiştir", "event.deleted": "\"%1\" grubu silinmiş", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "Daveti Kabul Et", + "membership.invitation-pending": "Davet beklemede", + "membership.join-group": "Gruba Katıl", + "membership.leave-group": "Gruptan Ayrıl", + "membership.reject": "Reddet", + "new-group.group_name": "Grup İsmi:" } \ No newline at end of file diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index 948a1dfeca..d498a13dbe 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -20,7 +20,7 @@ "user_posted_topic": "%1 yeni bir konu yarattı: %2", "user_mentioned_you_in": "%1 %2 başlığında sizden bahsetti.", "user_started_following_you": "%1 sizi takip etmeye başladı.", - "new_register": "%1 sent a registration request.", + "new_register": "%1 kayıt olma isteği gönderdi.", "email-confirmed": "E-posta onaylandı", "email-confirmed-message": "E-postanızı onaylandığınız için teşekkürler. Hesabınız tamamen aktive edildi.", "email-confirm-error-message": "E-posta adresinizi onaylarken bir hata oluştu. Kodunuz geçersiz ya da eski olabilir.", diff --git a/public/language/tr/register.json b/public/language/tr/register.json index cd4d6c67c9..c46c27ad32 100644 --- a/public/language/tr/register.json +++ b/public/language/tr/register.json @@ -15,5 +15,5 @@ "alternative_registration": "Alternatif Kayıt", "terms_of_use": "Kullanım Şartları", "agree_to_terms_of_use": "Kullanım Şartlarını kabul ediyorum", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator." + "registration-added-to-queue": "Kayıt olma isteğiniz kabul listesine eklenmiştir. Yönetici tarafından kabul edildiğinizde mail alacaksınız." } \ No newline at end of file diff --git a/public/language/tr/unread.json b/public/language/tr/unread.json index 95268cf85c..49b8995dc5 100644 --- a/public/language/tr/unread.json +++ b/public/language/tr/unread.json @@ -5,6 +5,6 @@ "mark_as_read": "Okundu Olarak İşaretle", "selected": "Seçili", "all": "Hepsi", - "all_categories": "All categories", + "all_categories": "Tüm kategoriler", "topics_marked_as_read.success": "Başlıklar okundu olarak işaretlendi!" } \ No newline at end of file diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 2739622bee..ac16ae1970 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -11,7 +11,7 @@ "unban_account": "Hesabı Kullanıma Aç", "delete_account": "Hesabı Sil", "delete_account_confirm": "Hesabınızı silmek istediğinize emin misiniz?
Bu işlem geri çevrilemez ve tüm verileriniz sistemden silinecek.

Eğer hesabınızı silmek istiyorsanız lütfen kullanıcı isminizi girerek işlemi onaylayın.", - "delete_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", + "delete_this_account_confirm": "Bu hesabı silmek istediğinizden emin misiniz?
Bu işlem geri döndürülemez ve hiç bir veriyi kurtaramazsınız

", "fullname": "Tam Ad", "website": "Websitesi", "location": "Konum", @@ -68,9 +68,9 @@ "settings-require-reload": "Bazı ayar değişiklikleri sayfayı tekrar yüklemenizi gerektirir. Buraya tıklayarak sayfayı tekrar yükleyebilirsiniz.", "has_no_follower": "Bu kullanıcının hiç takipçisi yok :(", "follows_no_one": "Bu kullanıcı kimseyi takip etmiyor :(", - "has_no_posts": "This user hasn't posted anything yet.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", + "has_no_posts": "Bu kullanıcı henüz herhangi bir ileti yazmamış.", + "has_no_topics": "Bu kullanıcı henüz hiç bir başlık açmamış.", + "has_no_watched_topics": "Bu kullanıcı henüz hiç bir başlık okumamış.", "email_hidden": "E-posta gizli", "hidden": "gizli", "paginate_description": "Sonsuz yükleme yerine konu ve iletileri sayfalara böl", diff --git a/public/language/tr/users.json b/public/language/tr/users.json index cee4c4445a..00c8b00be9 100644 --- a/public/language/tr/users.json +++ b/public/language/tr/users.json @@ -9,13 +9,13 @@ "filter-by": "Şu şekilde filtrele", "online-only": "Sadece çevrimiçi", "picture-only": "Sadece resim", - "invite": "Invite", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tags", - "map": "Map" + "invite": "Davet et", + "invitation-email-sent": "%1'e bir davet maili gönderildi", + "user_list": "Kullanıcı Listesi", + "recent_topics": "Güncel Başlıklar", + "popular_topics": "Popüler Başlıklar", + "unread_topics": "Okunmamış Başlıklar", + "categories": "Kategoriler", + "tags": "Etiketler", + "map": "Harita" } \ No newline at end of file diff --git a/public/language/vi/category.json b/public/language/vi/category.json index e209512922..ef607a6f36 100644 --- a/public/language/vi/category.json +++ b/public/language/vi/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "Chủ đề mới", "guest-login-post": "Đăng nhập để viết bài", "no_topics": "Không có bài viết trong danh mục này.
Hãy đăng một bài viết mới.", "browsing": "đang xem", "no_replies": "Chưa có bình luận nào", + "no_new_posts": "No new posts.", "share_this_category": "Chia sẻ thư mục này", "watch": "Watch", "ignore": "Bỏ qua", diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index 2deebd443e..b44ae1ecc5 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/language/zh_CN/category.json b/public/language/zh_CN/category.json index 8024d249a1..3867e3b185 100644 --- a/public/language/zh_CN/category.json +++ b/public/language/zh_CN/category.json @@ -1,9 +1,12 @@ { + "category": "版面", + "subcategories": "子版面", "new_topic_button": "新主题", "guest-login-post": "登录后发表", "no_topics": "此版块还没有任何内容。
赶紧来发帖吧!", "browsing": "正在浏览", "no_replies": "尚无回复", + "no_new_posts": "没有新帖", "share_this_category": "分享此版块", "watch": "关注", "ignore": "忽略", diff --git a/public/language/zh_CN/error.json b/public/language/zh_CN/error.json index 7ad720cf56..4e1ecab7ff 100644 --- a/public/language/zh_CN/error.json +++ b/public/language/zh_CN/error.json @@ -46,8 +46,8 @@ "too-many-posts-newbie": "因为您是新用户,所以限制每隔 %1 秒才能发帖一次,直到您有 %2 点威望为止 —— 请稍候再发帖", "tag-too-short": "话题太短,不能少于 %1 个字符", "tag-too-long": "话题太长,不能超过 %1 个字符", - "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", - "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", + "not-enough-tags": "没有足够的话题标签。主题必须有至少 %1 个话题标签", + "too-many-tags": "过多话题标签。主题不能超过 %1 个话题标签", "file-too-big": "上传文件的大小限制为 %1 KB - 请缩减文件大小", "cant-vote-self-post": "您不能给自己的帖子投票。", "already-favourited": "您已收藏该帖", diff --git a/public/language/zh_CN/global.json b/public/language/zh_CN/global.json index 82d3030953..69daf31adf 100644 --- a/public/language/zh_CN/global.json +++ b/public/language/zh_CN/global.json @@ -22,7 +22,7 @@ "pagination.out_of": "%1 / %2", "pagination.enter_index": "输入索引", "header.admin": "管理", - "header.categories": "Categories", + "header.categories": "版面", "header.recent": "最新", "header.unread": "未读", "header.tags": "话题", diff --git a/public/language/zh_CN/groups.json b/public/language/zh_CN/groups.json index 0f02408c81..d127f71963 100644 --- a/public/language/zh_CN/groups.json +++ b/public/language/zh_CN/groups.json @@ -38,12 +38,13 @@ "details.private_help": "启用此选项后,加入小组需要组长审批。", "details.hidden": "隐藏", "details.hidden_help": "启用此选项后,小组将不在小组列表中展现,成员只能通过邀请加入。", - "details.delete_group": "Delete Group", + "details.delete_group": "删除小组", "event.updated": "小组信息已更新", "event.deleted": "小组 \"%1\" 已被删除", - "membership.accept-invitation": "Accept Invitation", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.accept-invitation": "接受邀请", + "membership.invitation-pending": "邀请中", + "membership.join-group": "加入小组", + "membership.leave-group": "退出小组", + "membership.reject": "拒绝", + "new-group.group_name": "组名: " } \ No newline at end of file diff --git a/public/language/zh_CN/recent.json b/public/language/zh_CN/recent.json index 428985f0e5..ce54404934 100644 --- a/public/language/zh_CN/recent.json +++ b/public/language/zh_CN/recent.json @@ -1,12 +1,12 @@ { "title": "最新", - "day": "24小时新帖热榜", - "week": "7天新帖热榜", - "month": "月度热帖榜", - "year": "年度热帖榜", - "alltime": "总热帖榜", + "day": "日", + "week": "周", + "month": "月", + "year": "年", + "alltime": "总计", "no_recent_topics": "暂无主题。", - "no_popular_topics": "没有热门主题。", + "no_popular_topics": "暂无热门主题。", "there-is-a-new-topic": "共计 1 个新主题。", "there-is-a-new-topic-and-a-new-post": "共计 1 个新主题和 1 个新回复。", "there-is-a-new-topic-and-new-posts": "共计 1 个新主题和 %1 个新回复。", diff --git a/public/language/zh_CN/topic.json b/public/language/zh_CN/topic.json index 655bf46f55..77b4b80922 100644 --- a/public/language/zh_CN/topic.json +++ b/public/language/zh_CN/topic.json @@ -23,10 +23,10 @@ "link": "链接", "share": "分享", "tools": "工具", - "flag": "标记", + "flag": "举报", "locked": "已锁定", "bookmark_instructions": "点击这里返回您最后浏览的位置。", - "flag_title": "举报", + "flag_title": "举报此帖", "flag_confirm": "您确认要举报此帖吗?", "flag_success": "已举报此回帖。", "deleted_message": "此主题已被删除。只有拥有主题管理权限的用户可以查看。", diff --git a/public/language/zh_TW/category.json b/public/language/zh_TW/category.json index 0dff52556a..a1f61a907c 100644 --- a/public/language/zh_TW/category.json +++ b/public/language/zh_TW/category.json @@ -1,9 +1,12 @@ { + "category": "Category", + "subcategories": "Subcategories", "new_topic_button": "新主題", "guest-login-post": "登錄後才能發表", "no_topics": "這個類別還沒有任何主題。
為何不來發點東西呢?", "browsing": "正在瀏覽", "no_replies": "還沒有回覆", + "no_new_posts": "No new posts.", "share_this_category": "分享這類別", "watch": "觀看", "ignore": "忽略", diff --git a/public/language/zh_TW/groups.json b/public/language/zh_TW/groups.json index b69c394a33..17d8092035 100644 --- a/public/language/zh_TW/groups.json +++ b/public/language/zh_TW/groups.json @@ -45,5 +45,6 @@ "membership.invitation-pending": "Invitation Pending", "membership.join-group": "Join Group", "membership.leave-group": "Leave Group", - "membership.reject": "Reject" + "membership.reject": "Reject", + "new-group.group_name": "Group Name:" } \ No newline at end of file diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 429a37de86..9c9bb584e4 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -1,40 +1,59 @@ @import "./bootstrap/bootstrap"; +@import "./bootswatch"; @import "./mixins"; @import "./vars"; +@import "./header"; +@import "./mobile"; + @import "./general/dashboard"; @import "./general/navigation"; @import "./manage/categories"; @import "./manage/tags"; @import "./manage/flags"; +@import "./manage/groups"; @import "./manage/users"; @import "./appearance/customise"; @import "./appearance/themes"; @import "./extend/plugins"; @import "./extend/rewards"; @import "./advanced/database"; +@import "./settings"; @import "./modules/alerts"; @import "./modules/selectable"; -@import "./modules/checkboxes"; +@import "./modules/snackbar"; .admin { - padding-top: 70px; - background: #f0f0f0; + background: #fff; + font-size: 14px; - .container { - width: 100% !important; - padding: 0px 15px; + h1 { + font-size: 35px; + margin-bottom: 50px; } - .jumbotron { - padding: @jumbotron-padding; + label { + font-weight: 700; } + .btn { border-radius: 0; } + .btn-link { + color: @link-color; + } + + .floating-button { + background: @brand-primary !important; + position: fixed; + right: 30px; + bottom: 30px; + z-index: 1; + } + .user-img { width:24px; height:24px; @@ -52,129 +71,10 @@ color: #fff; } - &.mobile { - #content { - padding-left: 20px; - } - - #main-menu { - width: 200px; - height: 100%; - - - -webkit-transform: translateX(-190px); - transform: translateX(-190px); - - &.transitioning { - .transition(.3s ease all); - } - - &.open { - -webkit-transform: translateX(0); - transform: translateX(0); - } - } - } - - - #main-menu { - position: fixed; - width: 200px; - height: 100%; - padding-top: 50px; - top: 0px; - left: 0px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQMAAACxAfVuAAAAA3NCSVQICAjb4U/gAAAABlBMVEU5OTk1NTVxIqOYAAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABZ0RVh0Q3JlYXRpb24gVGltZQAxNC8xMS8xMc34jO8AAAFQSURBVEiJ7ZUxbsMwDEV/68Fbc4M4aC+QsYOhXstDELg3c9CLqPAFNHYo4tKkEBoMhxgoPEkD8aRBIkV+Enh4VRFvswkLwu4HY09m6pXQ/D6NA5lpUMLHtRojmSkq4RyqS2xD9Z2U0DX1Zzo19ZCU6KW6Tx2ZJT1+SDddZuQ7MyEEcqTdk1ECO0b7KSqBQ9i3ElEmcLAv7xJ7JvmW54P8Uqbtlrx5vL1+zDm699ONyI09NDX/zVdUwmlHmeGvVEJHHvB/J6UVh3wTZbtPSpKjMBeHEkwZMcEUHBNMaTLdivh1QRvnyIjJ99ONyI3dSIgJRkJMsMKQdKw5XEpI8m4kxARTRqJ3U3DSGUxpSg8xEpJus9kyEpLXXT/diNzYjYSYYCTEBCMMphWHRkJyp5GQ5MjtyW73dvu8kdDGOSrzqMyjMo/+KUdlHpV5VObR/foD6jrYlpchAFAAAAAASUVORK5CYII=); - z-index: 1; - overflow-y: auto; - - .nano-content { - top: 51px !important; - } - - .sidebar-nav { - overflow: hidden; - .transition(.4s ease-in-out max-height); - max-height: 100%; - cursor: pointer; - max-height: 38px; - - &.open { - max-height: 500px; - } - - .nav-header { - color: #fff; - border-top: 1px solid #32353E; - border-bottom: 1px solid #1A1C20; - background-color: #272727; - text-shadow: 0px 0px 2px #111; - padding: 10px; - .user-select(none); - } - - .nav-list { - background: #232323; - - li { - i { - margin-right: 6px; - } - - &:hover a { - background-color: #3f3f3f; - - span { - opacity: 0.8; - } - } - - &.active a { - padding-left: 20px; - background-color: #3f3f3f; - - span { - opacity: 0; - } - } - - a { - color: white; - padding: 7px 15px; - font-size: 13px; - padding-left: 11px; - outline: 0; - - span { - opacity: 0; - margin-right: -8px; - .transition(.3s ease-in opacity); - } - - -webkit-transition: background-color .3s ease-in, padding-left .3s ease-in; - -moz-transition: background-color .3s ease-in, padding-left .3s ease-in; - -o-transition: background-color .3s ease-in, padding-left .3s ease-in; - transition: background-color .3s ease-in, padding-left .3s ease-in; - } - } - } - } - } - - #content { - padding-left: 215px; - padding-right: 15px; - } - #breadcrumbs { cursor: default; } - .wrapper { - width: 100%; - overflow-y: hidden; - } - .acp-panel-heading { padding: 7px 14px; border: 0; @@ -203,20 +103,6 @@ .box-header-font } - #user_label { - a { - padding-top: 13px; - padding-bottom: 13px; - - img { - width: 24px; - height: 24px; - border-radius: 50%; - border: 1px solid #454; - } - } - } - .icon-container { .row { margin: 0; @@ -271,30 +157,6 @@ } } - #acp-search { - input { - background: black; - border: 0; - color: white; - box-shadow: none; - .transition(.4s ease width); - font-family: @font-family-monospace; - width: 30px; - height: 30px; - vertical-align: -30%; - border-radius: 0; - - &:focus { - width: 200px; - } - } - - .search-match { - font-weight: 700; - color: black; - } - } - #taskbar { display: none; /* not sure why I have to do this, but it only seems to show up on prod */ } @@ -311,16 +173,6 @@ display: inline-block; } -@media (min-width: 1200px) { - .acp-sidebar { - position: fixed; - top: 70px; - right: 15px; - width: initial; - max-width: calc( ~"(100% - 200px)/4" ); - } -} - .category-settings-form { h3 { margin-top: 0; @@ -364,4 +216,20 @@ max-width: 24px; max-height: 24px; } +} + +.mdl-switch.is-checked .mdl-switch__ripple-container { + cursor: pointer !important; +} + +.mdl-switch.is-checked .mdl-switch__thumb { + background: @brand-primary !important; +} + +.mdl-switch.is-checked .mdl-switch__track { + background: lighten(@brand-primary, 20%) !important; +} + +* > .checkbox:first-child { + margin-top: 0px; } \ No newline at end of file diff --git a/public/less/admin/appearance/themes.less b/public/less/admin/appearance/themes.less index aa052d4e67..4fed5205b2 100644 --- a/public/less/admin/appearance/themes.less +++ b/public/less/admin/appearance/themes.less @@ -8,14 +8,6 @@ margin: 0.25em 1em; list-style-type: none; .pointer; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - -webkit-transition: background-color 250ms linear; - -moz-transition: background-color 250ms linear; - -ms-transition: background-color 250ms linear; - -o-transition: background-color 250ms linear; - transition: background-color 250ms linear; img { max-width: 150px; @@ -30,16 +22,47 @@ font-size: 0.9em; } - &:hover { - background-color: rgba(128, 128, 128, 0.2); - } - &.no-themes { font-style: italic; } } } + .theme-card { + margin-bottom: 30px; + margin-left: auto; + margin-right: auto; + + .mdl-card__title { + height: 223px; + background-size: contain; + } + + .mdl-card__supporting-text h2 { + margin-bottom: 15px; + } + } + + [data-theme].selected .mdl-button { + color: black; + } + + [data-type="bootswatch"] { + .mdl-card__title { + height: 198px; + } + + .mdl-card__title-text { + display: none; + } + } + + [data-type="local"] { + .mdl-card__supporting-text { + height: 150px; + } + } + textarea[data-field] { min-height: 450px; width: 100%; diff --git a/public/less/admin/bootstrap/variables.less b/public/less/admin/bootstrap/variables.less index b13be9d449..f5f2cd55e7 100644 --- a/public/less/admin/bootstrap/variables.less +++ b/public/less/admin/bootstrap/variables.less @@ -1,4 +1,4 @@ -// +// Paper 3.3.5 // Variables // -------------------------------------------------- @@ -9,16 +9,16 @@ @gray-base: #000; @gray-darker: lighten(@gray-base, 13.5%); // #222 -@gray-dark: lighten(@gray-base, 20%); // #333 -@gray: lighten(@gray-base, 33.5%); // #555 -@gray-light: lighten(@gray-base, 46.7%); // #777 +@gray-dark: #212121; +@gray: #666; +@gray-light: #bbb; @gray-lighter: lighten(@gray-base, 93.5%); // #eee -@brand-primary: darken(#428bca, 6.5%); -@brand-success: #5cb85c; -@brand-info: #5bc0de; -@brand-warning: #f0ad4e; -@brand-danger: #d9534f; +@brand-primary: #2196F3; +@brand-success: #4CAF50; +@brand-info: #9C27B0; +@brand-warning: #ff9800; +@brand-danger: #e51c23; //== Scaffolding @@ -28,7 +28,7 @@ //** Background color for ``. @body-bg: #fff; //** Global text color on ``. -@text-color: @gray-dark; +@text-color: @gray; //** Global textual link color. @link-color: @brand-primary; @@ -42,33 +42,33 @@ // //## Font, line-height, and color for body text, headings, and more. -@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; @font-family-serif: Georgia, "Times New Roman", Times, serif; //** Default monospace fonts for ``, ``, and `

`.
 @font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
 @font-family-base:        @font-family-sans-serif;
 
-@font-size-base:          14px;
+@font-size-base:          13px;
 @font-size-large:         ceil((@font-size-base * 1.25)); // ~18px
 @font-size-small:         ceil((@font-size-base * 0.85)); // ~12px
 
-@font-size-h1:            floor((@font-size-base * 2.6)); // ~36px
-@font-size-h2:            floor((@font-size-base * 2.15)); // ~30px
-@font-size-h3:            ceil((@font-size-base * 1.7)); // ~24px
-@font-size-h4:            ceil((@font-size-base * 1.25)); // ~18px
-@font-size-h5:            @font-size-base;
-@font-size-h6:            ceil((@font-size-base * 0.85)); // ~12px
+@font-size-h1:            56px;
+@font-size-h2:            45px;
+@font-size-h3:            34px;
+@font-size-h4:            24px;
+@font-size-h5:            20px;
+@font-size-h6:            14px;
 
 //** Unit-less `line-height` for use in components like buttons.
-@line-height-base:        1.428571429; // 20/14
+@line-height-base:        1.846; // 20/14
 //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
 @line-height-computed:    floor((@font-size-base * @line-height-base)); // ~20px
 
 //** By default, this inherits from the ``.
 @headings-font-family:    inherit;
-@headings-font-weight:    500;
+@headings-font-weight:    400;
 @headings-line-height:    1.1;
-@headings-color:          inherit;
+@headings-color:          #444;
 
 
 //== Iconography
@@ -88,7 +88,7 @@
 //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
 
 @padding-base-vertical:     6px;
-@padding-base-horizontal:   12px;
+@padding-base-horizontal:   16px;
 
 @padding-large-vertical:    10px;
 @padding-large-horizontal:  16px;
@@ -99,12 +99,12 @@
 @padding-xs-vertical:       1px;
 @padding-xs-horizontal:     5px;
 
-@line-height-large:         1.33;
+@line-height-large:         1.3333333; // extra decimals for Win 8.1 Chrome
 @line-height-small:         1.5;
 
-@border-radius-base:        4px;
-@border-radius-large:       6px;
-@border-radius-small:       3px;
+@border-radius-base:        0px;
+@border-radius-large:       0px;
+@border-radius-small:       0px;
 
 //** Global color for active items (e.g., navs or dropdowns).
 @component-active-color:    #fff;
@@ -144,49 +144,55 @@
 
 @btn-font-weight:                normal;
 
-@btn-default-color:              #333;
+@btn-default-color:              #444;
 @btn-default-bg:                 #fff;
-@btn-default-border:             #ccc;
+@btn-default-border:             transparent;
 
 @btn-primary-color:              #fff;
 @btn-primary-bg:                 @brand-primary;
-@btn-primary-border:             darken(@btn-primary-bg, 5%);
+@btn-primary-border:             transparent;
 
 @btn-success-color:              #fff;
 @btn-success-bg:                 @brand-success;
-@btn-success-border:             darken(@btn-success-bg, 5%);
+@btn-success-border:             transparent;
 
 @btn-info-color:                 #fff;
 @btn-info-bg:                    @brand-info;
-@btn-info-border:                darken(@btn-info-bg, 5%);
+@btn-info-border:                transparent;
 
 @btn-warning-color:              #fff;
 @btn-warning-bg:                 @brand-warning;
-@btn-warning-border:             darken(@btn-warning-bg, 5%);
+@btn-warning-border:             transparent;
 
 @btn-danger-color:               #fff;
 @btn-danger-bg:                  @brand-danger;
-@btn-danger-border:              darken(@btn-danger-bg, 5%);
+@btn-danger-border:              transparent;
 
 @btn-link-disabled-color:        @gray-light;
 
+// Allows for customizing button radius independently from global border radius
+@btn-border-radius-base:         @border-radius-base;
+@btn-border-radius-large:        @border-radius-large;
+@btn-border-radius-small:        @border-radius-small;
+
 
 //== Forms
 //
 //##
 
 //** `` background color
-@input-bg:                       #fff;
+@input-bg:                       transparent;
 //** `` background color
-@input-bg-disabled:              @gray-lighter;
+@input-bg-disabled:              transparent;
 
 //** Text color for ``s
 @input-color:                    @gray;
 //** `` border color
-@input-border:                   #ccc;
+@input-border:                   transparent;
 
 // TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
 //** Default `.form-control` border radius
+// This has no effect on ``s in CSS.
 @input-border-radius:            @border-radius-base;
 //** Large `.form-control` border radius
 @input-border-radius-large:      @border-radius-large;
@@ -197,7 +203,7 @@
 @input-border-focus:             #66afe9;
 
 //** Placeholder text color
-@input-color-placeholder:        #999;
+@input-color-placeholder:        @gray-light;
 
 //** Default `.form-control` height
 @input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);
@@ -206,11 +212,14 @@
 //** Small `.form-control` height
 @input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
 
+//** `.form-group` margin
+@form-group-margin-bottom:       15px;
+
 @legend-color:                   @gray-dark;
 @legend-border-color:            #e5e5e5;
 
 //** Background color for textual input addons
-@input-group-addon-bg:           @gray-lighter;
+@input-group-addon-bg:           transparent;
 //** Border color for textual input addons
 @input-group-addon-border-color: @input-border;
 
@@ -232,11 +241,11 @@
 @dropdown-divider-bg:            #e5e5e5;
 
 //** Dropdown link text color.
-@dropdown-link-color:            @gray-dark;
+@dropdown-link-color:            @text-color;
 //** Hover color for dropdown links.
 @dropdown-link-hover-color:      darken(@gray-dark, 5%);
 //** Hover background for dropdown links.
-@dropdown-link-hover-bg:         #f5f5f5;
+@dropdown-link-hover-bg:         @gray-lighter;
 
 //** Active dropdown menu item text color.
 @dropdown-link-active-color:     @component-active-color;
@@ -250,7 +259,7 @@
 @dropdown-header-color:          @gray-light;
 
 //** Deprecated `@dropdown-caret-color` as of v3.1.0
-@dropdown-caret-color:           #000;
+@dropdown-caret-color:           @gray-light;
 
 
 //-- Z-index master list
@@ -265,7 +274,8 @@
 @zindex-popover:           1060;
 @zindex-tooltip:           1070;
 @zindex-navbar-fixed:      1030;
-@zindex-modal:             1040;
+@zindex-modal-background:  1040;
+@zindex-modal:             1050;
 
 
 //== Media queries breakpoints
@@ -347,45 +357,45 @@
 //##
 
 // Basics of a navbar
-@navbar-height:                    50px;
+@navbar-height:                    64px;
 @navbar-margin-bottom:             @line-height-computed;
 @navbar-border-radius:             @border-radius-base;
 @navbar-padding-horizontal:        floor((@grid-gutter-width / 2));
 @navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);
 @navbar-collapse-max-height:       340px;
 
-@navbar-default-color:             #777;
-@navbar-default-bg:                #f8f8f8;
-@navbar-default-border:            darken(@navbar-default-bg, 6.5%);
+@navbar-default-color:             @gray-light;
+@navbar-default-bg:                #fff;
+@navbar-default-border:            transparent;
 
 // Navbar links
-@navbar-default-link-color:                #777;
-@navbar-default-link-hover-color:          #333;
+@navbar-default-link-color:                @gray;
+@navbar-default-link-hover-color:          @gray-dark;
 @navbar-default-link-hover-bg:             transparent;
-@navbar-default-link-active-color:         #555;
+@navbar-default-link-active-color:         @gray-dark;
 @navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);
 @navbar-default-link-disabled-color:       #ccc;
 @navbar-default-link-disabled-bg:          transparent;
 
 // Navbar brand label
 @navbar-default-brand-color:               @navbar-default-link-color;
-@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);
+@navbar-default-brand-hover-color:         @navbar-default-link-hover-color;
 @navbar-default-brand-hover-bg:            transparent;
 
 // Navbar toggle
-@navbar-default-toggle-hover-bg:           #ddd;
-@navbar-default-toggle-icon-bar-bg:        #888;
-@navbar-default-toggle-border-color:       #ddd;
+@navbar-default-toggle-hover-bg:           transparent;
+@navbar-default-toggle-icon-bar-bg:        rgba(0,0,0,0.5);
+@navbar-default-toggle-border-color:       transparent;
 
 
-// Inverted navbar
+//=== Inverted navbar
 // Reset inverted navbar basics
-@navbar-inverse-color:                      lighten(@gray-light, 15%);
-@navbar-inverse-bg:                         #222;
-@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-color:                      @gray-light;
+@navbar-inverse-bg:                         @brand-primary;
+@navbar-inverse-border:                     transparent;
 
 // Inverted navbar links
-@navbar-inverse-link-color:                 lighten(@gray-light, 15%);
+@navbar-inverse-link-color:                 lighten(@brand-primary, 30%);
 @navbar-inverse-link-hover-color:           #fff;
 @navbar-inverse-link-hover-bg:              transparent;
 @navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;
@@ -398,10 +408,10 @@
 @navbar-inverse-brand-hover-color:          #fff;
 @navbar-inverse-brand-hover-bg:             transparent;
 
-// Inverted navbar toggle
-@navbar-inverse-toggle-hover-bg:            #333;
-@navbar-inverse-toggle-icon-bar-bg:         #fff;
-@navbar-inverse-toggle-border-color:        #333;
+// Inverted navbar toggle\
+@navbar-inverse-toggle-hover-bg:            transparent;
+@navbar-inverse-toggle-icon-bar-bg:         rgba(0,0,0,0.5);
+@navbar-inverse-toggle-border-color:        transparent;
 
 
 //== Navs
@@ -416,15 +426,15 @@
 @nav-disabled-link-hover-color:             @gray-light;
 
 //== Tabs
-@nav-tabs-border-color:                     #ddd;
+@nav-tabs-border-color:                     transparent;
 
 @nav-tabs-link-hover-border-color:          @gray-lighter;
 
-@nav-tabs-active-link-hover-bg:             @body-bg;
+@nav-tabs-active-link-hover-bg:             transparent;
 @nav-tabs-active-link-hover-color:          @gray;
-@nav-tabs-active-link-hover-border-color:   #ddd;
+@nav-tabs-active-link-hover-border-color:   transparent;
 
-@nav-tabs-justified-link-border-color:            #ddd;
+@nav-tabs-justified-link-border-color:            @nav-tabs-border-color;
 @nav-tabs-justified-active-link-border-color:     @body-bg;
 
 //== Pills
@@ -476,29 +486,30 @@
 
 @jumbotron-padding:              30px;
 @jumbotron-color:                inherit;
-@jumbotron-bg:                   @gray-lighter;
-@jumbotron-heading-color:        inherit;
+@jumbotron-bg:                   #f9f9f9;
+@jumbotron-heading-color:        @headings-color;
 @jumbotron-font-size:            ceil((@font-size-base * 1.5));
+@jumbotron-heading-font-size:    ceil((@font-size-base * 4.5));
 
 
 //== Form states and alerts
 //
 //## Define colors for form feedback states and, by default, alerts.
 
-@state-success-text:             #3c763d;
+@state-success-text:             @brand-success;
 @state-success-bg:               #dff0d8;
 @state-success-border:           darken(spin(@state-success-bg, -10), 5%);
 
-@state-info-text:                #31708f;
-@state-info-bg:                  #d9edf7;
+@state-info-text:                @brand-info;
+@state-info-bg:                  #e1bee7;
 @state-info-border:              darken(spin(@state-info-bg, -10), 7%);
 
-@state-warning-text:             #8a6d3b;
-@state-warning-bg:               #fcf8e3;
+@state-warning-text:             @brand-warning;
+@state-warning-bg:               #ffe0b2;
 @state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);
 
-@state-danger-text:              #a94442;
-@state-danger-bg:                #f2dede;
+@state-danger-text:              @brand-danger;
+@state-danger-bg:                #f9bdbb;
 @state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);
 
 
@@ -511,7 +522,7 @@
 //** Tooltip text color
 @tooltip-color:               #fff;
 //** Tooltip background color
-@tooltip-bg:                  #000;
+@tooltip-bg:                  #727272;
 @tooltip-opacity:             .9;
 
 //** Tooltip arrow width
@@ -529,9 +540,9 @@
 //** Popover maximum width
 @popover-max-width:                   276px;
 //** Popover border color
-@popover-border-color:                rgba(0,0,0,.2);
+@popover-border-color:                transparent;
 //** Popover fallback border color
-@popover-fallback-border-color:       #ccc;
+@popover-fallback-border-color:       transparent;
 
 //** Popover title background color
 @popover-title-bg:                    darken(@popover-bg, 3%);
@@ -544,7 +555,7 @@
 //** Popover outer arrow width
 @popover-arrow-outer-width:           (@popover-arrow-width + 1);
 //** Popover outer arrow color
-@popover-arrow-outer-color:           fadein(@popover-border-color, 5%);
+@popover-arrow-outer-color:           fadein(@popover-border-color, 7.5%);
 //** Popover outer arrow fallback color
 @popover-arrow-outer-fallback-color:  darken(@popover-fallback-border-color, 20%);
 
@@ -587,7 +598,7 @@
 //** Background color of modal content area
 @modal-content-bg:                             #fff;
 //** Modal content border color
-@modal-content-border-color:                   rgba(0,0,0,.2);
+@modal-content-border-color:                   transparent;
 //** Modal content border color **for IE8**
 @modal-content-fallback-border-color:          #999;
 
@@ -596,7 +607,7 @@
 //** Modal backdrop opacity
 @modal-backdrop-opacity:      .5;
 //** Modal header border color
-@modal-header-border-color:   #e5e5e5;
+@modal-header-border-color:   transparent;
 //** Modal footer border color
 @modal-footer-border-color:   @modal-header-border-color;
 
@@ -709,21 +720,21 @@
 @panel-primary-border:        @brand-primary;
 @panel-primary-heading-bg:    @brand-primary;
 
-@panel-success-text:          @state-success-text;
+@panel-success-text:          #fff;
 @panel-success-border:        @state-success-border;
-@panel-success-heading-bg:    @state-success-bg;
+@panel-success-heading-bg:    @brand-success;
 
-@panel-info-text:             @state-info-text;
+@panel-info-text:             #fff;
 @panel-info-border:           @state-info-border;
-@panel-info-heading-bg:       @state-info-bg;
+@panel-info-heading-bg:       @brand-info;
 
-@panel-warning-text:          @state-warning-text;
+@panel-warning-text:          #fff;
 @panel-warning-border:        @state-warning-border;
-@panel-warning-heading-bg:    @state-warning-bg;
+@panel-warning-heading-bg:    @brand-warning;
 
-@panel-danger-text:           @state-danger-text;
+@panel-danger-text:           #fff;
 @panel-danger-border:         @state-danger-border;
-@panel-danger-heading-bg:     @state-danger-bg;
+@panel-danger-heading-bg:     @brand-danger;
 
 
 //== Thumbnails
@@ -749,8 +760,8 @@
 //
 //##
 
-@well-bg:                     #f5f5f5;
-@well-border:                 darken(@well-bg, 7%);
+@well-bg:                     #f9f9f9;
+@well-border:                 transparent;
 
 
 //== Badges
@@ -767,7 +778,7 @@
 //** Badge background color in active nav link
 @badge-active-bg:             #fff;
 
-@badge-font-weight:           bold;
+@badge-font-weight:           normal;
 @badge-line-height:           1;
 @badge-border-radius:         10px;
 
@@ -809,9 +820,9 @@
 //
 //##
 
-@close-font-weight:           bold;
+@close-font-weight:           normal;
 @close-color:                 #000;
-@close-text-shadow:           0 1px 0 #fff;
+@close-text-shadow:           none;
 
 
 //== Code
diff --git a/public/less/admin/bootswatch.less b/public/less/admin/bootswatch.less
new file mode 100644
index 0000000000..cceb643cf6
--- /dev/null
+++ b/public/less/admin/bootswatch.less
@@ -0,0 +1,607 @@
+// Paper 3.3.5
+// Bootswatch
+// -----------------------------------------------------
+
+@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
+
+// Navbar =====================================================================
+
+.navbar {
+  border: none;
+  .box-shadow(0 1px 2px rgba(0,0,0,.3));
+
+  &-brand {
+    font-size: 24px;
+  }
+
+  &-inverse {
+    .form-control {
+      color: #fff;
+      .placeholder(@navbar-inverse-link-color);
+
+      &[type=text],
+      &[type=password] {
+        .box-shadow(inset 0 -1px 0 @navbar-inverse-link-color);
+
+        &:focus {
+          .box-shadow(inset 0 -2px 0 #fff);
+        }
+      }
+    }
+  }
+}
+
+// Buttons ====================================================================
+
+#btn(@class,@bg) {
+  .btn-@{class} {
+    background-size: 200%;
+    background-position: 50%;
+
+    &:focus {
+      background-color: @bg;
+    }
+
+    &:hover,
+    &:active:hover {
+      background-color: darken(@bg, 6%);
+    }
+
+    &:active {
+      background-color: darken(@bg, 12%);
+      #gradient > .radial(darken(@bg, 12%) 10%, @bg 11%);
+      background-size: 1000%;
+      .box-shadow(2px 2px 4px rgba(0,0,0,.4));
+    }
+  }
+}
+
+#btn(default,@btn-default-bg);
+#btn(primary,@btn-primary-bg);
+#btn(success,@btn-success-bg);
+#btn(info,@btn-info-bg);
+#btn(warning,@btn-warning-bg);
+#btn(danger,@btn-danger-bg);
+#btn(link,#fff);
+
+.btn {
+  text-transform: uppercase;
+  border: none;
+  .box-shadow(1px 1px 4px rgba(0,0,0,.4));
+  .transition(all 0.4s);
+
+  &-link {
+    border-radius: @btn-border-radius-base;
+    .box-shadow(none);
+    color: @btn-default-color;
+
+    &:hover,
+    &:focus {
+      .box-shadow(none);
+      color: @btn-default-color;
+      text-decoration: none;
+    }
+  }
+
+  &-default {
+
+    &.disabled {
+      background-color: rgba(0, 0, 0, 0.1);
+      color: rgba(0, 0, 0, 0.4);
+      opacity: 1;
+    }
+  }
+}
+
+.btn-group {
+  .btn + .btn,
+  .btn + .btn-group,
+  .btn-group + .btn,
+  .btn-group + .btn-group {
+    margin-left: 0;
+  }
+
+  &-vertical {
+    > .btn + .btn,
+    > .btn + .btn-group,
+    > .btn-group + .btn,
+    > .btn-group + .btn-group {
+      margin-top: 0;
+    }
+  }
+}
+
+// Typography =================================================================
+
+body {
+  -webkit-font-smoothing: antialiased;
+  letter-spacing: .1px;
+}
+
+p {
+  margin: 0 0 1em;
+}
+
+input,
+button {
+  -webkit-font-smoothing: antialiased;
+  letter-spacing: .1px;
+}
+
+a {
+  .transition(all 0.2s);
+}
+
+// Tables =====================================================================
+
+.table-hover {
+  > tbody > tr,
+  > tbody > tr > th,
+  > tbody > tr > td {
+    .transition(all 0.2s);
+  }
+}
+
+// Forms ======================================================================
+
+label {
+  font-weight: normal;
+}
+
+textarea,
+textarea.form-control,
+input.form-control,
+input[type=text],
+input[type=password],
+input[type=email],
+input[type=number],
+[type=text].form-control,
+[type=password].form-control,
+[type=email].form-control,
+[type=tel].form-control,
+[contenteditable].form-control {
+  padding: 0;
+  border: none;
+  border-radius: 0;
+  -webkit-appearance: none;
+  .box-shadow(inset 0 -1px 0 #ddd);
+  font-size: 16px;
+
+  &:focus {
+    .box-shadow(inset 0 -2px 0 @brand-primary);
+  }
+
+  &[disabled],
+  &[readonly] {
+    .box-shadow(none);
+    border-bottom: 1px dotted #ddd;
+  }
+
+  &.input {
+    &-sm {
+      font-size: @font-size-small;
+    }
+
+    &-lg {
+      font-size: @font-size-large;
+    }
+  }
+}
+
+select,
+select.form-control {
+  border: 0;
+  border-radius: 0;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  appearance: none;
+  padding-left: 0;
+  padding-right: 0\9; // remove padding for < ie9 since default arrow can't be removed
+  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
+  background-size: 13px;
+  background-repeat: no-repeat;
+  background-position: right center;
+  .box-shadow(inset 0 -1px 0 #ddd);
+  font-size: 16px;
+  line-height: 1.5;
+
+  &::-ms-expand {
+    display: none;
+  }
+
+  &.input {
+    &-sm {
+      font-size: @font-size-small;
+    }
+
+    &-lg {
+      font-size: @font-size-large;
+    }
+  }
+
+  &:focus {
+    .box-shadow(inset 0 -2px 0 @brand-primary);
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
+  }
+
+  &[multiple] {
+    background: none;
+  }
+}
+
+.radio,
+.radio-inline,
+.checkbox,
+.checkbox-inline {
+  label {
+    padding-left: 25px;
+  }
+
+  input[type="radio"],
+  input[type="checkbox"] {
+    margin-left: -25px;
+  }
+}
+
+input[type="radio"],
+.radio input[type="radio"],
+.radio-inline input[type="radio"] {
+  position: relative;
+  margin-top: 6px;
+  margin-right: 4px;
+  vertical-align: top;
+  border: none;
+  background-color: transparent;
+  -webkit-appearance: none;
+  appearance: none;
+  cursor: pointer;
+
+  &:focus {
+    outline: none;
+  }
+
+  &:before,
+  &:after {
+    content: "";
+    display: block;
+    width: 18px;
+    height: 18px;
+    border-radius: 50%;
+    .transition(240ms);
+  }
+
+  &:before {
+    position: absolute;
+    left: 0;
+    top: -3px;
+    background-color: @brand-primary;
+    .scale(0);
+  }
+
+  &:after {
+    position: relative;
+    top: -3px;
+    border: 2px solid @gray;
+  }
+
+  &:checked:before {
+    .scale(0.5);
+  }
+
+  &:disabled:checked:before {
+    background-color: @gray-light;
+  }
+
+  &:checked:after {
+    border-color: @brand-primary;
+  }
+
+  &:disabled:after,
+  &:disabled:checked:after {
+    border-color: @gray-light;
+  }
+}
+
+input[type="checkbox"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: relative;
+  border: none;
+  margin-bottom: -4px;
+  -webkit-appearance: none;
+  appearance: none;
+  cursor: pointer;
+
+  &:focus {
+    outline: none;
+  }
+
+  &:after {
+    content: "";
+    display: block;
+    width: 18px;
+    height: 18px;
+    margin-top: -2px;
+    margin-right: 5px;
+    border: 2px solid @gray;
+    border-radius: 2px;
+    .transition(240ms);
+  }
+
+  &:checked:before {
+    content: "";
+    position: absolute;
+    top: 0;
+    left: 6px;
+    display: table;
+    width: 6px;
+    height: 12px;
+    border: 2px solid #fff;
+    border-top-width: 0;
+    border-left-width: 0;
+    .rotate(45deg);
+  }
+
+  &:checked:after {
+    background-color: @brand-primary;
+    border-color: @brand-primary;
+  }
+
+  &:disabled:after {
+    border-color: @gray-light;
+  }
+
+  &:disabled:checked:after {
+    background-color: @gray-light;
+    border-color: transparent;
+  }
+}
+
+.has-warning {
+  input:not([type=checkbox]),
+  .form-control,
+  input.form-control[readonly],
+  input[type=text][readonly],
+  [type=text].form-control[readonly],
+  input:not([type=checkbox]):focus,
+  .form-control:focus {
+    border-bottom: none;
+    .box-shadow(inset 0 -2px 0 @brand-warning);
+  }
+}
+
+.has-error {
+  input:not([type=checkbox]),
+  .form-control,
+  input.form-control[readonly],
+  input[type=text][readonly],
+  [type=text].form-control[readonly],
+  input:not([type=checkbox]):focus,
+  .form-control:focus {
+    border-bottom: none;
+    .box-shadow(inset 0 -2px 0 @brand-danger);
+  }
+}
+
+.has-success {
+  input:not([type=checkbox]),
+  .form-control,
+  input.form-control[readonly],
+  input[type=text][readonly],
+  [type=text].form-control[readonly],
+  input:not([type=checkbox]):focus,
+  .form-control:focus {
+    border-bottom: none;
+    .box-shadow(inset 0 -2px 0 @brand-success);
+  }
+}
+
+// Remove the Bootstrap feedback styles for input addons
+.input-group-addon {
+  .has-warning &, .has-error &, .has-success & {
+    color: @input-color;
+    border-color: @input-group-addon-border-color;
+    background-color: @input-group-addon-bg;
+  }
+}
+
+// Navs =======================================================================
+
+.nav-tabs {
+  > li > a,
+  > li > a:focus {
+    margin-right: 0;
+    background-color: transparent;
+    border: none;
+    color: @navbar-default-link-color;
+    .box-shadow(inset 0 -1px 0 #ddd);
+    .transition(all 0.2s);
+
+    &:hover {
+      background-color: transparent;
+      .box-shadow(inset 0 -2px 0 @brand-primary);
+      color: @brand-primary;
+    }
+  }
+
+  & > li.active > a,
+  & > li.active > a:focus {
+    border: none;
+    .box-shadow(inset 0 -2px 0 @brand-primary);
+    color: @brand-primary;
+
+    &:hover {
+      border: none;
+      color: @brand-primary;
+    }
+  }
+
+  & > li.disabled > a {
+    .box-shadow(inset 0 -1px 0 #ddd);
+  }
+
+  &.nav-justified {
+
+    & > li > a,
+    & > li > a:hover,
+    & > li > a:focus,
+    & > .active > a,
+    & > .active > a:hover,
+    & > .active > a:focus {
+      border: none;
+    }
+  }
+
+  .dropdown-menu {
+    margin-top: 0;
+  }
+}
+
+.dropdown-menu {
+  margin-top: 0;
+  border: none;
+  .box-shadow(0 1px 4px rgba(0,0,0,.3));
+}
+
+// Indicators =================================================================
+
+.alert {
+  border: none;
+  color: #fff;
+
+  &-success {
+    background-color: @brand-success;
+  }
+
+  &-info {
+    background-color: @brand-info;
+  }
+
+  &-warning {
+    background-color: @brand-warning;
+  }
+
+  &-danger {
+    background-color: @brand-danger;
+  }
+
+  a:not(.close),
+  .alert-link {
+    color: #fff;
+    font-weight: bold;
+  }
+
+  .close {
+    color: #fff;
+  }
+}
+
+.badge {
+  padding: 3px 6px 5px;
+}
+
+.progress {
+  position: relative;
+  z-index: 1;
+  height: 6px;
+  border-radius: 0;
+
+  .box-shadow(none);
+
+  &-bar {
+    .box-shadow(none);
+
+    &:last-child {
+      border-radius: 0 3px 3px 0;
+    }
+
+    &:last-child {
+      &:before {
+        display: block;
+        content: "";
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        left: 0;
+        right: 0;
+        z-index: -1;
+        background-color: lighten(@progress-bar-bg, 35%);
+      }
+    }
+
+    &-success:last-child.progress-bar:before {
+      background-color: lighten(@brand-success, 35%);
+    }
+
+    &-info:last-child.progress-bar:before {
+      background-color: lighten(@brand-info, 45%);
+    }
+    &-warning:last-child.progress-bar:before {
+      background-color: lighten(@brand-warning, 35%);
+    }
+
+    &-danger:last-child.progress-bar:before {
+      background-color: lighten(@brand-danger, 25%);
+    }
+  }
+}
+
+// Progress bars ==============================================================
+
+// Containers =================================================================
+
+.close {
+  font-size: 34px;
+  font-weight: 300;
+  line-height: 24px;
+  opacity: 0.6;
+  .transition(all 0.2s);
+
+  &:hover {
+    opacity: 1;
+  }
+}
+
+.list-group {
+
+  &-item {
+    padding: 15px;
+  }
+
+  &-item-text {
+    color: @gray-light;
+  }
+}
+
+.well {
+  border-radius: 0;
+  .box-shadow(none);
+}
+
+.panel {
+  border: none;
+  border-radius: 2px;
+  .box-shadow(0 1px 4px rgba(0,0,0,.3));
+
+  &-heading {
+    border-bottom: none;
+  }
+
+  &-footer {
+    border-top: none;
+  }
+}
+
+.popover {
+  border: none;
+  .box-shadow(0 1px 4px rgba(0,0,0,.3));
+}
+
+.carousel {
+  &-caption {
+    h1, h2, h3, h4, h5, h6 {
+      color: inherit;
+    }
+  }
+}
+
diff --git a/public/less/admin/header.less b/public/less/admin/header.less
new file mode 100644
index 0000000000..df91bd4787
--- /dev/null
+++ b/public/less/admin/header.less
@@ -0,0 +1,91 @@
+.header {
+	position: relative;
+	background: #333;
+	width: 100%;
+	height: 200px;
+	margin-bottom: 50px;
+	font-size: 16px;
+
+	#main-page-title {
+		position: absolute;
+		left: 48px;
+		bottom: 17px;
+		color: #aaa;
+		font-size: 47px;
+		font-weight: 300;
+	}
+
+	#user_label {
+		position: absolute;
+		right: 30px;
+		bottom: 125px;
+
+		.dropdown {
+			margin-right: 0px;
+
+			.dropdown-toggle i {
+				padding: 0 1rem;
+			}
+		}
+
+		#user_dropdown {
+			font-size: 25px;
+			color: #eee;
+
+			i {
+				margin-top: 12px;
+				display: block;
+			}
+		}
+	}
+
+	#acp-search {
+		margin-top: 2px;
+		margin-right: 20px;
+
+		input {
+			padding: 10px 20px;
+			width: 250px;
+			height: 44px;
+			background-color: rgba(0, 0, 0, 0.2);
+			border-radius: 3px;
+			box-shadow: none;
+			.transition(.4s ease background-color);
+
+			&:focus {
+				background-color: #eee;
+				color: #333;
+			}
+		}
+
+		.search-match {
+			font-weight: 700;
+			color: black;
+		}
+	}
+
+	> ul {
+		list-style-type: none;
+		padding: 0px;
+		position: absolute;
+		bottom: -11px;
+		left: 50px;
+
+		> li {
+			float: left;
+			margin-right: 30px;
+
+			&.active {
+				border-bottom: 4px solid @brand-primary;
+    			padding-bottom: 10px;
+			}
+
+			> a {
+				color: white;
+				text-transform: uppercase;
+				text-decoration: none;
+				outline: none;
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/public/less/admin/manage/categories.less b/public/less/admin/manage/categories.less
index 5f8cc4fcd0..9b1e1fec3f 100644
--- a/public/less/admin/manage/categories.less
+++ b/public/less/admin/manage/categories.less
@@ -16,6 +16,12 @@ div.categories {
 			padding-bottom: 12px;
 			margin-bottom: 12px;
 		}
+
+		> li li:last-child {
+			.row {
+				border-bottom: 0px;
+			}
+		}
 	}
 
 	.stats {
@@ -32,6 +38,7 @@ div.categories {
 	li {
 		min-height: @acp-line-height;
 		margin: @acp-base-line 0;
+		margin-top: 28px;
 
 		&.placeholder {
 			border: 1px dashed #2196F3;
@@ -41,7 +48,7 @@ div.categories {
 
 	.disabled {
 
-		.icon, .header, .description {
+		.icon, .category-header, .description {
 			opacity: 0.5;
 		}
 
@@ -67,7 +74,7 @@ div.categories {
 		float: left;
 	}
 
-	.header {
+	.category-header {
 		margin-top: 0;
 		margin-bottom: @acp-base-line;
 	}
diff --git a/public/less/admin/manage/groups.less b/public/less/admin/manage/groups.less
new file mode 100644
index 0000000000..f6dac84921
--- /dev/null
+++ b/public/less/admin/manage/groups.less
@@ -0,0 +1,5 @@
+.group {
+	.current_members {
+		padding: 0;
+	}
+}
\ No newline at end of file
diff --git a/public/less/admin/manage/tags.less b/public/less/admin/manage/tags.less
index e034d3b3f6..6800778237 100644
--- a/public/less/admin/manage/tags.less
+++ b/public/less/admin/manage/tags.less
@@ -18,8 +18,6 @@
 
 	.tag-item {
 		border: solid 1px @gray-light;
-		border-bottom-left-radius: 5px;
-		border-top-left-radius: 5px;
 		background-color: transparent;
 		color: @gray-light;
 		padding: .2em .6em .3em;
@@ -31,15 +29,14 @@
 	.tag-topic-count {
 		border: solid 1px lighten(@brand-primary, 20%);
 		background-color: lighten(@brand-primary, 20%);
-		padding: .2em .6em .3em;
+		padding: 6px;
 		font-size: 75%;
 		font-weight: 700;
 		white-space: nowrap;
 		border-left: none;
 		padding-right: 5px;
 		padding-left: 5px;
-		border-bottom-right-radius: 5px;
-		border-top-right-radius: 5px;
+		border-width: 1px 1px 2px medium;
 
 		a {
 			color: #FFFFFF;
diff --git a/public/less/admin/mobile.less b/public/less/admin/mobile.less
new file mode 100644
index 0000000000..2d664a5b9c
--- /dev/null
+++ b/public/less/admin/mobile.less
@@ -0,0 +1,176 @@
+#mobile-menu {
+	display: none;
+}
+
+@media (max-width: 1200px) {
+
+}
+
+@media (max-width: 980px) {
+	body {
+		height: 100%;
+	}
+
+	.header {
+		height: 58px;
+		box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.26);
+		position: fixed;
+		top: 0px;
+		z-index: 5;
+
+		#main-page-title {
+			bottom: -31px;
+			font-size: 20px;
+			color: #FFF;
+			left: 52px;
+			font-weight: 400;
+		}
+
+		#user_label {
+			right: 0px;
+			bottom: 7px;
+		}
+
+		#main-menu {
+			display: none;
+		}
+	}
+
+	#mobile-menu {
+		width: 31px;
+		background: none;
+		border: none;
+		vertical-align: 10%;
+		margin-right: 10px;
+		margin-left: -15px;
+		outline: none !important;
+		display: block;
+
+		position: absolute;
+		top: 22px;
+		left: 22px;
+
+		.bar {
+			width: 100%;
+			height: 2px;
+			background: #fff;
+			margin-bottom: 3px;
+			border-radius: 10px;
+		}
+	}
+
+	#menu {
+		background-color: #1D1F20;
+		background-image: linear-gradient(145deg, #1D1F20, #404348);
+
+		a {
+			color: #fff;
+			text-decoration: none;
+		}
+
+		a:hover {
+			text-decoration: underline;
+		}
+	}
+
+	.menu-header-title {
+		font-weight: 400;
+		letter-spacing: 0.5px;
+		margin: 0;
+	}
+
+	.menu-section {
+		margin: 25px 0;
+	}
+
+	.menu-section-title {
+		text-transform: uppercase;
+		color: #85888d;
+		font-weight: 200;
+		font-size: 13px;
+		letter-spacing: 1px;
+		padding: 0 20px;
+		margin:0;
+	}
+
+	.menu-section-list {
+		padding:0;
+		margin: 10px 0;
+		list-style:none;
+
+		a {
+			display: block;
+			padding: 10px 20px;
+		}
+
+		a:hover {
+			background-color: rgba(255, 255, 255, 0.1);
+			text-decoration: none;
+		}
+	}
+
+	#panel {
+		background: white;
+		min-height: 100%;
+		padding-top: 80px;
+	}
+
+	.slideout-menu {
+		position: fixed;
+		left: 0;
+		top: 0;
+		bottom: 0;
+		right: 0;
+		z-index: 0;
+		width: 256px;
+		overflow-y: auto;
+		-webkit-overflow-scrolling: touch;
+		display: none;
+	}
+
+
+	.slideout-panel {
+		position: relative;
+		z-index: 1;
+	}
+
+	.slideout-open,
+	.slideout-open body,
+	.slideout-open .slideout-panel {
+		overflow: hidden;
+		overflow-y: hidden !important;
+	}
+
+	.slideout-open .slideout-menu {
+		display: block;
+	}
+
+	html {
+		height: 100%;
+		overflow-y: hidden;
+	}
+	
+	.slideout-open {
+		overflow-y: hidden;
+		height: 100%;
+	}
+
+	body {
+		overflow-y: scroll;
+		overflow-x: hidden;
+	}
+}
+
+@media (max-width: 768px) {
+	.content-header, .settings-header {
+		font-size: 200%;
+		margin-bottom: 20px;
+		margin-left: -2px;
+	}
+
+
+	.dropdown-menu {
+		margin-top: -35px;
+		margin-right: -2px;
+	}
+}
\ No newline at end of file
diff --git a/public/less/admin/modules/checkboxes.less b/public/less/admin/modules/checkboxes.less
deleted file mode 100644
index 2abc51d118..0000000000
--- a/public/less/admin/modules/checkboxes.less
+++ /dev/null
@@ -1,18 +0,0 @@
-label {
-	cursor: pointer;
-}
-
-.checkbox label {
-	padding-left: 2px;
-}
-
-.admin {
-	.fa-toggle-on, .fa-toggle-off {
-		font-size: 21px;
-		vertical-align: -3px;
-	}
-
-	.fa-toggle-on {
-		color: @brand-success;
-	}
-}
\ No newline at end of file
diff --git a/public/less/admin/modules/snackbar.less b/public/less/admin/modules/snackbar.less
new file mode 100644
index 0000000000..b27cfdb14e
--- /dev/null
+++ b/public/less/admin/modules/snackbar.less
@@ -0,0 +1,65 @@
+#snackbar-container {
+	position:fixed;
+	left:20px;
+	bottom:0;
+	z-index:99999;
+
+	strong {
+		margin-right: 30px;
+	}
+}
+
+.snackbar {
+	overflow:hidden;
+	clear:both;
+	min-width:288px;
+	max-width:568px;
+	cursor:pointer;
+	opacity:0;
+}
+
+.snackbar.snackbar-opened {
+	height:auto;
+	opacity:1;
+}
+
+@media (max-width:767px) {
+	#snackbar-container {
+		left:0!important;
+		right:0;
+		width:100%;
+
+		strong {
+			display: block;
+		}
+	}
+
+	#snackbar-container .snackbar {
+		min-width:100%;
+	}
+
+	#snackbar-container [class="snackbar snackbar-opened"]~.snackbar.toast {
+		margin-top:20px;
+	}
+
+	#snackbar-container [class="snackbar snackbar-opened"] {
+		border-radius:0;
+		margin-bottom:0;
+	}
+}
+
+.snackbar {
+	background-color: #323232;
+	color: #FFFFFF;
+	font-size: 14px;
+	border-radius: 2px;
+	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
+	height: 0;
+	.transition(.25s ease-in-out opacity);
+}
+
+.snackbar.snackbar-opened {
+	padding: 10px 15px;
+	margin-bottom: 20px;
+	height: auto;
+}
diff --git a/public/less/admin/settings.less b/public/less/admin/settings.less
new file mode 100644
index 0000000000..84572def68
--- /dev/null
+++ b/public/less/admin/settings.less
@@ -0,0 +1,19 @@
+.settings {
+	.row {
+		margin-bottom: 30px;
+	}
+
+	.section-content {
+		border-left: 3px solid @brand-primary;
+
+		ul {
+			list-style-type: none;
+			font-size: 16px;
+			padding-left: 20px;
+		}
+	}
+
+	[data-action="upload"][type="text"] {
+		width: 95%;
+	}
+}
\ No newline at end of file
diff --git a/public/less/mixins.less b/public/less/mixins.less
index e6ea7ceac4..cadde9db5d 100644
--- a/public/less/mixins.less
+++ b/public/less/mixins.less
@@ -51,4 +51,22 @@
 	overflow: hidden;
 	text-overflow: ellipsis;
 	white-space: nowrap;
+}
+
+.fix-lists {
+	ul {
+		> li {
+			list-style-type: disc;
+
+			ul > li {
+				list-style-type: circle;
+
+				ul > li {
+					list-style-type: square;
+				}
+			}
+		}
+
+		margin-bottom: 10px;
+	}
 }
\ No newline at end of file
diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js
index bc6d81d747..91771a13b2 100644
--- a/public/src/admin/admin.js
+++ b/public/src/admin/admin.js
@@ -1,32 +1,29 @@
 "use strict";
-/*global define, socket, app, ajaxify, utils, bootbox, Mousetrap, Hammer, RELATIVE_PATH*/
+/*global componentHandler, define, socket, app, ajaxify, utils, bootbox, Mousetrap, Hammer, RELATIVE_PATH*/
 
 (function() {
 	$(document).ready(function() {
-		setupMenu();
 		setupKeybindings();
 
 		if(!/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
 			require(['admin/modules/search'], function(search) {
 				search.init();
 			});
-		} else {
-			activateMobile();
 		}
 
 		$(window).on('action:ajaxify.contentLoaded', function(ev, data) {
 			var url = data.url;
 
 			selectMenuItem(data.url);
-			setupHeaderMenu();
 			setupRestartLinks();
+
+			componentHandler.upgradeDom();
 		});
 
-		$(window).on('action:admin.settingsLoaded', setupCheckboxes);
-
 		$('[component="logout"]').on('click', app.logout);
+		app.alert = launchSnackbar;
 
-		$(window).resize(setupHeaderMenu);
+		configureSlidemenu();
 	});
 
 	socket.emit('admin.config.get', function(err, config) {
@@ -45,27 +42,6 @@
 		$(window).trigger('action:config.loaded');
 	});
 
-	function setupMenu() {
-		var listElements = $('.sidebar-nav li');
-
-		listElements.on('click', function() {
-			var $this = $(this);
-
-			if ($this.hasClass('nav-header')) {
-				$this.parents('.sidebar-nav').toggleClass('open').bind('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', function (ev) {
-					$('.nano').nanoScroller();
-				});
-			} else {
-				listElements.removeClass('active');
-				$this.addClass('active');
-			}
-		});
-
-		$('.nano').nanoScroller();
-
-		$('#main-menu .nav-list > li a').append(' ');
-	}
-
 	function setupKeybindings() {
 		Mousetrap.bind('ctrl+shift+a r', function() {
 			require(['admin/modules/instance'], function(instance) {
@@ -74,7 +50,6 @@
 		});
 
 		Mousetrap.bind('ctrl+shift+a R', function() {
-			console.log('[admin] Restarting NodeBB...');
 			socket.emit('admin.restart');
 		});
 
@@ -85,75 +60,32 @@
 		});
 	}
 
-
-	function activateMobile() {
-		$('.admin').addClass('mobile');
-		$('#main-menu').addClass('transitioning');
-
-		Hammer(document.body).on('swiperight', function(e) {
-			$('#main-menu').addClass('open');
-		});
-
-		Hammer(document.body).on('swipeleft', function(e) {
-			$('#main-menu').removeClass('open');
-		});
-
-		Hammer($('#main-menu')[0]).on('swiperight', function(e) {
-			$('#main-menu').addClass('open');
-		});
-
-		Hammer($('#main-menu')[0]).on('swipeleft', function(e) {
-			$('#main-menu').removeClass('open');
-		});
-
-		$(window).on('scroll', function() {
-			$('#main-menu').height($(window).height() + 20);
-		});
-	}
-
 	function selectMenuItem(url) {
-		url = url.replace(/\/\d+$/, '');
+		url = url
+			.replace(/\/\d+$/, '')
+			.split('/').slice(0, 3).join('/');
 
 		// If index is requested, load the dashboard
 		if (url === 'admin') {
 			url = 'admin/general/dashboard';
 		}
 
-		$('#main-menu .nav-list > li').removeClass('active').each(function() {
+		$('#main-menu li').removeClass('active');
+		$('#main-menu a').removeClass('active').each(function() {
 			var menu = $(this),
-				category = menu.parents('.sidebar-nav'),
-				href = menu.children('a').attr('href'),
-				isLink = menu.attr('data-link') === '1';
+				href = menu.attr('href'),
+				isLink = menu.parent().attr('data-link') === '1';
 
-			if (!isLink && href && href.slice(1) === url) {
-				category.addClass('open');
-				menu.addClass('active');
-				modifyBreadcrumb(category.find('.nav-header').text(), menu.text());
+			if (!isLink && href && href === [config.relative_path, url].join('/')) {
+				menu
+					.parent().addClass('active')
+					.parents('.menu-item').addClass('active');
+
+				$('#main-page-title').text(menu.text() + (menu.parents('.menu-item').children('a').text() === 'Settings' ? ' Settings' : ''));
 			}
 		});
 	}
 
-	function modifyBreadcrumb() {
-		var caret = '  ';
-
-		$('#breadcrumbs').html(caret + Array.prototype.slice.call(arguments).join(caret));
-	}
-
-	function setupHeaderMenu() {
-		var env = utils.findBootstrapEnvironment();
-
-		if (env !== 'lg') {
-			if ($('.mobile-header').length || $('#content .col-lg-9').first().height() < 2000) {
-				return;
-			}
-
-			($('#content .col-lg-3').first().clone().addClass('mobile-header'))
-				.insertBefore($('#content .col-lg-9').first());
-		} else {
-			$('.mobile-header').remove();
-		}
-	}
-
 	function setupRestartLinks() {
 		$('.restart').off('click').on('click', function() {
 			bootbox.confirm('Are you sure you wish to restart NodeBB?', function(confirm) {
@@ -172,37 +104,54 @@
 		});
 	}
 
-	function setupCheckboxes() {
-		if (ajaxify.currentPage.match(/^admin\/manage\/categories/)) {
-			return $('[type=checkbox]').show();
+	function launchSnackbar(params) {
+		var bar = $.snackbar({
+			content: "" + params.title + "" + params.message,
+			timeout: 3000,
+			htmlAllowed: true
+		});
+
+		if (params.clickfn) {
+			bar.on('click', params.clickfn);
 		}
-
-		$('[type=checkbox]').change(function() {
-			var checked = $(this).is(':checked');
-
-			$(this).siblings('[class*=fa-]').toggleClass('fa-toggle-off', !checked)
-				.toggleClass('fa-toggle-on', checked);
-		});
-
-		$('[type=checkbox]').each(function() {
-			var checkbox = $(this),
-				checked = checkbox.is(':checked');
-
-			if (checkbox.attr('data-toggle-added')) {
-				return;
-			}
-
-			checkbox.hide();
-
-			if (checked) {
-				checkbox.after('');
-			} 
-			else {
-				checkbox.after('');   
-			}
-
-			checkbox.attr('data-toggle-added', true);
-		});
 	}
 
+	function configureSlidemenu() {
+		var slideout = new Slideout({
+			'panel': document.getElementById('panel'),
+			'menu': document.getElementById('menu'),
+			'padding': 256,
+			'tolerance': 70
+		});
+
+		$('#mobile-menu').on('click', function() {
+			slideout.toggle();
+		});
+
+		$('#menu a').on('click', function() {
+			slideout.close();
+		});
+
+		$(window).on('resize', function() {
+			slideout.close();
+		});
+
+		function onOpeningMenu() {
+			$('#header').css({
+				'top': $('#panel').position().top * -1 + 'px',
+				'position': 'absolute'
+			});
+		}
+
+		slideout.on('beforeopen', onOpeningMenu);
+		slideout.on('open', onOpeningMenu);
+		slideout.on('translate', onOpeningMenu);
+
+		slideout.on('close', function() {
+			$('#header').css({
+				'top': '0px',
+				'position': 'fixed'
+			});
+		});
+	}
 }());
\ No newline at end of file
diff --git a/public/src/admin/appearance/skins.js b/public/src/admin/appearance/skins.js
index 1a24b80ef5..b057c740c8 100644
--- a/public/src/admin/appearance/skins.js
+++ b/public/src/admin/appearance/skins.js
@@ -9,12 +9,12 @@ define('admin/appearance/skins', function() {
 		scriptEl.attr('src', '//bootswatch.aws.af.cm/3/?callback=bootswatchListener');
 		$('body').append(scriptEl);
 
-		$('#bootstrap_themes').on('click', function(e){
+		$('#skins').on('click', function(e){
 			var target = $(e.target),
 				action = target.attr('data-action');
 
 			if (action && action === 'use') {
-				var parentEl = target.parents('li'),
+				var parentEl = target.parents('[data-theme]'),
 					themeType = parentEl.attr('data-type'),
 					cssSrc = parentEl.attr('data-css'),
 					themeId = parentEl.attr('data-theme');
@@ -59,12 +59,39 @@ define('admin/appearance/skins', function() {
 			showRevert: true
 		}, function(html) {
 			themeContainer.html(html);
+
+			if (config['theme:src']) {
+				var skin = config['theme:src']
+					.match(/latest\/(\S+)\/bootstrap.min.css/)[1]
+					.replace(/(^|\s)([a-z])/g , function(m,p1,p2){return p1+p2.toUpperCase();});
+
+				highlightSelectedTheme(skin);
+			}
 		});
 	};
 
 	function highlightSelectedTheme(themeId) {
-		$('.themes li[data-theme]').removeClass('btn-warning');
-		$('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning');
+		$('[data-theme]')
+			.removeClass('selected')
+			.find('[data-action="use"]').each(function() {
+				if ($(this).parents('[data-theme]').attr('data-theme')) {
+					$(this)
+						.html('Select Theme')
+						.removeClass('btn-success')
+						.addClass('btn-primary');
+				}
+			});
+
+		if (!themeId) {
+			return;
+		}
+
+		$('[data-theme="' + themeId + '"]')
+			.addClass('selected')
+			.find('[data-action="use"]')
+				.html('Current Theme')
+				.removeClass('btn-primary')
+				.addClass('btn-success');
 	}
 
 	return Skins;
diff --git a/public/src/admin/appearance/themes.js b/public/src/admin/appearance/themes.js
index e513d677ec..17bae639d7 100644
--- a/public/src/admin/appearance/themes.js
+++ b/public/src/admin/appearance/themes.js
@@ -10,7 +10,7 @@ define('admin/appearance/themes', function() {
 				action = target.attr('data-action');
 
 			if (action && action === 'use') {
-				var parentEl = target.parents('li'),
+				var parentEl = target.parents('[data-theme]'),
 					themeType = parentEl.attr('data-type'),
 					cssSrc = parentEl.attr('data-css'),
 					themeId = parentEl.attr('data-theme');
@@ -40,16 +40,16 @@ define('admin/appearance/themes', function() {
 		});
 
 		$('#revert_theme').on('click', function() {
-			bootbox.confirm('Are you sure you wish to remove the custom theme and restore the NodeBB default theme?', function(confirm) {
+			bootbox.confirm('Are you sure you wish to restore the default NodeBB theme?', function(confirm) {
 				if (confirm) {
 					socket.emit('admin.themes.set', {
 						type: 'local',
-						id: 'nodebb-theme-vanilla'
+						id: 'nodebb-theme-persona'
 					}, function(err) {
 						if (err) {
 							return app.alertError(err.message);
 						}
-						highlightSelectedTheme('nodebb-theme-vanilla');
+						highlightSelectedTheme('nodebb-theme-persona');
 						app.alert({
 							alert_id: 'admin:theme',
 							type: 'success',
@@ -84,8 +84,19 @@ define('admin/appearance/themes', function() {
 	};
 
 	function highlightSelectedTheme(themeId) {
-		$('.themes li[data-theme]').removeClass('btn-warning');
-		$('.themes li[data-theme="' + themeId + '"]').addClass('btn-warning');
+		$('[data-theme]')
+			.removeClass('selected')
+			.find('[data-action="use"]')
+				.html('Select Theme')
+				.removeClass('btn-success')
+				.addClass('btn-primary');
+
+		$('[data-theme="' + themeId + '"]')
+			.addClass('selected')
+			.find('[data-action="use"]')
+				.html('Current Theme')
+				.removeClass('btn-primary')
+				.addClass('btn-success');
 	}
 
 	return Themes;
diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js
index c12e9f02d7..5944f98f91 100644
--- a/public/src/admin/extend/plugins.js
+++ b/public/src/admin/extend/plugins.js
@@ -13,6 +13,8 @@ define('admin/extend/plugins', function() {
 			return;
 		}
 
+		$('#plugin-search').val('');
+
 		pluginsList.on('click', 'button[data-action="toggleActive"]', function() {
 			pluginID = $(this).parents('li').attr('data-plugin-id');
 			var btn = $(this);
@@ -186,22 +188,7 @@ define('admin/extend/plugins', function() {
 				return app.alertError(err.message);
 			}
 
-			var targetList = (pluginData.installed ? 'installed' : 'download'),
-				otherList = (pluginData.installed ? 'download' : 'installed'),
-				payload = {};
-
-			payload[targetList] = pluginData;
-			templates.parse('admin/partials/' + targetList + '_plugin_item', payload, function(html) {
-				var pluginList = $('ul.' + targetList);
-
-				pluginList.append(html);
-				$('ul.' + otherList).find('li[data-plugin-id="' + pluginID + '"]').slideUp('slow', function() {
-					$(this).remove();
-					$('html,body').animate({
-						scrollTop: pluginList.find('li').last().offset().top - 48
-					}, 1000);
-				});
-			});
+			ajaxify.refresh();
 
 			app.alert({
 				alert_id: 'plugin_toggled',
diff --git a/public/src/admin/extend/widgets.js b/public/src/admin/extend/widgets.js
index d2bf7c28ac..4ac3fdeaf0 100644
--- a/public/src/admin/extend/widgets.js
+++ b/public/src/admin/extend/widgets.js
@@ -17,6 +17,13 @@ define('admin/extend/widgets', function() {
 			return false;
 		});
 
+		$('#widget-selector').on('change', function() {
+			$('.available-widgets [data-widget]').addClass('hide');
+			$('.available-widgets [data-widget="' + $(this).val() + '"]').removeClass('hide');
+		});
+		
+		$('#widget-selector').trigger('change');
+
 		loadWidgetData();
 	};
 
@@ -64,7 +71,7 @@ define('admin/extend/widgets', function() {
 			}
 		});
 
-		$('#widgets .save').on('click', saveWidgets);
+		$('#save').on('click', saveWidgets);
 
 		function saveWidgets() {
 			var total = $('#widgets [data-template][data-location]').length;
@@ -198,7 +205,7 @@ define('admin/extend/widgets', function() {
 
 				for (var k=0; kDo you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?

Warning! All topics and posts in this category will be purged!

', function(confirm) { + bootbox.confirm('

Do you really want to purge this category "' + $('form.category').find('input[data-name="name"]').val() + '"?

Warning! All topics and posts in this category will be purged!

Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category temporarily, you\'ll want to "disable" the category instead.

', function(confirm) { if (!confirm) { return; } @@ -113,8 +102,7 @@ define('admin/manage/category', [ uploader.open(RELATIVE_PATH + '/api/admin/category/uploadpicture', { cid: cid }, 0, function(imageUrlOnServer) { inputEl.val(imageUrlOnServer); var previewBox = inputEl.parent().parent().siblings('.category-preview'); - previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')') - .css('background-size', 'cover'); + previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')'); modified(inputEl[0]); }); }); @@ -154,7 +142,6 @@ define('admin/manage/category', [ }); }); - setupEditTargets(); Category.setupPrivilegeTable(); }; diff --git a/public/src/admin/modules/search.js b/public/src/admin/modules/search.js index 781f4ade9e..ae15ad0064 100644 --- a/public/src/admin/modules/search.js +++ b/public/src/admin/modules/search.js @@ -50,14 +50,10 @@ define(function() { return false; }); - $('.sidebar-nav a').each(function(idx, link) { + $('#main-menu a').each(function(idx, link) { routes.push($(link).attr('href')); }); - input.on('blur', function() { - $(this).val('').attr('placeholder', '/'); - }); - input.on('keyup focus', function() { var $input = $(this), value = $input.val().toLowerCase(), @@ -67,8 +63,6 @@ define(function() { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); } - $input.attr('placeholder', ''); - firstResult = null; if (value.length >= 3) { @@ -101,15 +95,14 @@ define(function() { } } - if (menuItems.html() !== '') { - menuItems.append(''); - } else { + if (menuItems.html() === '') { menuItems.append('
  • No results...
  • '); } } if (value.length > 0) { if (config.searchEnabled) { + menuItems.append(''); menuItems.append('
  • Search the forum for ' + value + '
  • '); } else if (value.length < 3) { menuItems.append('
  • Type more to see results...
  • '); diff --git a/public/src/admin/settings.js b/public/src/admin/settings.js index 1eee16a353..97d2ea4a2e 100644 --- a/public/src/admin/settings.js +++ b/public/src/admin/settings.js @@ -5,7 +5,21 @@ define('admin/settings', ['uploader', 'sounds'], function(uploader, sounds) { var Settings = {}; Settings.init = function() { - $(window).on('action:config.loaded', Settings.prepare); + if (!app.config) { + $(window).on('action:config.loaded', Settings.prepare); + } else { + Settings.prepare(); + } + }; + + Settings.populateTOC = function() { + $('.settings-header').each(function() { + var header = $(this).text(), + anchor = header.toLowerCase().replace(/ /g, '-').trim(); + + $(this).prepend(''); + $('.section-content ul').append('
  • ' + header + '
  • '); + }); }; Settings.prepare = function(callback) { diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 4fd4586b6b..da8b2e6e9e 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -30,15 +30,15 @@ $(document).ready(function() { ajaxify.currentPage = null; - ajaxify.go = function (url, callback, quiet, search) { + ajaxify.go = function (url, callback, quiet) { if (!socket.connected) { if (ajaxify.reconnectAction) { $(window).off('action:reconnected', ajaxify.reconnectAction); } ajaxify.reconnectAction = function(e) { - ajaxify.go(url, callback, quiet, search); + ajaxify.go(url, callback, quiet); $(window).off(e); - } + }; $(window).on('action:reconnected', ajaxify.reconnectAction); } @@ -54,7 +54,7 @@ $(document).ready(function() { apiXHR.abort(); } - url = ajaxify.start(url, quiet, search); + url = ajaxify.start(url, quiet); $('#footer, #content').removeClass('hide').addClass('ajaxifying'); @@ -87,10 +87,8 @@ $(document).ready(function() { }; - ajaxify.start = function(url, quiet, search) { + ajaxify.start = function(url, quiet) { url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, '')); - var hash = window.location.hash; - search = search || ''; $(window).trigger('action:ajaxify.start', {url: url}); @@ -102,8 +100,8 @@ $(document).ready(function() { if (window.history && window.history.pushState) { window.history[!quiet ? 'pushState' : 'replaceState']({ - url: url + search + hash - }, url, RELATIVE_PATH + '/' + url + search + hash); + url: url + }, url, RELATIVE_PATH + '/' + url); } return url; }; @@ -152,7 +150,7 @@ $(document).ready(function() { $('#content, #footer').removeClass('ajaxifying'); - app.refreshTitle(url); + app.refreshTitle(data.title); }); }); } @@ -255,8 +253,6 @@ $(document).ready(function() { }; function ajaxifyAnchors() { - templates.registerLoader(ajaxify.loadTemplate); - function hrefEmpty(href) { return href === undefined || href === '' || href === 'javascript:;'; } @@ -282,7 +278,6 @@ $(document).ready(function() { if (window.location.pathname === this.pathname && this.hash.length) { window.location.hash = this.hash; } else { - window.location.hash = ''; if (ajaxify.go(pathname)) { e.preventDefault(); } @@ -301,6 +296,8 @@ $(document).ready(function() { }); } + templates.registerLoader(ajaxify.loadTemplate); + if (window.history && window.history.pushState) { // Progressive Enhancement, ajaxify available only to modern browsers ajaxifyAnchors(); diff --git a/public/src/app.js b/public/src/app.js index a14a403da5..8aeb81ea17 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -92,7 +92,7 @@ app.cacheBuster = null; switch(url_parts[0]) { case 'user': - room = 'user/' + ajaxify.data.theirid; + room = 'user/' + (ajaxify.data ? ajaxify.data.theirid : 0); break; case 'topic': room = 'topic_' + url_parts[1]; @@ -130,6 +130,50 @@ app.cacheBuster = null; } } + function overrideBootbox() { + var dialog = bootbox.dialog, + prompt = bootbox.prompt, + confirm = bootbox.confirm; + + function translate(modal) { + var footer = modal.find('.modal-footer'); + translator.translate(footer.html(), function(html) { + footer.html(html); + }); + } + + bootbox.dialog = function() { + var modal = $(dialog.apply(this, arguments)[0]); + translate(modal); + return modal; + } + + bootbox.prompt = function() { + var modal = $(prompt.apply(this, arguments)[0]); + translate(modal); + return modal; + } + + bootbox.confirm = function() { + var modal = $(confirm.apply(this, arguments)[0]); + translate(modal); + return modal; + } + } + + function overrideTimeago() { + var timeagoFn = $.fn.timeago; + $.fn.timeago = function() { + var els = timeagoFn.apply(this, arguments); + + if (els) { + els.each(function() { + $(this).attr('title', (new Date($(this).attr('title'))).toString()); + }); + } + }; + } + app.logout = function() { require(['csrf'], function(csrf) { $.ajax(RELATIVE_PATH + '/logout', { @@ -185,7 +229,8 @@ app.cacheBuster = null; enter: room, username: app.user.username, userslug: app.user.userslug, - picture: app.user.picture + picture: app.user.picture, + status: app.user.status }, function(err) { if (err) { app.alertError(err.message); @@ -344,19 +389,13 @@ app.cacheBuster = null; } }; - app.refreshTitle = function(url) { - if (!url) { - var a = document.createElement('a'); - a.href = document.location; - url = a.pathname.slice(1); - } - - socket.emit('meta.buildTitle', url, function(err, title, numNotifications) { - if (err) { - return; - } - titleObj.titles[0] = (numNotifications > 0 ? '(' + numNotifications + ') ' : '') + title; - app.alternatingTitle(''); + app.refreshTitle = function(title) { + require(['translator'], function(translator) { + translator.translate(title, function(translated) { + translated = translated ? (translated + ' | ' + config.browserTitle) : config.browserTitle; + titleObj.titles[0] = translated; + app.alternatingTitle(''); + }); }); }; @@ -380,7 +419,8 @@ app.cacheBuster = null; }; function createHeaderTooltips() { - if (utils.findBootstrapEnvironment() === 'xs') { + var env = utils.findBootstrapEnvironment(); + if (env === 'xs' || env === 'sm') { return; } $('#header-menu li a[title]').each(function() { @@ -454,6 +494,7 @@ app.cacheBuster = null; return app.alertError(err.message); } $('#logged-in-menu #user_label #user-profile-link>i').attr('class', 'fa fa-circle status ' + status); + app.user.status = status; }); e.preventDefault(); }); @@ -464,11 +505,13 @@ app.cacheBuster = null; return; } - translator.translate('[[global:' + status + ']]', function(translated) { - el.removeClass('online offline dnd away') - .addClass(status) - .attr('title', translated) - .attr('data-original-title', translated); + require(['translator'], function(translator) { + translator.translate('[[global:' + status + ']]', function(translated) { + el.removeClass('online offline dnd away') + .addClass(status) + .attr('title', translated) + .attr('data-original-title', translated); + }); }); }; @@ -484,6 +527,9 @@ app.cacheBuster = null; if (err) { return app.alertError(err.message); } + categories = categories.filter(function(category) { + return !category.link && !parseInt(category.parentCid, 10); + }); if (categories.length) { $(window).trigger('action:composer.topic.new', { cid: categories[0].cid @@ -496,7 +542,7 @@ app.cacheBuster = null; app.load = function() { $('document').ready(function () { - var url = ajaxify.start(window.location.pathname.slice(1), true, window.location.search); + var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search, true); ajaxify.end(url, app.template); handleStatusChange(); @@ -518,6 +564,8 @@ app.cacheBuster = null; } }); + overrideBootbox(); + overrideTimeago(); createHeaderTooltips(); app.showEmailConfirmWarning(); diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index d57443d631..f7896baa90 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -266,7 +266,9 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], if (password.val()) { showSuccess(password_confirm_notify, successIcon); } else { - removeAlert(password_confirm_notify); + password_confirm_notify.parent().removeClass('alert-success alert-danger'); + password_confirm_notify.children().show(); + password_confirm_notify.find('.msg').html(''); } passwordsmatch = true; @@ -365,7 +367,8 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], function showError(element, msg) { translator.translate(msg, function(msg) { - element.html(msg); + element.find('.msg').html(msg).siblings().hide(); + element.parent() .removeClass('alert-success') .addClass('alert-danger'); @@ -375,7 +378,7 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], function showSuccess(element, msg) { translator.translate(msg, function(msg) { - element.html(msg); + element.find('.msg').html(msg); element.parent() .removeClass('alert-danger') .addClass('alert-success'); @@ -383,10 +386,5 @@ define('forum/account/edit', ['forum/account/header', 'uploader', 'translator'], }); } - function removeAlert(element) { - element.html(''); - element.parent().removeClass('alert-success alert-danger'); - } - return AccountEdit; }); diff --git a/public/src/client/account/settings.js b/public/src/client/account/settings.js index 434072a0b0..23afc2f5c0 100644 --- a/public/src/client/account/settings.js +++ b/public/src/client/account/settings.js @@ -61,6 +61,13 @@ define('forum/account/settings', ['forum/account/header'], function(header) { return false; }); + + $('#bootswatchSkin').on('change', function() { + var css = $('#bootswatchCSS'), + val = $(this).val() === 'default' ? config['theme:src'] : 'http://maxcdn.bootstrapcdn.com/bootswatch/latest/' + $(this).val() + '/bootstrap.min.css'; + + css.attr('href', val); + }); }; return AccountSettings; diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 95fa9266b7..b5413a6de6 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -66,20 +66,21 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', popoutEl.on('click', function() { var username = $('.expanded-chat').attr('data-username'), - uid = Chats.getRecipientUid(); + uid = Chats.getRecipientUid(), + text = components.get('chat/input').val(); if (app.previousUrl && app.previousUrl.match(/chats/)) { - var text = components.get('chat/input').val(); ajaxify.go('chats', function() { app.openChat(username, uid); }, true); - - $(window).one('action:chat.loaded', function() { - components.get('chat/input').val(text); - }); } else { window.history.go(-1); + app.openChat(username, uid); } + + $(window).one('action:chat.loaded', function() { + components.get('chat/input').val(text); + }); }); $('.recent-chats').on('scroll', function() { @@ -125,8 +126,9 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', }; function onMessagesParsed(html) { - var newMessage = $(html); - newMessage.insertBefore($('.user-typing')); + var newMessage = $(html), + chatContainer = $('.chat-content'); + newMessage.appendTo(chatContainer); newMessage.find('.timeago').timeago(); newMessage.find('img:not(".chat-user-image")').addClass('img-responsive'); Chats.scrollToBottom($('.expanded-chat .chat-content')); @@ -135,11 +137,13 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', Chats.addSocketListeners = function() { socket.on('event:chats.receive', function(data) { var typingNotifEl = $('.user-typing'), - containerEl = $('.expanded-chat ul'); + containerEl = $('.expanded-chat ul'), + lastSpeaker = parseInt(containerEl.find('.chat-message').last().attr('data-uid'), 10); if (Chats.isCurrentChat(data.withUid)) { newMessage = data.self === 0; data.message.self = data.self; + data.message.newSet = lastSpeaker !== data.message.fromuid; Chats.parseMessage(data.message, onMessagesParsed); } else { $('.chats-list li[data-uid="' + data.withUid + '"]').addClass('unread'); @@ -148,22 +152,10 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', }); socket.on('event:chats.userStartTyping', function(withUid) { - var typingNotifEl = $('.user-typing'); - - if (Chats.isCurrentChat(withUid)) { - typingNotifEl.removeClass('hide'); - } - $('.chats-list li[data-uid="' + withUid + '"]').addClass('typing'); }); socket.on('event:chats.userStopTyping', function(withUid) { - var typingNotifEl = $('.user-typing'); - - if (Chats.isCurrentChat(withUid)) { - typingNotifEl.addClass('hide'); - } - $('.chats-list li[data-uid="' + withUid + '"]').removeClass('typing'); }); @@ -173,7 +165,7 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', }; Chats.resizeMainWindow = function() { - var messagesList = $('.expanded-chat ul'); + var messagesList = $('.expanded-chat .chat-content'); if (messagesList.length) { var margin = $('.expanded-chat ul').outerHeight(true) - $('.expanded-chat ul').height(), diff --git a/public/src/client/groups/list.js b/public/src/client/groups/list.js index e70eed5789..c02b9904eb 100644 --- a/public/src/client/groups/list.js +++ b/public/src/client/groups/list.js @@ -17,7 +17,7 @@ define('forum/groups/list', ['forum/infinitescroll'], function(infinitescroll) { // Group creation $('button[data-action="new"]').on('click', function() { - bootbox.prompt('Group Name:', function(name) { + bootbox.prompt('[[group:new-group.group_name]]', function(name) { if (name && name.length) { socket.emit('groups.create', { name: name diff --git a/public/src/client/notifications.js b/public/src/client/notifications.js index 2848704541..4f2dfbf197 100644 --- a/public/src/client/notifications.js +++ b/public/src/client/notifications.js @@ -7,7 +7,7 @@ define('forum/notifications', ['components', 'notifications'], function(componen Notifications.init = function() { var listEl = $('.notifications-list'); - listEl.on('click', 'a', function(e) { + listEl.on('click', '[component="notifications/item/link"]', function(e) { var nid = $(this).parents('[data-nid]').attr('data-nid'); socket.emit('notifications.markRead', nid, function(err) { if (err) { diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 1cdd1cabbc..50a8ebe705 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -116,7 +116,8 @@ define('forum/topic', [ }; function handleBookmark(tid) { - var bookmark = localStorage.getItem('topic:' + tid + ':bookmark'); + // use the user's bookmark data if available, fallback to local if available + var bookmark = ajaxify.data.bookmark || localStorage.getItem('topic:' + tid + ':bookmark'); var postIndex = getPostIndex(); if (postIndex && window.location.search.indexOf('page=') === -1) { @@ -128,7 +129,7 @@ define('forum/topic', [ timeout: 0, type: 'info', clickfn : function() { - navigator.scrollToPost(parseInt(bookmark, 10), true); + navigator.scrollToPost(parseInt(bookmark - 1, 10), true); }, closefn : function() { localStorage.removeItem('topic:' + tid + ':bookmark'); @@ -197,10 +198,28 @@ define('forum/topic', [ } } - var currentBookmark = localStorage.getItem('topic:' + ajaxify.data.tid + ':bookmark'); + var bookmarkKey = 'topic:' + ajaxify.data.tid + ':bookmark'; + var currentBookmark = ajaxify.data.bookmark || localStorage.getItem(bookmarkKey); + if (!currentBookmark || parseInt(postIndex, 10) > parseInt(currentBookmark, 10)) { + if (app.user.uid) { + var payload = { + 'tid': ajaxify.data.tid, + 'index': postIndex + }; + socket.emit('topics.bookmark', payload, function(err) { + if (err) { + console.warn('Error saving bookmark:', err); + } + ajaxify.data.bookmark = postIndex; + }); + } else { + localStorage.setItem(bookmarkKey, postIndex); + } + } + + // removes the bookmark alert when we get to / past the bookmark if (!currentBookmark || parseInt(postIndex, 10) >= parseInt(currentBookmark, 10)) { - localStorage.setItem('topic:' + ajaxify.data.tid + ':bookmark', postIndex); app.removeAlert('bookmark'); } diff --git a/public/src/client/topic/browsing.js b/public/src/client/topic/browsing.js index 0bed58f952..873d95c438 100644 --- a/public/src/client/topic/browsing.js +++ b/public/src/client/topic/browsing.js @@ -4,14 +4,14 @@ /* globals define, app, config, socket, ajaxify */ -define('forum/topic/browsing', ['translator'], function(translator) { +define('forum/topic/browsing', function() { var Browsing = {}; Browsing.onUpdateUsersInRoom = function(data) { if (data && data.room.indexOf('topic_' + ajaxify.data.tid) !== -1) { $('[component="topic/browsing/list"]').parent().toggleClass('hidden', !data.users.length); - for(var i=0; i'); } } diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index bee2c15486..8a21575e85 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -139,10 +139,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator selection = window.getSelection ? window.getSelection() : document.selection.createRange(); if ($(selection.baseNode).parents('[component="post/content"]').length > 0) { - var snippet = selection.toString(); - if (snippet.length) { - selectionText = '> ' + snippet.replace(/\n/g, '\n> ') + '\n\n'; - } + selectionText = selection.toString(); } var username = getUserName(selectionText ? $(selection.baseNode) : button); @@ -177,10 +174,6 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator if(err) { return app.alertError(err.message); } - var quoted = ''; - if(post) { - quoted = '> ' + post.replace(/\n/g, '\n> ') + '\n\n'; - } $(window).trigger('action:composer.addQuote', { tid: tid, @@ -189,7 +182,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator pid: pid, username: username, topicName: topicName, - text: quoted + text: post }); }); } diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 54b8fbe93f..41d178a413 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -80,7 +80,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra if (modal.is(":visible")) { taskbar.updateActive(modal.attr('UUID')); - Chats.scrollToBottom(modal.find('#chat-content')); + Chats.scrollToBottom(modal.find('.chat-content')); } else { module.toggleNew(modal.attr('UUID'), true, true); } @@ -111,7 +111,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra socket.on('event:chats.userStartTyping', function(withUid) { var modal = module.getModal(withUid); - var chatContent = modal.find('#chat-content'); + var chatContent = modal.find('.chat-content'); if (!chatContent.length) { return; } @@ -234,7 +234,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra return; } - chatModal.find('#chat-content').css('height', module.calculateChatListHeight(chatModal)); + chatModal.find('.chat-content').css('height', module.calculateChatListHeight(chatModal)); }); chatModal.draggable({ @@ -312,8 +312,6 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra } }); - chatModal.find('.user-typing .text').translateText('[[modules:chat.user_typing, ' + data.username + ']]'); - taskbar.push('chat', chatModal.attr('UUID'), { title: data.username, touid: data.touid, @@ -375,7 +373,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra chatModal.removeClass('hide'); checkStatus(chatModal); taskbar.updateActive(uuid); - Chats.scrollToBottom(chatModal.find('#chat-content')); + Chats.scrollToBottom(chatModal.find('.chat-content')); module.bringModalToTop(chatModal); module.focusInput(chatModal); socket.emit('modules.chats.markRead', chatModal.attr('touid')); @@ -389,7 +387,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra module.enableMobileBehaviour = function(modalEl) { app.toggleNavbar(false); modalEl.attr('data-mobile', '1'); - var messagesEl = modalEl.find('#chat-content'); + var messagesEl = modalEl.find('.chat-content'); messagesEl.css('height', module.calculateChatListHeight(modalEl)); $(window).on('resize', function() { @@ -404,7 +402,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra module.calculateChatListHeight = function(modalEl) { var totalHeight = modalEl.find('.modal-content').outerHeight() - modalEl.find('.modal-header').outerHeight(), padding = parseInt(modalEl.find('.modal-body').css('padding-top'), 10) + parseInt(modalEl.find('.modal-body').css('padding-bottom'), 10), - contentMargin = parseInt(modalEl.find('#chat-content').css('margin-top'), 10) + parseInt(modalEl.find('#chat-content').css('margin-bottom'), 10), + contentMargin = parseInt(modalEl.find('.chat-content').css('margin-top'), 10) + parseInt(modalEl.find('.chat-content').css('margin-bottom'), 10), sinceHeight = modalEl.find('.since-bar').outerHeight(true), inputGroupHeight = modalEl.find('.input-group').outerHeight(); @@ -428,7 +426,7 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra function loadChatSince(chatModal, since, callback) { socket.emit('modules.chats.get', {touid: chatModal.attr('touid'), since: since}, function(err, messages) { - var chatContent = chatModal.find('#chat-content'); + var chatContent = chatModal.find('.chat-content'); chatContent.find('.chat-message').remove(); module.appendChatMessage(chatModal, messages, callback); }); @@ -459,14 +457,18 @@ define('chat', ['components', 'taskbar', 'string', 'sounds', 'forum/chats', 'tra } module.appendChatMessage = function(chatModal, data, done) { - var chatContent = chatModal.find('#chat-content'), - typingNotif = chatModal.find('.user-typing'); + var chatContent = chatModal.find('.chat-content'), + lastSpeaker = parseInt(chatContent.find('.chat-message').last().attr('data-uid'), 10); + + if (!Array.isArray(data)) { + data.newSet = lastSpeaker !== data.fromuid; + } Chats.parseMessage(data, function(html) { var message = $(html); message.find('img:not(".chat-user-image")').addClass('img-responsive'); message.find('.timeago').timeago(); - message.insertBefore(typingNotif); + message.appendTo(chatContent); Chats.scrollToBottom(chatContent); if (typeof done === 'function') { diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index b6ad55ba40..69b2cf3449 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -147,6 +147,10 @@ }).join(''); }; + helpers.localeToHTML = function(locale) { + return locale.replace('_', '-'); + }; + exports.register = function() { var templates; diff --git a/public/src/modules/settings.js b/public/src/modules/settings.js index d541b35e84..0092f4ca46 100644 --- a/public/src/modules/settings.js +++ b/public/src/modules/settings.js @@ -294,7 +294,6 @@ define('settings', function () { message: "NodeBB failed to save the settings.", timeout: 5000 }); - console.log('[settings] Unable to set settings for hash: ', hash); } else { app.alert({ title: 'Settings Saved', @@ -387,7 +386,6 @@ define('settings', function () { hash: hash }, function (err, values) { if (err) { - console.log('[settings] Unable to load settings for hash: ', hash); if (typeof callback === 'function') { callback(err); } @@ -455,10 +453,9 @@ define('settings', function () { hash: hash }, function (err, values) { if (err) { - console.log('[settings] Unable to load settings for hash: ', hash); return callback(err); } - + // Parse all values. If they are json, return json for(var key in values) { if (values.hasOwnProperty(key)) { @@ -508,8 +505,6 @@ define('settings', function () { }); } }); - } else { - console.log('[settings] Form not found.'); } } }; diff --git a/public/src/modules/sounds.js b/public/src/modules/sounds.js index fa0eade2b5..3314500ce5 100644 --- a/public/src/modules/sounds.js +++ b/public/src/modules/sounds.js @@ -1,5 +1,5 @@ "use strict"; -/* global define, socket, config */ +/* global app, define, socket, config */ define('sounds', ['buzz'], function(buzz) { var Sounds = {}; @@ -17,7 +17,7 @@ define('sounds', ['buzz'], function(buzz) { function loadFiles() { socket.emit('modules.sounds.getSounds', function(err, sounds) { if (err) { - return console.log('[sounds] Could not initialise!'); + return app.alertError('[sounds] Could not initialise!'); } files = sounds; @@ -27,7 +27,7 @@ define('sounds', ['buzz'], function(buzz) { function loadMapping() { socket.emit('modules.sounds.getMapping', function(err, mapping) { if (err) { - return console.log('[sounds] Could not load sound mapping!'); + return app.alertError('[sounds] Could not load sound mapping!'); } eventSoundMapping = mapping; }); @@ -65,7 +65,7 @@ define('sounds', ['buzz'], function(buzz) { if (loadedSounds[fileName]) { loadedSounds[fileName].play(); } else { - console.log('[sounds] Not found:', fileName); + app.alertError('[sounds] Not found: ' + fileName); } } diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 42efe5c529..e2b70220f3 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -9,7 +9,7 @@ var languages = {}, regexes = { - match: /\[\[\w+:[\s\S]+?\]\]/g, + match: /\[\[\w+:.*?\]\]/g, split: /[,][\s]*/, replace: /\]+$/ }; @@ -44,11 +44,14 @@ }; translator.prepareDOM = function() { - // Load the appropriate timeago locale file - if (config.userLang !== 'en_GB' && config.userLang !== 'en_US') { - // Correct NodeBB language codes to timeago codes, if necessary - var languageCode; - switch(config.userLang) { + // Load the appropriate timeago locale file, and correct NodeBB language codes to timeago codes, if necessary + var languageCode; + switch(config.userLang) { + case 'en_GB': + case 'en_US': + languageCode = 'en'; + break; + case 'cs': languageCode = 'cz'; break; @@ -76,49 +79,42 @@ default: languageCode = config.userLang; break; - } + } - $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { - $('.timeago').timeago(); + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').success(function() { + $('.timeago').timeago(); + translator.timeagoShort = $.extend({}, jQuery.timeago.settings.strings); + + // Retrieve the shorthand timeago values as well + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '-short.js').success(function() { + // Switch back to long-form + translator.toggleTimeagoShorthand(); }).fail(function() { + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en-short.js').success(function() { + // Switch back to long-form + translator.toggleTimeagoShorthand(); + }); + }); + }).fail(function() { + $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en-short.js').success(function() { + // Switch back to long-form + translator.toggleTimeagoShorthand(); $.getScript(RELATIVE_PATH + '/vendor/jquery/timeago/locales/jquery.timeago.en.js'); }); + }); - // Add directional code if necessary - translator.translate('[[language:dir]]', function(value) { - if (value) { - $('html').css('direction', value).attr('data-dir', value); - } - }); - } + // Add directional code if necessary + translator.translate('[[language:dir]]', function(value) { + if (value) { + $('html').css('direction', value).attr('data-dir', value); + } + }); }; translator.toggleTimeagoShorthand = function() { - if (!translator.timeagoStrings) { - translator.timeagoStrings = $.extend({}, jQuery.timeago.settings.strings); - jQuery.timeago.settings.strings = { - prefixAgo: null, - prefixFromNow: null, - suffixAgo: "", - suffixFromNow: "", - seconds: "1m", - minute: "1m", - minutes: "%dm", - hour: "1h", - hours: "%dh", - day: "1d", - days: "%dd", - month: "1mo", - months: "%dmo", - year: "1yr", - years: "%dyr", - wordSeparator: " ", - numbers: [] - }; - } else { - jQuery.timeago.settings.strings = $.extend({}, translator.timeagoStrings); - delete translator.timeagoStrings; - } + var tmp = $.extend({}, jQuery.timeago.settings.strings); + jQuery.timeago.settings.strings = $.extend({}, translator.timeagoShort); + translator.timeagoShort = $.extend({}, tmp); }; translator.translate = function (text, language, callback) { @@ -168,6 +164,7 @@ var variables = key.split(regexes.split); var parsedKey = key.replace('[[', '').replace(']]', '').split(':'); + parsedKey = [parsedKey[0]].concat(parsedKey.slice(1).join(':')); if (!(parsedKey[0] && parsedKey[1])) { return callback(data); } @@ -301,7 +298,9 @@ // Expose a global `translator` object for backwards compatibility window.translator = { translate: function() { - console.warn('[translator] Global invocation of the translator is now deprecated, please `require` the module instead.'); + if (typeof console !== 'undefined' && console.warn) { + console.warn('[translator] Global invocation of the translator is now deprecated, please `require` the module instead.'); + } _translator.translate.apply(_translator, arguments); } } diff --git a/public/src/variables.js b/public/src/variables.js index 16ad223073..1a4b4e244c 100644 --- a/public/src/variables.js +++ b/public/src/variables.js @@ -7,14 +7,14 @@ ajaxify.variables = {}; ajaxify.variables.set = function(key, value) { - if (console && console.warn) { + if (typeof console !== 'undefined' && console.warn) { console.warn('[deprecated] variables.set is deprecated, please use ajaxify.data, key=' + key); } parsedVariables[key] = value; }; ajaxify.variables.get = function(key) { - if (console && console.warn) { + if (typeof console !== 'undefined' && console.warn) { console.warn('[deprecated] variables.get is deprecated, please use ajaxify.data, key=' + key); } return parsedVariables[key]; diff --git a/public/vendor/bootbox/bootbox.min.js b/public/vendor/bootbox/bootbox.min.js index bd1d368c0b..1ce83d9ddd 100644 --- a/public/vendor/bootbox/bootbox.min.js +++ b/public/vendor/bootbox/bootbox.min.js @@ -3,4 +3,4 @@ * * http://bootboxjs.com/license.txt */ -window.bootbox=window.bootbox||function a(b,c){"use strict";function d(a){var b=s[q.locale];return b?b[a]:s.en[a]}function e(a,c,d){a.preventDefault();var e=b.isFunction(d)&&d(a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},q,a),a.buttons||(a.buttons={}),a.backdrop=a.backdrop?"static":!1,c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c){return n(j(m.apply(null,a),b,c),a)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(){return{buttons:l.apply(null,arguments)}}function n(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var o={dialog:"",header:"",footer:"",closeButton:"",form:"
    ",inputs:{text:""}},p=b("body"),q={locale:"en",backdrop:!0,animate:!0,className:null,closeButton:!0,show:!0},r={};r.alert=function(){var a;if(a=k(["ok"],arguments,["message","callback"]),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback():!0},r.dialog(a)},r.confirm=function(){var a;if(a=k(["cancel","confirm"],arguments,["message","callback"]),a.buttons.cancel.callback=a.onEscape=function(){return a.callback(!1)},a.buttons.confirm.callback=function(){return a.callback(!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return r.dialog(a)},r.prompt=function(){var a,d,e,f,g,h;if(f=b(o.form),d={buttons:l("cancel","confirm"),value:""},a=n(j(d,arguments,["title","callback"]),["cancel","confirm"]),h=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback(null)},a.buttons.confirm.callback=function(){return a.callback(g.val())},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");return g=b(o.inputs.text),g.val(a.value),f.append(g),f.on("submit",function(a){a.preventDefault(),e.find(".btn-primary").click()}),e=r.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){g.focus()}),h===!0&&e.modal("show"),e},r.dialog=function(a){a=h(a);var c=b(o.dialog),d=c.find(".modal-body"),f=a.buttons,i="",j={onEscape:a.onEscape};if(g(f,function(a,b){i+="",j[a]=b.callback}),d.find(".bootbox-body").html(a.message),a.animate===!0&&c.addClass("fade"),a.className&&c.addClass(a.className),a.title&&d.before(o.header),a.closeButton){var k=b(o.closeButton);a.title?c.find(".modal-header").prepend(k):k.css("margin-top","-10px").prependTo(d)}return a.title&&c.find(".modal-title").html(a.title),i.length&&(d.after(o.footer),c.find(".modal-footer").html(i)),c.on("hidden.bs.modal",function(a){a.target===this&&c.remove()}),c.on("shown.bs.modal",function(){c.find(".btn-primary:first").focus()}),c.on("escape.close.bb",function(a){j.onEscape&&e(a,c,j.onEscape)}),c.on("click",".modal-footer button",function(a){var d=b(this).data("bb-handler");e(a,c,j[d])}),c.on("click",".bootbox-close-button",function(a){e(a,c,j.onEscape)}),c.on("keyup",function(a){27===a.which&&c.trigger("escape.close.bb")}),p.append(c),c.modal({backdrop:a.backdrop,keyboard:!1,show:!1}),a.show&&c.modal("show"),c},r.setDefaults=function(a){b.extend(q,a)},r.hideAll=function(){b(".bootbox").modal("hide")};var s={br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},en:{OK:"OK",CANCEL:"Cancel",CONFIRM:"OK"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return r.init=function(c){window.bootbox=a(c||b)},r}(window.jQuery); \ No newline at end of file +window.bootbox=window.bootbox||function a(b,c){"use strict";function d(a){var b=s[q.locale];return b?b[a]:s.en[a]}function e(a,c,d){a.preventDefault();var e=b.isFunction(d)&&d(a)===!1;e||c.modal("hide")}function f(a){var b,c=0;for(b in a)c++;return c}function g(a,c){var d=0;b.each(a,function(a,b){c(a,b,d++)})}function h(a){var c,d;if("object"!=typeof a)throw new Error("Please supply an object of options");if(!a.message)throw new Error("Please specify a message");return a=b.extend({},q,a),a.buttons||(a.buttons={}),a.backdrop=a.backdrop?"static":!1,c=a.buttons,d=f(c),g(c,function(a,e,f){if(b.isFunction(e)&&(e=c[a]={callback:e}),"object"!==b.type(e))throw new Error("button with key "+a+" must be an object");e.label||(e.label=a),e.className||(e.className=2>=d&&f===d-1?"btn-primary":"btn-default")}),a}function i(a,b){var c=a.length,d={};if(1>c||c>2)throw new Error("Invalid argument length");return 2===c||"string"==typeof a[0]?(d[b[0]]=a[0],d[b[1]]=a[1]):d=a[0],d}function j(a,c,d){return b.extend(!0,{},a,i(c,d))}function k(a,b,c){return n(j(m.apply(null,a),b,c),a)}function l(){for(var a={},b=0,c=arguments.length;c>b;b++){var e=arguments[b],f=e.toLowerCase(),g=e.toUpperCase();a[f]={label:d(g)}}return a}function m(){return{buttons:l.apply(null,arguments)}}function n(a,b){var d={};return g(b,function(a,b){d[b]=!0}),g(a.buttons,function(a){if(d[a]===c)throw new Error("button key "+a+" is not allowed (options are "+b.join("\n")+")")}),a}var o={dialog:"",header:"",footer:"",closeButton:"",form:"
    ",inputs:{text:""}},p=b("body"),q={locale:"en",backdrop:!0,animate:!0,className:null,closeButton:!0,show:!0},r={};r.alert=function(){var a;if(a=k(["ok"],arguments,["message","callback"]),a.callback&&!b.isFunction(a.callback))throw new Error("alert requires callback property to be a function when provided");return a.buttons.ok.callback=a.onEscape=function(){return b.isFunction(a.callback)?a.callback():!0},r.dialog(a)},r.confirm=function(){var a;if(a=k(["cancel","confirm"],arguments,["message","callback"]),a.buttons.cancel.callback=a.onEscape=function(){return a.callback(!1)},a.buttons.confirm.callback=function(){return a.callback(!0)},!b.isFunction(a.callback))throw new Error("confirm requires a callback");return r.dialog(a)},r.prompt=function(){var a,d,e,f,g,h;if(f=b(o.form),d={buttons:l("cancel","confirm"),value:""},a=n(j(d,arguments,["title","callback"]),["cancel","confirm"]),h=a.show===c?!0:a.show,a.message=f,a.buttons.cancel.callback=a.onEscape=function(){return a.callback(null)},a.buttons.confirm.callback=function(){return a.callback(g.val())},a.show=!1,!a.title)throw new Error("prompt requires a title");if(!b.isFunction(a.callback))throw new Error("prompt requires a callback");return g=b(o.inputs.text),g.val(a.value),f.append(g),f.on("submit",function(a){a.preventDefault(),e.find(".btn-primary").click()}),e=r.dialog(a),e.off("shown.bs.modal"),e.on("shown.bs.modal",function(){g.focus()}),h===!0&&e.modal("show"),e},r.dialog=function(a){a=h(a);var c=b(o.dialog),d=c.find(".modal-body"),f=a.buttons,i="",j={onEscape:a.onEscape};if(g(f,function(a,b){i+="",j[a]=b.callback}),d.find(".bootbox-body").html(a.message),a.animate===!0&&c.addClass("fade"),a.className&&c.addClass(a.className),a.title&&d.before(o.header),a.closeButton){var k=b(o.closeButton);a.title?c.find(".modal-header").prepend(k):k.css("margin-top","-10px").prependTo(d)}return a.title&&c.find(".modal-title").html(a.title),i.length&&(d.after(o.footer),c.find(".modal-footer").html(i)),c.on("hidden.bs.modal",function(a){a.target===this&&c.remove()}),c.on("shown.bs.modal",function(){c.find(".btn-primary:first").focus()}),c.on("escape.close.bb",function(a){j.onEscape&&e(a,c,j.onEscape)}),c.on("click",".modal-footer button",function(a){var d=b(this).data("bb-handler");e(a,c,j[d])}),c.on("click",".bootbox-close-button",function(a){e(a,c,j.onEscape)}),c.on("keyup",function(a){27===a.which&&c.trigger("escape.close.bb")}),p.append(c),c.modal({backdrop:a.backdrop,keyboard:!1,show:!1}),a.show&&c.modal("show"),c},r.setDefaults=function(a){b.extend(q,a)},r.hideAll=function(){b(".bootbox").modal("hide")};var s={br:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Sim"},da:{OK:"OK",CANCEL:"Annuller",CONFIRM:"Accepter"},de:{OK:"OK",CANCEL:"Abbrechen",CONFIRM:"Akzeptieren"},en:{OK:"[[modules:bootbox.ok]]",CANCEL:"[[modules:bootbox.cancel]]",CONFIRM:"[[modules:bootbox.confirm]]"},es:{OK:"OK",CANCEL:"Cancelar",CONFIRM:"Aceptar"},fi:{OK:"OK",CANCEL:"Peruuta",CONFIRM:"OK"},fr:{OK:"OK",CANCEL:"Annuler",CONFIRM:"D'accord"},it:{OK:"OK",CANCEL:"Annulla",CONFIRM:"Conferma"},nl:{OK:"OK",CANCEL:"Annuleren",CONFIRM:"Accepteren"},pl:{OK:"OK",CANCEL:"Anuluj",CONFIRM:"Potwierdź"},ru:{OK:"OK",CANCEL:"Отмена",CONFIRM:"Применить"},zh_CN:{OK:"OK",CANCEL:"取消",CONFIRM:"确认"},zh_TW:{OK:"OK",CANCEL:"取消",CONFIRM:"確認"}};return r.init=function(c){window.bootbox=a(c||b)},r}(window.jQuery); \ No newline at end of file diff --git a/public/vendor/jquery/timeago/jquery.timeago.js b/public/vendor/jquery/timeago/jquery.timeago.js new file mode 100644 index 0000000000..15805a6193 --- /dev/null +++ b/public/vendor/jquery/timeago/jquery.timeago.js @@ -0,0 +1,221 @@ +/** + * Timeago is a jQuery plugin that makes it easy to support automatically + * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). + * + * @name timeago + * @version 1.4.1 + * @requires jQuery v1.2.3+ + * @author Ryan McGeary + * @license MIT License - http://www.opensource.org/licenses/mit-license.php + * + * For usage and examples, visit: + * http://timeago.yarp.com/ + * + * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) + */ + +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + $.timeago = function(timestamp) { + if (timestamp instanceof Date) { + return inWords(timestamp); + } else if (typeof timestamp === "string") { + return inWords($.timeago.parse(timestamp)); + } else if (typeof timestamp === "number") { + return inWords(new Date(timestamp)); + } else { + return inWords($.timeago.datetime(timestamp)); + } + }; + var $t = $.timeago; + + $.extend($.timeago, { + settings: { + refreshMillis: 60000, + allowPast: true, + allowFuture: false, + localeTitle: false, + cutoff: 0, + strings: { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "ago", + suffixFromNow: "from now", + inPast: 'any moment now', + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years", + wordSeparator: " ", + numbers: [] + } + }, + + inWords: function(distanceMillis) { + if(!this.settings.allowPast && ! this.settings.allowFuture) { + throw 'timeago allowPast and allowFuture settings can not both be set to false.'; + } + + var $l = this.settings.strings; + var prefix = $l.prefixAgo; + var suffix = $l.suffixAgo; + if (this.settings.allowFuture) { + if (distanceMillis < 0) { + prefix = $l.prefixFromNow; + suffix = $l.suffixFromNow; + } + } + + if(!this.settings.allowPast && distanceMillis >= 0) { + return this.settings.strings.inPast; + } + + var seconds = Math.abs(distanceMillis) / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + function substitute(stringOrFunction, number) { + var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction; + var value = ($l.numbers && $l.numbers[number]) || number; + return string.replace(/%d/i, value); + } + + var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) || + seconds < 90 && substitute($l.minute, 1) || + minutes < 45 && substitute($l.minutes, Math.round(minutes)) || + minutes < 90 && substitute($l.hour, 1) || + hours < 24 && substitute($l.hours, Math.round(hours)) || + hours < 42 && substitute($l.day, 1) || + days < 30 && substitute($l.days, Math.round(days)) || + days < 45 && substitute($l.month, 1) || + days < 365 && substitute($l.months, Math.round(days / 30)) || + years < 1.5 && substitute($l.year, 1) || + substitute($l.years, Math.round(years)); + + var separator = $l.wordSeparator || ""; + if ($l.wordSeparator === undefined) { separator = " "; } + return $.trim([prefix, words, suffix].join(separator)); + }, + + parse: function(iso8601) { + var s = $.trim(iso8601); + s = s.replace(/\.\d+/,""); // remove milliseconds + s = s.replace(/-/,"/").replace(/-/,"/"); + s = s.replace(/T/," ").replace(/Z/," UTC"); + s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400 + s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900 + return new Date(s); + }, + datetime: function(elem) { + var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title"); + return $t.parse(iso8601); + }, + isTime: function(elem) { + // jQuery's `is()` doesn't play well with HTML5 in IE + return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time"); + } + }); + + // functions that can be called via $(el).timeago('action') + // init is default when no action is given + // functions are called with context of a single element + var functions = { + init: function(){ + var refresh_el = $.proxy(refresh, this); + refresh_el(); + var $s = $t.settings; + if ($s.refreshMillis > 0) { + this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis); + } + }, + update: function(time){ + var parsedTime = $t.parse(time); + $(this).data('timeago', { datetime: parsedTime }); + if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString()); + refresh.apply(this); + }, + updateFromDOM: function(){ + $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) }); + refresh.apply(this); + }, + dispose: function () { + if (this._timeagoInterval) { + window.clearInterval(this._timeagoInterval); + this._timeagoInterval = null; + } + } + }; + + $.fn.timeago = function(action, options) { + var fn = action ? functions[action] : functions.init; + if(!fn){ + throw new Error("Unknown function name '"+ action +"' for timeago"); + } + // each over objects here and call the requested function + this.each(function(){ + fn.call(this, options); + }); + return this; + }; + + function refresh() { + //check if it's still visible + if(!$.contains(document.documentElement,this)){ + //stop if it has been removed + $(this).timeago("dispose"); + return this; + } + + var data = prepareData(this); + var $s = $t.settings; + + if (!isNaN(data.datetime)) { + if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) { + $(this).text(inWords(data.datetime)); + } + } + return this; + } + + function prepareData(element) { + element = $(element); + if (!element.data("timeago")) { + element.data("timeago", { datetime: $t.datetime(element) }); + var text = $.trim(element.text()); + if ($t.settings.localeTitle) { + element.attr("title", element.data('timeago').datetime.toLocaleString()); + } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) { + element.attr("title", text); + } + } + return element.data("timeago"); + } + + function inWords(date) { + return $t.inWords(distance(date)); + } + + function distance(date) { + return (new Date().getTime() - date.getTime()); + } + + // fix for IE6 suckage + document.createElement("abbr"); + document.createElement("time"); +})); diff --git a/public/vendor/jquery/timeago/jquery.timeago.min.js b/public/vendor/jquery/timeago/jquery.timeago.min.js deleted file mode 100644 index a3567b0148..0000000000 --- a/public/vendor/jquery/timeago/jquery.timeago.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Timeago is a jQuery plugin that makes it easy to support automatically - * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago"). - * - * @name timeago - * @version 1.3.1 - * @requires jQuery v1.2.3+ - * @author Ryan McGeary - * @license MIT License - http://www.opensource.org/licenses/mit-license.php - * - * For usage and examples, visit: - * http://timeago.yarp.com/ - * - * Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) - */ -!function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(jQuery)}}(function($){$.timeago=function(timestamp){if(timestamp instanceof Date){return inWords(timestamp)}else if(typeof timestamp==="string"){return inWords($.timeago.parse(timestamp))}else if(typeof timestamp==="number"){return inWords(new Date(timestamp))}else{return inWords($.timeago.datetime(timestamp))}};var $t=$.timeago;$.extend($.timeago,{settings:{refreshMillis:6e4,allowFuture:false,localeTitle:false,cutoff:0,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",wordSeparator:" ",numbers:[]}},inWords:function(distanceMillis){var $l=this.settings.strings;var prefix=$l.prefixAgo;var suffix=$l.suffixAgo;if(this.settings.allowFuture){if(distanceMillis<0){prefix=$l.prefixFromNow;suffix=$l.suffixFromNow}}var seconds=Math.abs(distanceMillis)/1e3;var minutes=seconds/60;var hours=minutes/60;var days=hours/24;var years=days/365;function substitute(stringOrFunction,number){var string=$.isFunction(stringOrFunction)?stringOrFunction(number,distanceMillis):stringOrFunction;var value=$l.numbers&&$l.numbers[number]||number;return string.replace(/%d/i,value)}var words=seconds<45&&substitute($l.seconds,Math.round(seconds))||seconds<90&&substitute($l.minute,1)||minutes<45&&substitute($l.minutes,Math.round(minutes))||minutes<90&&substitute($l.hour,1)||hours<24&&substitute($l.hours,Math.round(hours))||hours<42&&substitute($l.day,1)||days<30&&substitute($l.days,Math.round(days))||days<45&&substitute($l.month,1)||days<365&&substitute($l.months,Math.round(days/30))||years<1.5&&substitute($l.year,1)||substitute($l.years,Math.round(years));var separator=$l.wordSeparator||"";if($l.wordSeparator===undefined){separator=" "}return $.trim([prefix,words,suffix].join(separator))},parse:function(iso8601){var s=$.trim(iso8601);s=s.replace(/\.\d+/,"");s=s.replace(/-/,"/").replace(/-/,"/");s=s.replace(/T/," ").replace(/Z/," UTC");s=s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2");s=s.replace(/([\+\-]\d\d)$/," $100");return new Date(s)},datetime:function(elem){var iso8601=$t.isTime(elem)?$(elem).attr("datetime"):$(elem).attr("title");return $t.parse(iso8601)},isTime:function(elem){return $(elem).get(0).tagName.toLowerCase()==="time"}});var functions={init:function(){var refresh_el=$.proxy(refresh,this);refresh_el();var $s=$t.settings;if($s.refreshMillis>0){this._timeagoInterval=setInterval(refresh_el,$s.refreshMillis)}},update:function(time){var parsedTime=$t.parse(time);$(this).data("timeago",{datetime:parsedTime});if($t.settings.localeTitle)$(this).attr("title",parsedTime.toLocaleString());refresh.apply(this)},updateFromDOM:function(){$(this).data("timeago",{datetime:$t.parse($t.isTime(this)?$(this).attr("datetime"):$(this).attr("title"))});refresh.apply(this)},dispose:function(){if(this._timeagoInterval){window.clearInterval(this._timeagoInterval);this._timeagoInterval=null}}};$.fn.timeago=function(action,options){var fn=action?functions[action]:functions.init;if(!fn){throw new Error("Unknown function name '"+action+"' for timeago")}this.each(function(){fn.call(this,options)});return this};function refresh(){var data=prepareData(this);var $s=$t.settings;if(!isNaN(data.datetime)){if($s.cutoff==0||distance(data.datetime)<$s.cutoff){$(this).text(inWords(data.datetime))}}return this}function prepareData(element){element=$(element);if(!element.data("timeago")){element.data("timeago",{datetime:$t.datetime(element)});var text=$.trim(element.text());if($t.settings.localeTitle){element.attr("title",element.data("timeago").datetime.toLocaleString())}else if(text.length>0&&!($t.isTime(element)&&element.attr("title"))){element.attr("title",text)}}return element.data("timeago")}function inWords(date){return $t.inWords(distance(date))}function distance(date){return(new Date).getTime()-date.getTime()}document.createElement("abbr");document.createElement("time")}); \ No newline at end of file diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.cs.js b/public/vendor/jquery/timeago/locales/jquery.timeago.cs.js new file mode 100644 index 0000000000..0ce346963b --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.cs.js @@ -0,0 +1,24 @@ +// Czech +(function() { + function f(n, d, a) { + return a[d>=0 ? 0 : a.length==2 || n<5 ? 1 : 2]; + } + + jQuery.timeago.settings.strings = { + prefixAgo: 'před', + prefixFromNow: 'za', + suffixAgo: null, + suffixFromNow: null, + seconds: function(n, d) {return f(n, d, ['méně než minutou', 'méně než minutu']);}, + minute: function(n, d) {return f(n, d, ['minutou', 'minutu']);}, + minutes: function(n, d) {return f(n, d, ['%d minutami', '%d minuty', '%d minut']);}, + hour: function(n, d) {return f(n, d, ['hodinou', 'hodinu']);}, + hours: function(n, d) {return f(n, d, ['%d hodinami', '%d hodiny', '%d hodin']);}, + day: function(n, d) {return f(n, d, ['%d dnem', '%d den']);}, + days: function(n, d) {return f(n, d, ['%d dny', '%d dny', '%d dní']);}, + month: function(n, d) {return f(n, d, ['%d měsícem', '%d měsíc']);}, + months: function(n, d) {return f(n, d, ['%d měsíci', '%d měsíce', '%d měsíců']);}, + year: function(n, d) {return f(n, d, ['%d rokem', '%d rok']);}, + years: function(n, d) {return f(n, d, ['%d lety', '%d roky', '%d let']);} + }; +})(); diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js b/public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js new file mode 100644 index 0000000000..65d85c7154 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.es-short.js @@ -0,0 +1,20 @@ +// Spanish shortened +jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "", + suffixFromNow: "", + seconds: "1m", + minute: "1m", + minutes: "%dm", + hour: "1h", + hours: "%dh", + day: "1d", + days: "%dd", + month: "1me", + months: "%dme", + year: "1a", + years: "%da", + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.et.js b/public/vendor/jquery/timeago/locales/jquery.timeago.et.js index 7d17eb5c61..ca19648b40 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.et.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.et.js @@ -4,15 +4,15 @@ jQuery.timeago.settings.strings = { prefixFromNow: null, suffixAgo: "tagasi", suffixFromNow: "pärast", - seconds: function(n, d) { return d < 0 ? "vähem kui minuti aja" : "vähem kui minut aega" }, - minute: function(n, d) { return d < 0 ? "umbes minuti aja" : "umbes minut aega" }, - minutes: function(n, d) { return d < 0 ? "%d minuti" : "%d minutit" }, - hour: function(n, d) { return d < 0 ? "umbes tunni aja" : "umbes tund aega" }, - hours: function(n, d) { return d < 0 ? "%d tunni" : "%d tundi" }, - day: function(n, d) { return d < 0 ? "umbes päeva" : "umbes päev" }, - days: function(n, d) { return d < 0 ? "%d päeva" : "%d päeva" }, - month: function(n, d) { return d < 0 ? "umbes kuu aja" : "umbes kuu aega" }, - months: function(n, d) { return d < 0 ? "%d kuu" : "%d kuud" }, - year: function(n, d) { return d < 0 ? "umbes aasta aja" : "umbes aasta aega" }, - years: function(n, d) { return d < 0 ? "%d aasta" : "%d aastat" } + seconds: function(n, d) { return d < 0 ? "vähem kui minuti aja" : "vähem kui minut aega"; }, + minute: function(n, d) { return d < 0 ? "umbes minuti aja" : "umbes minut aega"; }, + minutes: function(n, d) { return d < 0 ? "%d minuti" : "%d minutit"; }, + hour: function(n, d) { return d < 0 ? "umbes tunni aja" : "umbes tund aega"; }, + hours: function(n, d) { return d < 0 ? "%d tunni" : "%d tundi"; }, + day: function(n, d) { return d < 0 ? "umbes päeva" : "umbes päev"; }, + days: function(n, d) { return d < 0 ? "%d päeva" : "%d päeva"; }, + month: function(n, d) { return d < 0 ? "umbes kuu aja" : "umbes kuu aega"; }, + months: function(n, d) { return d < 0 ? "%d kuu" : "%d kuud"; }, + year: function(n, d) { return d < 0 ? "umbes aasta aja" : "umbes aasta aega"; }, + years: function(n, d) { return d < 0 ? "%d aasta" : "%d aastat"; } }; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js b/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js index 2bfbf53ccd..36bdb449f3 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.fa.js @@ -1,4 +1,4 @@ - + // Persian // Use DIR attribute for RTL text in Persian Language for ABBR tag . // By MB.seifollahi@gmail.com diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.he.js b/public/vendor/jquery/timeago/locales/jquery.timeago.he.js index 9d5b6c6b00..b9d89e1f24 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.he.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.he.js @@ -1,18 +1,16 @@ // Hebrew jQuery.timeago.settings.strings = { prefixAgo: "לפני", - prefixFromNow: "מעכשיו", - suffixAgo: "", - suffixFromNow: "", + prefixFromNow: "עוד", seconds: "פחות מדקה", minute: "דקה", minutes: "%d דקות", hour: "שעה", - hours: "%d שעות", + hours: function(number){return (number==2) ? "שעתיים" : "%d שעות";}, day: "יום", - days: "%d ימים", + days: function(number){return (number==2) ? "יומיים" : "%d ימים";}, month: "חודש", - months: "%d חודשים", + months: function(number){return (number==2) ? "חודשיים" : "%d חודשים";}, year: "שנה", - years: "%d שנים" -}; \ No newline at end of file + years: function(number){return (number==2) ? "שנתיים" : "%d שנים";} +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js b/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js index a192b97bf6..95f4f94b31 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.ko.js @@ -1,17 +1,20 @@ // Korean jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, suffixAgo: "전", suffixFromNow: "후", - seconds: "1분 이내", - minute: "1분", + seconds: "1분", + minute: "약 1분", minutes: "%d분", - hour: "1시간", - hours: "%d시간", + hour: "약 1시간", + hours: "약 %d시간", day: "하루", days: "%d일", - month: "한 달", - months: "%d달", - year: "1년", + month: "약 1개월", + months: "%d개월", + year: "약 1년", years: "%d년", - wordSeparator: " " -}; \ No newline at end of file + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.ky.js b/public/vendor/jquery/timeago/locales/jquery.timeago.ky.js new file mode 100644 index 0000000000..8663fe0b23 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.ky.js @@ -0,0 +1,34 @@ +// Russian +(function() { + function numpf(n, f, s, t) { + // f - 1, 21, 31, ... + // s - 2-4, 22-24, 32-34 ... + // t - 5-20, 25-30, ... + var n10 = n % 10; + if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) { + return f; + } else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) { + return s; + } else { + return t; + } + } + + jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: "через", + suffixAgo: "мурун", + suffixFromNow: null, + seconds: "1 минуттан аз", + minute: "минута", + minutes: function(value) { return numpf(value, "%d минута", "%d минута", "%d минут"); }, + hour: "саат", + hours: function(value) { return numpf(value, "%d саат", "%d саат", "%d саат"); }, + day: "күн", + days: function(value) { return numpf(value, "%d күн", "%d күн", "%d күн"); }, + month: "ай", + months: function(value) { return numpf(value, "%d ай", "%d ай", "%d ай"); }, + year: "жыл", + years: function(value) { return numpf(value, "%d жыл", "%d жыл", "%d жыл"); } + }; +})(); \ No newline at end of file diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js b/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js index 9afdd46268..8d60a30c88 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.mk.js @@ -16,5 +16,5 @@ months: "%d месеци", year: "%d година", years: "%d години" - } + }; })(); diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js b/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js index cd68438cca..74d3dc867f 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.nl.js @@ -1,9 +1,9 @@ // Dutch jQuery.timeago.settings.strings = { prefixAgo: null, - prefixFromNow: "", + prefixFromNow: "over", suffixAgo: "geleden", - suffixFromNow: "van nu", + suffixFromNow: null, seconds: "minder dan een minuut", minute: "ongeveer een minuut", minutes: "%d minuten", diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js b/public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js new file mode 100644 index 0000000000..8f63db43d1 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.pt-br-short.js @@ -0,0 +1,20 @@ +// Portuguese Brasil shortened +jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "", + suffixFromNow: "", + seconds: "1m", + minute: "1m", + minutes: "%dm", + hour: "1h", + hours: "%dh", + day: "1d", + days: "%dd", + month: "1M", + months: "%dM", + year: "1a", + years: "%da", + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js b/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js index 883b548950..2cee429902 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.ro.js @@ -1,5 +1,5 @@ // Romanian -$.timeago.settings.strings = { +jQuery.timeago.settings.strings = { prefixAgo: "acum", prefixFromNow: "in timp de", suffixAgo: "", @@ -15,4 +15,4 @@ $.timeago.settings.strings = { months: "%d luni", year: "un an", years: "%d ani" -}; \ No newline at end of file +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js b/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js index 1fc16135e6..0809c9101d 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.rs.js @@ -39,7 +39,7 @@ months: function (value) { return numpf(value, "%d mesec", "%d meseca", "%d meseci"); }, - year: "pre godinu dana", + year: "godinu dana", years: function (value) { return numpf(value, "%d godinu", "%d godine", "%d godina"); }, diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.rw.js b/public/vendor/jquery/timeago/locales/jquery.timeago.rw.js new file mode 100644 index 0000000000..18537672eb --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.rw.js @@ -0,0 +1,20 @@ +// Kinyarwanda +jQuery.timeago.settings.strings = { + prefixAgo: "hashize", + prefixFromNow: "mu", + suffixAgo: null, + suffixFromNow: null, + seconds: "amasegonda macye", + minute: "umunota", + minutes: "iminota %d", + hour: "isaha", + hours: "amasaha %d", + day: "umunsi", + days: "iminsi %d", + month: "ukwezi", + months: "amezi %d", + year: "umwaka", + years: "imyaka %d", + wordSeparator: " ", + numbers: [] +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.si.js b/public/vendor/jquery/timeago/locales/jquery.timeago.si.js new file mode 100644 index 0000000000..468bcd7ca9 --- /dev/null +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.si.js @@ -0,0 +1,18 @@ +// Sinhalese (SI) +jQuery.timeago.settings.strings = { + prefixAgo: null, + prefixFromNow: null, + suffixAgo: "පෙර", + suffixFromNow: "පසුව", + seconds: "තත්පර කිහිපයකට", + minute: "මිනිත්තුවකට පමණ", + minutes: "මිනිත්තු %d කට", + hour: "පැයක් පමණ ", + hours: "පැය %d කට පමණ", + day: "දවසක ට", + days: "දවස් %d කට ", + month: "මාසයක් පමණ", + months: "මාස %d කට", + year: "වසරක් පමණ", + years: "වසරක් %d කට පමණ" +}; \ No newline at end of file diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js b/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js index e546c0d502..57d4f6020c 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.sl.js @@ -1,42 +1,38 @@ // Slovenian with support for dual (function () { var numpf; - numpf = function (n, d, m) { - if (n == 2) { - return d; - } else { - return m; - } + numpf = function (n, a) { + return a[n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0]; }; jQuery.timeago.settings.strings = { - prefixAgo: "pred", + prefixAgo: null, prefixFromNow: "čez", - suffixAgo: null, + suffixAgo: "nazaj", suffixFromNow: null, second: "sekundo", seconds: function (value) { - return numpf(value, "%d sekundama", "%d sekundami"); + return numpf(value, ["%d sekund", "%d sekundo", "%d sekundi", "%d sekunde"]); }, minute: "minuto", minutes: function (value) { - return numpf(value, "%d minutama", "%d minutami"); + return numpf(value, ["%d minut", "%d minuto", "%d minuti", "%d minute"]); }, - hour: "uro", + hour: "eno uro", hours: function (value) { - return numpf(value, "%d urama", "%d urami"); + return numpf(value, ["%d ur", "%d uro", "%d uri", "%d ure"]); }, - day: "dnevom", + day: "en dan", days: function (value) { - return numpf(value, "%d dnevi", "%d dnevi"); + return numpf(value, ["%d dni", "%d dan", "%d dneva", "%d dni"]); }, - month: "enim mescem", + month: "en mesec", months: function (value) { - return numpf(value, "%d mesecema", "%d meseci"); + return numpf(value, ["%d mescov", "%d mesec", "%d mesca", "%d mesce"]); }, - year: "enim letom", + year: "eno leto", years: function (value) { - return numpf(value, "%d letoma", "%d leti"); + return numpf(value, ["%d let", "%d leto", "%d leti", "%d leta"]); }, wordSeparator: " " }; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js b/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js index f3e3a67c84..160190d026 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.tr.js @@ -1,5 +1,5 @@ // Turkish -jQuery.extend($.timeago.settings.strings, { +jQuery.timeago.settings.strings = { suffixAgo: 'önce', suffixFromNow: null, seconds: '1 dakikadan', @@ -13,4 +13,4 @@ jQuery.extend($.timeago.settings.strings, { months: '%d ay', year: '1 yıl', years: '%d yıl' -}); \ No newline at end of file +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js b/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js index 380f18dc04..d6a0a7fd20 100755 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.uz.js @@ -6,14 +6,14 @@ jQuery.timeago.settings.strings = { suffixFromNow: null, seconds: "bir necha soniya", minute: "1 daqiqa", - minutes: function(value) { return "%d daqiqa" }, + minutes: function(value) { return "%d daqiqa"; }, hour: "1 soat", - hours: function(value) { return "%d soat" }, + hours: function(value) { return "%d soat"; }, day: "1 kun", - days: function(value) { return "%d kun" }, + days: function(value) { return "%d kun"; }, month: "1 oy", - months: function(value) { return "%d oy" }, + months: function(value) { return "%d oy"; }, year: "1 yil", - years: function(value) { return "%d yil" }, + years: function(value) { return "%d yil"; }, wordSeparator: " " }; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js index f39417ef29..f7b979798a 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-CN.js @@ -4,17 +4,17 @@ jQuery.timeago.settings.strings = { prefixFromNow: "从现在开始", suffixAgo: "之前", suffixFromNow: null, - seconds: "不到 1 分钟", - minute: "大约 1 分钟", - minutes: "%d 分钟", - hour: "大约 1 小时", - hours: "大约 %d 小时", - day: "1 天", - days: "%d 天", - month: "大约 1 个月", - months: "%d 月", - year: "大约 1 年", - years: "%d 年", + seconds: "不到1分钟", + minute: "大约1分钟", + minutes: "%d分钟", + hour: "大约1小时", + hours: "大约%d小时", + day: "1天", + days: "%d天", + month: "大约1个月", + months: "%d月", + year: "大约1年", + years: "%d年", numbers: [], wordSeparator: "" -}; \ No newline at end of file +}; diff --git a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js index c6f8a1b1e6..52633900f3 100644 --- a/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js +++ b/public/vendor/jquery/timeago/locales/jquery.timeago.zh-TW.js @@ -4,17 +4,17 @@ jQuery.timeago.settings.strings = { prefixFromNow: "從現在開始", suffixAgo: "之前", suffixFromNow: null, - seconds: "不到 1 分鐘", - minute: "大約 1 分鐘", - minutes: "%d 分鐘", - hour: "大約 1 小時", - hours: "%d 小時", - day: "大約 1 天", - days: "%d 天", - month: "大約 1 個月", - months: "%d 個月", - year: "大約 1 年", - years: "%d 年", + seconds: "不到1分鐘", + minute: "大約1分鐘", + minutes: "%d分鐘", + hour: "大約1小時", + hours: "%d小時", + day: "大約1天", + days: "%d天", + month: "大約1個月", + months: "%d個月", + year: "大約1年", + years: "%d年", numbers: [], wordSeparator: "" }; diff --git a/public/vendor/mdl/mdl.css b/public/vendor/mdl/mdl.css new file mode 100644 index 0000000000..c037532647 --- /dev/null +++ b/public/vendor/mdl/mdl.css @@ -0,0 +1,9724 @@ +/** + * material-design-lite - Material Design Components in CSS, JS and HTML + * @version v1.0.3 + * @license Apache-2.0 + * @copyright 2015 Google, Inc. + * @link https://github.com/google/material-design-lite + */ +@charset "UTF-8"; +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Material Design Lite */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/* + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ +/*html { + color: rgba(0,0,0, 0.87); + font-size: 1em; + line-height: 1.4; }*/ + +/* + * Remove text-shadow in selection highlight: + * https://twitter.com/miketaylr/status/12228805301 + * + * These selection rule sets have to be separate. + * Customize the background color to match your design. + */ +::-moz-selection { + background: #b3d4fc; + text-shadow: none; } +::selection { + background: #b3d4fc; + text-shadow: none; } + +/* + * A better looking default horizontal rule + */ +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; } + +/* + * Remove the gap between audio, canvas, iframes, + * images, videos and the bottom of their containers: + * https://github.com/h5bp/html5-boilerplate/issues/440 + */ +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; } + +/* + * Remove default fieldset styles. + */ +fieldset { + border: 0; + margin: 0; + padding: 0; } + +/* + * Allow only vertical resizing of textareas. + */ +textarea { + resize: vertical; } + +/* ========================================================================== + Browser Upgrade Prompt + ========================================================================== */ +.browserupgrade { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; } + +/* ========================================================================== + Author's custom styles + ========================================================================== */ +/* ========================================================================== + Helper classes + ========================================================================== */ +/* + * Hide visually and from screen readers: + */ +.hidden { + display: none !important; } + +/* + * Hide only visually, but have it available for screen readers: + * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility + */ +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +/* + * Extends the .visuallyhidden class to allow the element + * to be focusable when navigated to via the keyboard: + * https://www.drupal.org/node/897638 + */ +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } + +/* + * Hide visually and from screen readers, but maintain layout + */ +.invisible { + visibility: hidden; } + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ +.clearfix:before, +.clearfix:after { + content: " "; + /* 1 */ + display: table; + /* 2 */ } + +.clearfix:after { + clear: both; } + +/* ========================================================================== + EXAMPLE Media Queries for Responsive Design. + These examples override the primary ('mobile first') styles. + Modify as content requires. + ========================================================================== */ +/* ========================================================================== + Print styles. + Inlined to avoid the additional HTTP request: + http://www.phpied.com/delay-loading-your-print-css/ + ========================================================================== */ +@media print { + *, + *:before, + *:after, + *:first-letter, + *:first-line { + background: transparent !important; + color: #000 !important; + /* Black prints faster: http://www.sanbeiji.com/archives/953 */ + box-shadow: none !important; + text-shadow: none !important; } + a, + a:visited { + text-decoration: underline; } + a[href]:after { + content: " (" attr(href) ")"; } + abbr[title]:after { + content: " (" attr(title) ")"; } + /* + * Don't show links that are fragment identifiers, + * or use the `javascript:` pseudo protocol + */ + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; } + /* + * Printing Tables: + * http://css-discuss.incutio.com/wiki/Printing_Tables + */ + thead { + display: table-header-group; } + tr, + img { + page-break-inside: avoid; } + img { + max-width: 100% !important; } + p, + h2, + h3 { + orphans: 3; + widows: 3; } + h2, + h3 { + page-break-after: avoid; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Remove the unwanted box around FAB buttons */ +/* More info: http://goo.gl/IPwKi */ +a, .mdl-accordion, .mdl-button, .mdl-card, .mdl-checkbox, .mdl-dropdown-menu, +.mdl-icon-toggle, .mdl-item, .mdl-radio, .mdl-slider, .mdl-switch, .mdl-tabs__tab { + -webkit-tap-highlight-color: transparent; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); } + +/* + * Make html take up the entire screen + * Then set touch-action to avoid touch delay on mobile IE + */ +html { + width: 100%; + height: 100%; + -ms-touch-action: manipulation; + touch-action: manipulation; } + +/* +* Make body take up the entire screen +* Remove body margin so layout containers don't cause extra overflow. +*/ +body { + width: 100%; + min-height: 100%; + margin: 0; } + +/* + * Main display reset for IE support. + * Source: http://weblog.west-wind.com/posts/2015/Jan/12/main-HTML5-Tag-not-working-in-Internet-Explorer-91011 + */ +main { + display: block; } + +/* +* Apply no display to elements with the hidden attribute. +* IE 9 and 10 support. +*/ +*[hidden] { + display: none !important; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +/*html, body { + font-family: "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 20px; } + +h1, h2, h3, h4, h5, h6, p { + margin: 0; + padding: 0; }*/ + +/** + * Styles for HTML elements + */ +/*h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + opacity: 0.54; + font-size: 0.6em; } + +h1 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + margin-top: 24px; + margin-bottom: 24px; } + +h2 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 45px; + font-weight: 400; + line-height: 48px; + margin-top: 24px; + margin-bottom: 24px; } + +h3 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 34px; + font-weight: 400; + line-height: 40px; + margin-top: 24px; + margin-bottom: 24px; } + +h4 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 24px; + font-weight: 400; + line-height: 32px; + -moz-osx-font-smoothing: grayscale; + margin-top: 24px; + margin-bottom: 16px; } + +h5 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + margin-top: 24px; + margin-bottom: 16px; } + +h6 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0.04em; + margin-top: 24px; + margin-bottom: 16px; } + +p { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + margin-bottom: 16px; } + +a { + color: rgb(255,64,129); + font-weight: 500; } + +blockquote { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + position: relative; + font-size: 24px; + font-weight: 300; + font-style: italic; + line-height: 1.35; + letter-spacing: 0.08em; } + blockquote:before { + position: absolute; + left: -0.5em; + content: '“'; } + blockquote:after { + content: '”'; + margin-left: -0.05em; } + +mark { + background-color: #f4ff81; } + +dt { + font-weight: 700; } + +address { + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; + font-style: normal; } + +ul, ol { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; }*/ + +/** + * Class Name Styles + */ +.mdl-typography--display-4 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 112px; + font-weight: 300; + line-height: 1; + letter-spacing: -0.04em; } + +.mdl-typography--display-4-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 112px; + font-weight: 300; + line-height: 1; + letter-spacing: -0.04em; + opacity: 0.54; } + +.mdl-typography--display-3 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; } + +.mdl-typography--display-3-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 56px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + opacity: 0.54; } + +.mdl-typography--display-2 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 45px; + font-weight: 400; + line-height: 48px; } + +.mdl-typography--display-2-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 45px; + font-weight: 400; + line-height: 48px; + opacity: 0.54; } + +.mdl-typography--display-1 { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 34px; + font-weight: 400; + line-height: 40px; } + +.mdl-typography--display-1-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 34px; + font-weight: 400; + line-height: 40px; + opacity: 0.54; } + +.mdl-typography--headline { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 24px; + font-weight: 400; + line-height: 32px; + -moz-osx-font-smoothing: grayscale; } + +.mdl-typography--headline-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 24px; + font-weight: 400; + line-height: 32px; + -moz-osx-font-smoothing: grayscale; + opacity: 0.87; } + +.mdl-typography--title { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; } + +.mdl-typography--title-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + opacity: 0.87; } + +.mdl-typography--subhead { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0.04em; } + +.mdl-typography--subhead-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0.04em; + opacity: 0.87; } + +.mdl-typography--body-2 { + font-size: 14px; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-2-color-contrast { + font-size: 14px; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--body-1 { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-1-color-contrast { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--body-2-force-preferred-font { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-2-force-preferred-font-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--body-1-force-preferred-font { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; } + +.mdl-typography--body-1-force-preferred-font-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--caption { + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--caption-force-preferred-font { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--caption-color-contrast { + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; + opacity: 0.54; } + +.mdl-typography--caption-force-preferred-font-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 12px; + font-weight: 400; + line-height: 1; + letter-spacing: 0; + opacity: 0.54; } + +.mdl-typography--menu { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--menu-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + line-height: 1; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--button { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + line-height: 1; + letter-spacing: 0; } + +.mdl-typography--button-color-contrast { + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + line-height: 1; + letter-spacing: 0; + opacity: 0.87; } + +.mdl-typography--text-left { + text-align: left; } + +.mdl-typography--text-right { + text-align: right; } + +.mdl-typography--text-center { + text-align: center; } + +.mdl-typography--text-justify { + text-align: justify; } + +.mdl-typography--text-nowrap { + white-space: nowrap; } + +.mdl-typography--text-lowercase { + text-transform: lowercase; } + +.mdl-typography--text-uppercase { + text-transform: uppercase; } + +.mdl-typography--text-capitalize { + text-transform: capitalize; } + +.mdl-typography--font-thin { + font-weight: 200 !important; } + +.mdl-typography--font-light { + font-weight: 300 !important; } + +.mdl-typography--font-regular { + font-weight: 400 !important; } + +.mdl-typography--font-medium { + font-weight: 500 !important; } + +.mdl-typography--font-bold { + font-weight: 700 !important; } + +.mdl-typography--font-black { + font-weight: 900 !important; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-color-text--red { + color: rgb(244,67,54) !important; } + +.mdl-color--red { + background-color: rgb(244,67,54) !important; } + +.mdl-color-text--red-50 { + color: rgb(255,235,238) !important; } + +.mdl-color--red-50 { + background-color: rgb(255,235,238) !important; } + +.mdl-color-text--red-100 { + color: rgb(255,205,210) !important; } + +.mdl-color--red-100 { + background-color: rgb(255,205,210) !important; } + +.mdl-color-text--red-200 { + color: rgb(239,154,154) !important; } + +.mdl-color--red-200 { + background-color: rgb(239,154,154) !important; } + +.mdl-color-text--red-300 { + color: rgb(229,115,115) !important; } + +.mdl-color--red-300 { + background-color: rgb(229,115,115) !important; } + +.mdl-color-text--red-400 { + color: rgb(239,83,80) !important; } + +.mdl-color--red-400 { + background-color: rgb(239,83,80) !important; } + +.mdl-color-text--red-500 { + color: rgb(244,67,54) !important; } + +.mdl-color--red-500 { + background-color: rgb(244,67,54) !important; } + +.mdl-color-text--red-600 { + color: rgb(229,57,53) !important; } + +.mdl-color--red-600 { + background-color: rgb(229,57,53) !important; } + +.mdl-color-text--red-700 { + color: rgb(211,47,47) !important; } + +.mdl-color--red-700 { + background-color: rgb(211,47,47) !important; } + +.mdl-color-text--red-800 { + color: rgb(198,40,40) !important; } + +.mdl-color--red-800 { + background-color: rgb(198,40,40) !important; } + +.mdl-color-text--red-900 { + color: rgb(183,28,28) !important; } + +.mdl-color--red-900 { + background-color: rgb(183,28,28) !important; } + +.mdl-color-text--red-A100 { + color: rgb(255,138,128) !important; } + +.mdl-color--red-A100 { + background-color: rgb(255,138,128) !important; } + +.mdl-color-text--red-A200 { + color: rgb(255,82,82) !important; } + +.mdl-color--red-A200 { + background-color: rgb(255,82,82) !important; } + +.mdl-color-text--red-A400 { + color: rgb(255,23,68) !important; } + +.mdl-color--red-A400 { + background-color: rgb(255,23,68) !important; } + +.mdl-color-text--red-A700 { + color: rgb(213,0,0) !important; } + +.mdl-color--red-A700 { + background-color: rgb(213,0,0) !important; } + +.mdl-color-text--pink { + color: rgb(233,30,99) !important; } + +.mdl-color--pink { + background-color: rgb(233,30,99) !important; } + +.mdl-color-text--pink-50 { + color: rgb(252,228,236) !important; } + +.mdl-color--pink-50 { + background-color: rgb(252,228,236) !important; } + +.mdl-color-text--pink-100 { + color: rgb(248,187,208) !important; } + +.mdl-color--pink-100 { + background-color: rgb(248,187,208) !important; } + +.mdl-color-text--pink-200 { + color: rgb(244,143,177) !important; } + +.mdl-color--pink-200 { + background-color: rgb(244,143,177) !important; } + +.mdl-color-text--pink-300 { + color: rgb(240,98,146) !important; } + +.mdl-color--pink-300 { + background-color: rgb(240,98,146) !important; } + +.mdl-color-text--pink-400 { + color: rgb(236,64,122) !important; } + +.mdl-color--pink-400 { + background-color: rgb(236,64,122) !important; } + +.mdl-color-text--pink-500 { + color: rgb(233,30,99) !important; } + +.mdl-color--pink-500 { + background-color: rgb(233,30,99) !important; } + +.mdl-color-text--pink-600 { + color: rgb(216,27,96) !important; } + +.mdl-color--pink-600 { + background-color: rgb(216,27,96) !important; } + +.mdl-color-text--pink-700 { + color: rgb(194,24,91) !important; } + +.mdl-color--pink-700 { + background-color: rgb(194,24,91) !important; } + +.mdl-color-text--pink-800 { + color: rgb(173,20,87) !important; } + +.mdl-color--pink-800 { + background-color: rgb(173,20,87) !important; } + +.mdl-color-text--pink-900 { + color: rgb(136,14,79) !important; } + +.mdl-color--pink-900 { + background-color: rgb(136,14,79) !important; } + +.mdl-color-text--pink-A100 { + color: rgb(255,128,171) !important; } + +.mdl-color--pink-A100 { + background-color: rgb(255,128,171) !important; } + +.mdl-color-text--pink-A200 { + color: rgb(255,64,129) !important; } + +.mdl-color--pink-A200 { + background-color: rgb(255,64,129) !important; } + +.mdl-color-text--pink-A400 { + color: rgb(245,0,87) !important; } + +.mdl-color--pink-A400 { + background-color: rgb(245,0,87) !important; } + +.mdl-color-text--pink-A700 { + color: rgb(197,17,98) !important; } + +.mdl-color--pink-A700 { + background-color: rgb(197,17,98) !important; } + +.mdl-color-text--purple { + color: rgb(156,39,176) !important; } + +.mdl-color--purple { + background-color: rgb(156,39,176) !important; } + +.mdl-color-text--purple-50 { + color: rgb(243,229,245) !important; } + +.mdl-color--purple-50 { + background-color: rgb(243,229,245) !important; } + +.mdl-color-text--purple-100 { + color: rgb(225,190,231) !important; } + +.mdl-color--purple-100 { + background-color: rgb(225,190,231) !important; } + +.mdl-color-text--purple-200 { + color: rgb(206,147,216) !important; } + +.mdl-color--purple-200 { + background-color: rgb(206,147,216) !important; } + +.mdl-color-text--purple-300 { + color: rgb(186,104,200) !important; } + +.mdl-color--purple-300 { + background-color: rgb(186,104,200) !important; } + +.mdl-color-text--purple-400 { + color: rgb(171,71,188) !important; } + +.mdl-color--purple-400 { + background-color: rgb(171,71,188) !important; } + +.mdl-color-text--purple-500 { + color: rgb(156,39,176) !important; } + +.mdl-color--purple-500 { + background-color: rgb(156,39,176) !important; } + +.mdl-color-text--purple-600 { + color: rgb(142,36,170) !important; } + +.mdl-color--purple-600 { + background-color: rgb(142,36,170) !important; } + +.mdl-color-text--purple-700 { + color: rgb(123,31,162) !important; } + +.mdl-color--purple-700 { + background-color: rgb(123,31,162) !important; } + +.mdl-color-text--purple-800 { + color: rgb(106,27,154) !important; } + +.mdl-color--purple-800 { + background-color: rgb(106,27,154) !important; } + +.mdl-color-text--purple-900 { + color: rgb(74,20,140) !important; } + +.mdl-color--purple-900 { + background-color: rgb(74,20,140) !important; } + +.mdl-color-text--purple-A100 { + color: rgb(234,128,252) !important; } + +.mdl-color--purple-A100 { + background-color: rgb(234,128,252) !important; } + +.mdl-color-text--purple-A200 { + color: rgb(224,64,251) !important; } + +.mdl-color--purple-A200 { + background-color: rgb(224,64,251) !important; } + +.mdl-color-text--purple-A400 { + color: rgb(213,0,249) !important; } + +.mdl-color--purple-A400 { + background-color: rgb(213,0,249) !important; } + +.mdl-color-text--purple-A700 { + color: rgb(170,0,255) !important; } + +.mdl-color--purple-A700 { + background-color: rgb(170,0,255) !important; } + +.mdl-color-text--deep-purple { + color: rgb(103,58,183) !important; } + +.mdl-color--deep-purple { + background-color: rgb(103,58,183) !important; } + +.mdl-color-text--deep-purple-50 { + color: rgb(237,231,246) !important; } + +.mdl-color--deep-purple-50 { + background-color: rgb(237,231,246) !important; } + +.mdl-color-text--deep-purple-100 { + color: rgb(209,196,233) !important; } + +.mdl-color--deep-purple-100 { + background-color: rgb(209,196,233) !important; } + +.mdl-color-text--deep-purple-200 { + color: rgb(179,157,219) !important; } + +.mdl-color--deep-purple-200 { + background-color: rgb(179,157,219) !important; } + +.mdl-color-text--deep-purple-300 { + color: rgb(149,117,205) !important; } + +.mdl-color--deep-purple-300 { + background-color: rgb(149,117,205) !important; } + +.mdl-color-text--deep-purple-400 { + color: rgb(126,87,194) !important; } + +.mdl-color--deep-purple-400 { + background-color: rgb(126,87,194) !important; } + +.mdl-color-text--deep-purple-500 { + color: rgb(103,58,183) !important; } + +.mdl-color--deep-purple-500 { + background-color: rgb(103,58,183) !important; } + +.mdl-color-text--deep-purple-600 { + color: rgb(94,53,177) !important; } + +.mdl-color--deep-purple-600 { + background-color: rgb(94,53,177) !important; } + +.mdl-color-text--deep-purple-700 { + color: rgb(81,45,168) !important; } + +.mdl-color--deep-purple-700 { + background-color: rgb(81,45,168) !important; } + +.mdl-color-text--deep-purple-800 { + color: rgb(69,39,160) !important; } + +.mdl-color--deep-purple-800 { + background-color: rgb(69,39,160) !important; } + +.mdl-color-text--deep-purple-900 { + color: rgb(49,27,146) !important; } + +.mdl-color--deep-purple-900 { + background-color: rgb(49,27,146) !important; } + +.mdl-color-text--deep-purple-A100 { + color: rgb(179,136,255) !important; } + +.mdl-color--deep-purple-A100 { + background-color: rgb(179,136,255) !important; } + +.mdl-color-text--deep-purple-A200 { + color: rgb(124,77,255) !important; } + +.mdl-color--deep-purple-A200 { + background-color: rgb(124,77,255) !important; } + +.mdl-color-text--deep-purple-A400 { + color: rgb(101,31,255) !important; } + +.mdl-color--deep-purple-A400 { + background-color: rgb(101,31,255) !important; } + +.mdl-color-text--deep-purple-A700 { + color: rgb(98,0,234) !important; } + +.mdl-color--deep-purple-A700 { + background-color: rgb(98,0,234) !important; } + +.mdl-color-text--indigo { + color: rgb(63,81,181) !important; } + +.mdl-color--indigo { + background-color: rgb(63,81,181) !important; } + +.mdl-color-text--indigo-50 { + color: rgb(232,234,246) !important; } + +.mdl-color--indigo-50 { + background-color: rgb(232,234,246) !important; } + +.mdl-color-text--indigo-100 { + color: rgb(197,202,233) !important; } + +.mdl-color--indigo-100 { + background-color: rgb(197,202,233) !important; } + +.mdl-color-text--indigo-200 { + color: rgb(159,168,218) !important; } + +.mdl-color--indigo-200 { + background-color: rgb(159,168,218) !important; } + +.mdl-color-text--indigo-300 { + color: rgb(121,134,203) !important; } + +.mdl-color--indigo-300 { + background-color: rgb(121,134,203) !important; } + +.mdl-color-text--indigo-400 { + color: rgb(92,107,192) !important; } + +.mdl-color--indigo-400 { + background-color: rgb(92,107,192) !important; } + +.mdl-color-text--indigo-500 { + color: rgb(63,81,181) !important; } + +.mdl-color--indigo-500 { + background-color: rgb(63,81,181) !important; } + +.mdl-color-text--indigo-600 { + color: rgb(57,73,171) !important; } + +.mdl-color--indigo-600 { + background-color: rgb(57,73,171) !important; } + +.mdl-color-text--indigo-700 { + color: rgb(48,63,159) !important; } + +.mdl-color--indigo-700 { + background-color: rgb(48,63,159) !important; } + +.mdl-color-text--indigo-800 { + color: rgb(40,53,147) !important; } + +.mdl-color--indigo-800 { + background-color: rgb(40,53,147) !important; } + +.mdl-color-text--indigo-900 { + color: rgb(26,35,126) !important; } + +.mdl-color--indigo-900 { + background-color: rgb(26,35,126) !important; } + +.mdl-color-text--indigo-A100 { + color: rgb(140,158,255) !important; } + +.mdl-color--indigo-A100 { + background-color: rgb(140,158,255) !important; } + +.mdl-color-text--indigo-A200 { + color: rgb(83,109,254) !important; } + +.mdl-color--indigo-A200 { + background-color: rgb(83,109,254) !important; } + +.mdl-color-text--indigo-A400 { + color: rgb(61,90,254) !important; } + +.mdl-color--indigo-A400 { + background-color: rgb(61,90,254) !important; } + +.mdl-color-text--indigo-A700 { + color: rgb(48,79,254) !important; } + +.mdl-color--indigo-A700 { + background-color: rgb(48,79,254) !important; } + +.mdl-color-text--blue { + color: rgb(33,150,243) !important; } + +.mdl-color--blue { + background-color: rgb(33,150,243) !important; } + +.mdl-color-text--blue-50 { + color: rgb(227,242,253) !important; } + +.mdl-color--blue-50 { + background-color: rgb(227,242,253) !important; } + +.mdl-color-text--blue-100 { + color: rgb(187,222,251) !important; } + +.mdl-color--blue-100 { + background-color: rgb(187,222,251) !important; } + +.mdl-color-text--blue-200 { + color: rgb(144,202,249) !important; } + +.mdl-color--blue-200 { + background-color: rgb(144,202,249) !important; } + +.mdl-color-text--blue-300 { + color: rgb(100,181,246) !important; } + +.mdl-color--blue-300 { + background-color: rgb(100,181,246) !important; } + +.mdl-color-text--blue-400 { + color: rgb(66,165,245) !important; } + +.mdl-color--blue-400 { + background-color: rgb(66,165,245) !important; } + +.mdl-color-text--blue-500 { + color: rgb(33,150,243) !important; } + +.mdl-color--blue-500 { + background-color: rgb(33,150,243) !important; } + +.mdl-color-text--blue-600 { + color: rgb(30,136,229) !important; } + +.mdl-color--blue-600 { + background-color: rgb(30,136,229) !important; } + +.mdl-color-text--blue-700 { + color: rgb(25,118,210) !important; } + +.mdl-color--blue-700 { + background-color: rgb(25,118,210) !important; } + +.mdl-color-text--blue-800 { + color: rgb(21,101,192) !important; } + +.mdl-color--blue-800 { + background-color: rgb(21,101,192) !important; } + +.mdl-color-text--blue-900 { + color: rgb(13,71,161) !important; } + +.mdl-color--blue-900 { + background-color: rgb(13,71,161) !important; } + +.mdl-color-text--blue-A100 { + color: rgb(130,177,255) !important; } + +.mdl-color--blue-A100 { + background-color: rgb(130,177,255) !important; } + +.mdl-color-text--blue-A200 { + color: rgb(68,138,255) !important; } + +.mdl-color--blue-A200 { + background-color: rgb(68,138,255) !important; } + +.mdl-color-text--blue-A400 { + color: rgb(41,121,255) !important; } + +.mdl-color--blue-A400 { + background-color: rgb(41,121,255) !important; } + +.mdl-color-text--blue-A700 { + color: rgb(41,98,255) !important; } + +.mdl-color--blue-A700 { + background-color: rgb(41,98,255) !important; } + +.mdl-color-text--light-blue { + color: rgb(3,169,244) !important; } + +.mdl-color--light-blue { + background-color: rgb(3,169,244) !important; } + +.mdl-color-text--light-blue-50 { + color: rgb(225,245,254) !important; } + +.mdl-color--light-blue-50 { + background-color: rgb(225,245,254) !important; } + +.mdl-color-text--light-blue-100 { + color: rgb(179,229,252) !important; } + +.mdl-color--light-blue-100 { + background-color: rgb(179,229,252) !important; } + +.mdl-color-text--light-blue-200 { + color: rgb(129,212,250) !important; } + +.mdl-color--light-blue-200 { + background-color: rgb(129,212,250) !important; } + +.mdl-color-text--light-blue-300 { + color: rgb(79,195,247) !important; } + +.mdl-color--light-blue-300 { + background-color: rgb(79,195,247) !important; } + +.mdl-color-text--light-blue-400 { + color: rgb(41,182,246) !important; } + +.mdl-color--light-blue-400 { + background-color: rgb(41,182,246) !important; } + +.mdl-color-text--light-blue-500 { + color: rgb(3,169,244) !important; } + +.mdl-color--light-blue-500 { + background-color: rgb(3,169,244) !important; } + +.mdl-color-text--light-blue-600 { + color: rgb(3,155,229) !important; } + +.mdl-color--light-blue-600 { + background-color: rgb(3,155,229) !important; } + +.mdl-color-text--light-blue-700 { + color: rgb(2,136,209) !important; } + +.mdl-color--light-blue-700 { + background-color: rgb(2,136,209) !important; } + +.mdl-color-text--light-blue-800 { + color: rgb(2,119,189) !important; } + +.mdl-color--light-blue-800 { + background-color: rgb(2,119,189) !important; } + +.mdl-color-text--light-blue-900 { + color: rgb(1,87,155) !important; } + +.mdl-color--light-blue-900 { + background-color: rgb(1,87,155) !important; } + +.mdl-color-text--light-blue-A100 { + color: rgb(128,216,255) !important; } + +.mdl-color--light-blue-A100 { + background-color: rgb(128,216,255) !important; } + +.mdl-color-text--light-blue-A200 { + color: rgb(64,196,255) !important; } + +.mdl-color--light-blue-A200 { + background-color: rgb(64,196,255) !important; } + +.mdl-color-text--light-blue-A400 { + color: rgb(0,176,255) !important; } + +.mdl-color--light-blue-A400 { + background-color: rgb(0,176,255) !important; } + +.mdl-color-text--light-blue-A700 { + color: rgb(0,145,234) !important; } + +.mdl-color--light-blue-A700 { + background-color: rgb(0,145,234) !important; } + +.mdl-color-text--cyan { + color: rgb(0,188,212) !important; } + +.mdl-color--cyan { + background-color: rgb(0,188,212) !important; } + +.mdl-color-text--cyan-50 { + color: rgb(224,247,250) !important; } + +.mdl-color--cyan-50 { + background-color: rgb(224,247,250) !important; } + +.mdl-color-text--cyan-100 { + color: rgb(178,235,242) !important; } + +.mdl-color--cyan-100 { + background-color: rgb(178,235,242) !important; } + +.mdl-color-text--cyan-200 { + color: rgb(128,222,234) !important; } + +.mdl-color--cyan-200 { + background-color: rgb(128,222,234) !important; } + +.mdl-color-text--cyan-300 { + color: rgb(77,208,225) !important; } + +.mdl-color--cyan-300 { + background-color: rgb(77,208,225) !important; } + +.mdl-color-text--cyan-400 { + color: rgb(38,198,218) !important; } + +.mdl-color--cyan-400 { + background-color: rgb(38,198,218) !important; } + +.mdl-color-text--cyan-500 { + color: rgb(0,188,212) !important; } + +.mdl-color--cyan-500 { + background-color: rgb(0,188,212) !important; } + +.mdl-color-text--cyan-600 { + color: rgb(0,172,193) !important; } + +.mdl-color--cyan-600 { + background-color: rgb(0,172,193) !important; } + +.mdl-color-text--cyan-700 { + color: rgb(0,151,167) !important; } + +.mdl-color--cyan-700 { + background-color: rgb(0,151,167) !important; } + +.mdl-color-text--cyan-800 { + color: rgb(0,131,143) !important; } + +.mdl-color--cyan-800 { + background-color: rgb(0,131,143) !important; } + +.mdl-color-text--cyan-900 { + color: rgb(0,96,100) !important; } + +.mdl-color--cyan-900 { + background-color: rgb(0,96,100) !important; } + +.mdl-color-text--cyan-A100 { + color: rgb(132,255,255) !important; } + +.mdl-color--cyan-A100 { + background-color: rgb(132,255,255) !important; } + +.mdl-color-text--cyan-A200 { + color: rgb(24,255,255) !important; } + +.mdl-color--cyan-A200 { + background-color: rgb(24,255,255) !important; } + +.mdl-color-text--cyan-A400 { + color: rgb(0,229,255) !important; } + +.mdl-color--cyan-A400 { + background-color: rgb(0,229,255) !important; } + +.mdl-color-text--cyan-A700 { + color: rgb(0,184,212) !important; } + +.mdl-color--cyan-A700 { + background-color: rgb(0,184,212) !important; } + +.mdl-color-text--teal { + color: rgb(0,150,136) !important; } + +.mdl-color--teal { + background-color: rgb(0,150,136) !important; } + +.mdl-color-text--teal-50 { + color: rgb(224,242,241) !important; } + +.mdl-color--teal-50 { + background-color: rgb(224,242,241) !important; } + +.mdl-color-text--teal-100 { + color: rgb(178,223,219) !important; } + +.mdl-color--teal-100 { + background-color: rgb(178,223,219) !important; } + +.mdl-color-text--teal-200 { + color: rgb(128,203,196) !important; } + +.mdl-color--teal-200 { + background-color: rgb(128,203,196) !important; } + +.mdl-color-text--teal-300 { + color: rgb(77,182,172) !important; } + +.mdl-color--teal-300 { + background-color: rgb(77,182,172) !important; } + +.mdl-color-text--teal-400 { + color: rgb(38,166,154) !important; } + +.mdl-color--teal-400 { + background-color: rgb(38,166,154) !important; } + +.mdl-color-text--teal-500 { + color: rgb(0,150,136) !important; } + +.mdl-color--teal-500 { + background-color: rgb(0,150,136) !important; } + +.mdl-color-text--teal-600 { + color: rgb(0,137,123) !important; } + +.mdl-color--teal-600 { + background-color: rgb(0,137,123) !important; } + +.mdl-color-text--teal-700 { + color: rgb(0,121,107) !important; } + +.mdl-color--teal-700 { + background-color: rgb(0,121,107) !important; } + +.mdl-color-text--teal-800 { + color: rgb(0,105,92) !important; } + +.mdl-color--teal-800 { + background-color: rgb(0,105,92) !important; } + +.mdl-color-text--teal-900 { + color: rgb(0,77,64) !important; } + +.mdl-color--teal-900 { + background-color: rgb(0,77,64) !important; } + +.mdl-color-text--teal-A100 { + color: rgb(167,255,235) !important; } + +.mdl-color--teal-A100 { + background-color: rgb(167,255,235) !important; } + +.mdl-color-text--teal-A200 { + color: rgb(100,255,218) !important; } + +.mdl-color--teal-A200 { + background-color: rgb(100,255,218) !important; } + +.mdl-color-text--teal-A400 { + color: rgb(29,233,182) !important; } + +.mdl-color--teal-A400 { + background-color: rgb(29,233,182) !important; } + +.mdl-color-text--teal-A700 { + color: rgb(0,191,165) !important; } + +.mdl-color--teal-A700 { + background-color: rgb(0,191,165) !important; } + +.mdl-color-text--green { + color: rgb(76,175,80) !important; } + +.mdl-color--green { + background-color: rgb(76,175,80) !important; } + +.mdl-color-text--green-50 { + color: rgb(232,245,233) !important; } + +.mdl-color--green-50 { + background-color: rgb(232,245,233) !important; } + +.mdl-color-text--green-100 { + color: rgb(200,230,201) !important; } + +.mdl-color--green-100 { + background-color: rgb(200,230,201) !important; } + +.mdl-color-text--green-200 { + color: rgb(165,214,167) !important; } + +.mdl-color--green-200 { + background-color: rgb(165,214,167) !important; } + +.mdl-color-text--green-300 { + color: rgb(129,199,132) !important; } + +.mdl-color--green-300 { + background-color: rgb(129,199,132) !important; } + +.mdl-color-text--green-400 { + color: rgb(102,187,106) !important; } + +.mdl-color--green-400 { + background-color: rgb(102,187,106) !important; } + +.mdl-color-text--green-500 { + color: rgb(76,175,80) !important; } + +.mdl-color--green-500 { + background-color: rgb(76,175,80) !important; } + +.mdl-color-text--green-600 { + color: rgb(67,160,71) !important; } + +.mdl-color--green-600 { + background-color: rgb(67,160,71) !important; } + +.mdl-color-text--green-700 { + color: rgb(56,142,60) !important; } + +.mdl-color--green-700 { + background-color: rgb(56,142,60) !important; } + +.mdl-color-text--green-800 { + color: rgb(46,125,50) !important; } + +.mdl-color--green-800 { + background-color: rgb(46,125,50) !important; } + +.mdl-color-text--green-900 { + color: rgb(27,94,32) !important; } + +.mdl-color--green-900 { + background-color: rgb(27,94,32) !important; } + +.mdl-color-text--green-A100 { + color: rgb(185,246,202) !important; } + +.mdl-color--green-A100 { + background-color: rgb(185,246,202) !important; } + +.mdl-color-text--green-A200 { + color: rgb(105,240,174) !important; } + +.mdl-color--green-A200 { + background-color: rgb(105,240,174) !important; } + +.mdl-color-text--green-A400 { + color: rgb(0,230,118) !important; } + +.mdl-color--green-A400 { + background-color: rgb(0,230,118) !important; } + +.mdl-color-text--green-A700 { + color: rgb(0,200,83) !important; } + +.mdl-color--green-A700 { + background-color: rgb(0,200,83) !important; } + +.mdl-color-text--light-green { + color: rgb(139,195,74) !important; } + +.mdl-color--light-green { + background-color: rgb(139,195,74) !important; } + +.mdl-color-text--light-green-50 { + color: rgb(241,248,233) !important; } + +.mdl-color--light-green-50 { + background-color: rgb(241,248,233) !important; } + +.mdl-color-text--light-green-100 { + color: rgb(220,237,200) !important; } + +.mdl-color--light-green-100 { + background-color: rgb(220,237,200) !important; } + +.mdl-color-text--light-green-200 { + color: rgb(197,225,165) !important; } + +.mdl-color--light-green-200 { + background-color: rgb(197,225,165) !important; } + +.mdl-color-text--light-green-300 { + color: rgb(174,213,129) !important; } + +.mdl-color--light-green-300 { + background-color: rgb(174,213,129) !important; } + +.mdl-color-text--light-green-400 { + color: rgb(156,204,101) !important; } + +.mdl-color--light-green-400 { + background-color: rgb(156,204,101) !important; } + +.mdl-color-text--light-green-500 { + color: rgb(139,195,74) !important; } + +.mdl-color--light-green-500 { + background-color: rgb(139,195,74) !important; } + +.mdl-color-text--light-green-600 { + color: rgb(124,179,66) !important; } + +.mdl-color--light-green-600 { + background-color: rgb(124,179,66) !important; } + +.mdl-color-text--light-green-700 { + color: rgb(104,159,56) !important; } + +.mdl-color--light-green-700 { + background-color: rgb(104,159,56) !important; } + +.mdl-color-text--light-green-800 { + color: rgb(85,139,47) !important; } + +.mdl-color--light-green-800 { + background-color: rgb(85,139,47) !important; } + +.mdl-color-text--light-green-900 { + color: rgb(51,105,30) !important; } + +.mdl-color--light-green-900 { + background-color: rgb(51,105,30) !important; } + +.mdl-color-text--light-green-A100 { + color: rgb(204,255,144) !important; } + +.mdl-color--light-green-A100 { + background-color: rgb(204,255,144) !important; } + +.mdl-color-text--light-green-A200 { + color: rgb(178,255,89) !important; } + +.mdl-color--light-green-A200 { + background-color: rgb(178,255,89) !important; } + +.mdl-color-text--light-green-A400 { + color: rgb(118,255,3) !important; } + +.mdl-color--light-green-A400 { + background-color: rgb(118,255,3) !important; } + +.mdl-color-text--light-green-A700 { + color: rgb(100,221,23) !important; } + +.mdl-color--light-green-A700 { + background-color: rgb(100,221,23) !important; } + +.mdl-color-text--lime { + color: rgb(205,220,57) !important; } + +.mdl-color--lime { + background-color: rgb(205,220,57) !important; } + +.mdl-color-text--lime-50 { + color: rgb(249,251,231) !important; } + +.mdl-color--lime-50 { + background-color: rgb(249,251,231) !important; } + +.mdl-color-text--lime-100 { + color: rgb(240,244,195) !important; } + +.mdl-color--lime-100 { + background-color: rgb(240,244,195) !important; } + +.mdl-color-text--lime-200 { + color: rgb(230,238,156) !important; } + +.mdl-color--lime-200 { + background-color: rgb(230,238,156) !important; } + +.mdl-color-text--lime-300 { + color: rgb(220,231,117) !important; } + +.mdl-color--lime-300 { + background-color: rgb(220,231,117) !important; } + +.mdl-color-text--lime-400 { + color: rgb(212,225,87) !important; } + +.mdl-color--lime-400 { + background-color: rgb(212,225,87) !important; } + +.mdl-color-text--lime-500 { + color: rgb(205,220,57) !important; } + +.mdl-color--lime-500 { + background-color: rgb(205,220,57) !important; } + +.mdl-color-text--lime-600 { + color: rgb(192,202,51) !important; } + +.mdl-color--lime-600 { + background-color: rgb(192,202,51) !important; } + +.mdl-color-text--lime-700 { + color: rgb(175,180,43) !important; } + +.mdl-color--lime-700 { + background-color: rgb(175,180,43) !important; } + +.mdl-color-text--lime-800 { + color: rgb(158,157,36) !important; } + +.mdl-color--lime-800 { + background-color: rgb(158,157,36) !important; } + +.mdl-color-text--lime-900 { + color: rgb(130,119,23) !important; } + +.mdl-color--lime-900 { + background-color: rgb(130,119,23) !important; } + +.mdl-color-text--lime-A100 { + color: rgb(244,255,129) !important; } + +.mdl-color--lime-A100 { + background-color: rgb(244,255,129) !important; } + +.mdl-color-text--lime-A200 { + color: rgb(238,255,65) !important; } + +.mdl-color--lime-A200 { + background-color: rgb(238,255,65) !important; } + +.mdl-color-text--lime-A400 { + color: rgb(198,255,0) !important; } + +.mdl-color--lime-A400 { + background-color: rgb(198,255,0) !important; } + +.mdl-color-text--lime-A700 { + color: rgb(174,234,0) !important; } + +.mdl-color--lime-A700 { + background-color: rgb(174,234,0) !important; } + +.mdl-color-text--yellow { + color: rgb(255,235,59) !important; } + +.mdl-color--yellow { + background-color: rgb(255,235,59) !important; } + +.mdl-color-text--yellow-50 { + color: rgb(255,253,231) !important; } + +.mdl-color--yellow-50 { + background-color: rgb(255,253,231) !important; } + +.mdl-color-text--yellow-100 { + color: rgb(255,249,196) !important; } + +.mdl-color--yellow-100 { + background-color: rgb(255,249,196) !important; } + +.mdl-color-text--yellow-200 { + color: rgb(255,245,157) !important; } + +.mdl-color--yellow-200 { + background-color: rgb(255,245,157) !important; } + +.mdl-color-text--yellow-300 { + color: rgb(255,241,118) !important; } + +.mdl-color--yellow-300 { + background-color: rgb(255,241,118) !important; } + +.mdl-color-text--yellow-400 { + color: rgb(255,238,88) !important; } + +.mdl-color--yellow-400 { + background-color: rgb(255,238,88) !important; } + +.mdl-color-text--yellow-500 { + color: rgb(255,235,59) !important; } + +.mdl-color--yellow-500 { + background-color: rgb(255,235,59) !important; } + +.mdl-color-text--yellow-600 { + color: rgb(253,216,53) !important; } + +.mdl-color--yellow-600 { + background-color: rgb(253,216,53) !important; } + +.mdl-color-text--yellow-700 { + color: rgb(251,192,45) !important; } + +.mdl-color--yellow-700 { + background-color: rgb(251,192,45) !important; } + +.mdl-color-text--yellow-800 { + color: rgb(249,168,37) !important; } + +.mdl-color--yellow-800 { + background-color: rgb(249,168,37) !important; } + +.mdl-color-text--yellow-900 { + color: rgb(245,127,23) !important; } + +.mdl-color--yellow-900 { + background-color: rgb(245,127,23) !important; } + +.mdl-color-text--yellow-A100 { + color: rgb(255,255,141) !important; } + +.mdl-color--yellow-A100 { + background-color: rgb(255,255,141) !important; } + +.mdl-color-text--yellow-A200 { + color: rgb(255,255,0) !important; } + +.mdl-color--yellow-A200 { + background-color: rgb(255,255,0) !important; } + +.mdl-color-text--yellow-A400 { + color: rgb(255,234,0) !important; } + +.mdl-color--yellow-A400 { + background-color: rgb(255,234,0) !important; } + +.mdl-color-text--yellow-A700 { + color: rgb(255,214,0) !important; } + +.mdl-color--yellow-A700 { + background-color: rgb(255,214,0) !important; } + +.mdl-color-text--amber { + color: rgb(255,193,7) !important; } + +.mdl-color--amber { + background-color: rgb(255,193,7) !important; } + +.mdl-color-text--amber-50 { + color: rgb(255,248,225) !important; } + +.mdl-color--amber-50 { + background-color: rgb(255,248,225) !important; } + +.mdl-color-text--amber-100 { + color: rgb(255,236,179) !important; } + +.mdl-color--amber-100 { + background-color: rgb(255,236,179) !important; } + +.mdl-color-text--amber-200 { + color: rgb(255,224,130) !important; } + +.mdl-color--amber-200 { + background-color: rgb(255,224,130) !important; } + +.mdl-color-text--amber-300 { + color: rgb(255,213,79) !important; } + +.mdl-color--amber-300 { + background-color: rgb(255,213,79) !important; } + +.mdl-color-text--amber-400 { + color: rgb(255,202,40) !important; } + +.mdl-color--amber-400 { + background-color: rgb(255,202,40) !important; } + +.mdl-color-text--amber-500 { + color: rgb(255,193,7) !important; } + +.mdl-color--amber-500 { + background-color: rgb(255,193,7) !important; } + +.mdl-color-text--amber-600 { + color: rgb(255,179,0) !important; } + +.mdl-color--amber-600 { + background-color: rgb(255,179,0) !important; } + +.mdl-color-text--amber-700 { + color: rgb(255,160,0) !important; } + +.mdl-color--amber-700 { + background-color: rgb(255,160,0) !important; } + +.mdl-color-text--amber-800 { + color: rgb(255,143,0) !important; } + +.mdl-color--amber-800 { + background-color: rgb(255,143,0) !important; } + +.mdl-color-text--amber-900 { + color: rgb(255,111,0) !important; } + +.mdl-color--amber-900 { + background-color: rgb(255,111,0) !important; } + +.mdl-color-text--amber-A100 { + color: rgb(255,229,127) !important; } + +.mdl-color--amber-A100 { + background-color: rgb(255,229,127) !important; } + +.mdl-color-text--amber-A200 { + color: rgb(255,215,64) !important; } + +.mdl-color--amber-A200 { + background-color: rgb(255,215,64) !important; } + +.mdl-color-text--amber-A400 { + color: rgb(255,196,0) !important; } + +.mdl-color--amber-A400 { + background-color: rgb(255,196,0) !important; } + +.mdl-color-text--amber-A700 { + color: rgb(255,171,0) !important; } + +.mdl-color--amber-A700 { + background-color: rgb(255,171,0) !important; } + +.mdl-color-text--orange { + color: rgb(255,152,0) !important; } + +.mdl-color--orange { + background-color: rgb(255,152,0) !important; } + +.mdl-color-text--orange-50 { + color: rgb(255,243,224) !important; } + +.mdl-color--orange-50 { + background-color: rgb(255,243,224) !important; } + +.mdl-color-text--orange-100 { + color: rgb(255,224,178) !important; } + +.mdl-color--orange-100 { + background-color: rgb(255,224,178) !important; } + +.mdl-color-text--orange-200 { + color: rgb(255,204,128) !important; } + +.mdl-color--orange-200 { + background-color: rgb(255,204,128) !important; } + +.mdl-color-text--orange-300 { + color: rgb(255,183,77) !important; } + +.mdl-color--orange-300 { + background-color: rgb(255,183,77) !important; } + +.mdl-color-text--orange-400 { + color: rgb(255,167,38) !important; } + +.mdl-color--orange-400 { + background-color: rgb(255,167,38) !important; } + +.mdl-color-text--orange-500 { + color: rgb(255,152,0) !important; } + +.mdl-color--orange-500 { + background-color: rgb(255,152,0) !important; } + +.mdl-color-text--orange-600 { + color: rgb(251,140,0) !important; } + +.mdl-color--orange-600 { + background-color: rgb(251,140,0) !important; } + +.mdl-color-text--orange-700 { + color: rgb(245,124,0) !important; } + +.mdl-color--orange-700 { + background-color: rgb(245,124,0) !important; } + +.mdl-color-text--orange-800 { + color: rgb(239,108,0) !important; } + +.mdl-color--orange-800 { + background-color: rgb(239,108,0) !important; } + +.mdl-color-text--orange-900 { + color: rgb(230,81,0) !important; } + +.mdl-color--orange-900 { + background-color: rgb(230,81,0) !important; } + +.mdl-color-text--orange-A100 { + color: rgb(255,209,128) !important; } + +.mdl-color--orange-A100 { + background-color: rgb(255,209,128) !important; } + +.mdl-color-text--orange-A200 { + color: rgb(255,171,64) !important; } + +.mdl-color--orange-A200 { + background-color: rgb(255,171,64) !important; } + +.mdl-color-text--orange-A400 { + color: rgb(255,145,0) !important; } + +.mdl-color--orange-A400 { + background-color: rgb(255,145,0) !important; } + +.mdl-color-text--orange-A700 { + color: rgb(255,109,0) !important; } + +.mdl-color--orange-A700 { + background-color: rgb(255,109,0) !important; } + +.mdl-color-text--deep-orange { + color: rgb(255,87,34) !important; } + +.mdl-color--deep-orange { + background-color: rgb(255,87,34) !important; } + +.mdl-color-text--deep-orange-50 { + color: rgb(251,233,231) !important; } + +.mdl-color--deep-orange-50 { + background-color: rgb(251,233,231) !important; } + +.mdl-color-text--deep-orange-100 { + color: rgb(255,204,188) !important; } + +.mdl-color--deep-orange-100 { + background-color: rgb(255,204,188) !important; } + +.mdl-color-text--deep-orange-200 { + color: rgb(255,171,145) !important; } + +.mdl-color--deep-orange-200 { + background-color: rgb(255,171,145) !important; } + +.mdl-color-text--deep-orange-300 { + color: rgb(255,138,101) !important; } + +.mdl-color--deep-orange-300 { + background-color: rgb(255,138,101) !important; } + +.mdl-color-text--deep-orange-400 { + color: rgb(255,112,67) !important; } + +.mdl-color--deep-orange-400 { + background-color: rgb(255,112,67) !important; } + +.mdl-color-text--deep-orange-500 { + color: rgb(255,87,34) !important; } + +.mdl-color--deep-orange-500 { + background-color: rgb(255,87,34) !important; } + +.mdl-color-text--deep-orange-600 { + color: rgb(244,81,30) !important; } + +.mdl-color--deep-orange-600 { + background-color: rgb(244,81,30) !important; } + +.mdl-color-text--deep-orange-700 { + color: rgb(230,74,25) !important; } + +.mdl-color--deep-orange-700 { + background-color: rgb(230,74,25) !important; } + +.mdl-color-text--deep-orange-800 { + color: rgb(216,67,21) !important; } + +.mdl-color--deep-orange-800 { + background-color: rgb(216,67,21) !important; } + +.mdl-color-text--deep-orange-900 { + color: rgb(191,54,12) !important; } + +.mdl-color--deep-orange-900 { + background-color: rgb(191,54,12) !important; } + +.mdl-color-text--deep-orange-A100 { + color: rgb(255,158,128) !important; } + +.mdl-color--deep-orange-A100 { + background-color: rgb(255,158,128) !important; } + +.mdl-color-text--deep-orange-A200 { + color: rgb(255,110,64) !important; } + +.mdl-color--deep-orange-A200 { + background-color: rgb(255,110,64) !important; } + +.mdl-color-text--deep-orange-A400 { + color: rgb(255,61,0) !important; } + +.mdl-color--deep-orange-A400 { + background-color: rgb(255,61,0) !important; } + +.mdl-color-text--deep-orange-A700 { + color: rgb(221,44,0) !important; } + +.mdl-color--deep-orange-A700 { + background-color: rgb(221,44,0) !important; } + +.mdl-color-text--brown { + color: rgb(121,85,72) !important; } + +.mdl-color--brown { + background-color: rgb(121,85,72) !important; } + +.mdl-color-text--brown-50 { + color: rgb(239,235,233) !important; } + +.mdl-color--brown-50 { + background-color: rgb(239,235,233) !important; } + +.mdl-color-text--brown-100 { + color: rgb(215,204,200) !important; } + +.mdl-color--brown-100 { + background-color: rgb(215,204,200) !important; } + +.mdl-color-text--brown-200 { + color: rgb(188,170,164) !important; } + +.mdl-color--brown-200 { + background-color: rgb(188,170,164) !important; } + +.mdl-color-text--brown-300 { + color: rgb(161,136,127) !important; } + +.mdl-color--brown-300 { + background-color: rgb(161,136,127) !important; } + +.mdl-color-text--brown-400 { + color: rgb(141,110,99) !important; } + +.mdl-color--brown-400 { + background-color: rgb(141,110,99) !important; } + +.mdl-color-text--brown-500 { + color: rgb(121,85,72) !important; } + +.mdl-color--brown-500 { + background-color: rgb(121,85,72) !important; } + +.mdl-color-text--brown-600 { + color: rgb(109,76,65) !important; } + +.mdl-color--brown-600 { + background-color: rgb(109,76,65) !important; } + +.mdl-color-text--brown-700 { + color: rgb(93,64,55) !important; } + +.mdl-color--brown-700 { + background-color: rgb(93,64,55) !important; } + +.mdl-color-text--brown-800 { + color: rgb(78,52,46) !important; } + +.mdl-color--brown-800 { + background-color: rgb(78,52,46) !important; } + +.mdl-color-text--brown-900 { + color: rgb(62,39,35) !important; } + +.mdl-color--brown-900 { + background-color: rgb(62,39,35) !important; } + +.mdl-color-text--grey { + color: rgb(158,158,158) !important; } + +.mdl-color--grey { + background-color: rgb(158,158,158) !important; } + +.mdl-color-text--grey-50 { + color: rgb(250,250,250) !important; } + +.mdl-color--grey-50 { + background-color: rgb(250,250,250) !important; } + +.mdl-color-text--grey-100 { + color: rgb(245,245,245) !important; } + +.mdl-color--grey-100 { + background-color: rgb(245,245,245) !important; } + +.mdl-color-text--grey-200 { + color: rgb(238,238,238) !important; } + +.mdl-color--grey-200 { + background-color: rgb(238,238,238) !important; } + +.mdl-color-text--grey-300 { + color: rgb(224,224,224) !important; } + +.mdl-color--grey-300 { + background-color: rgb(224,224,224) !important; } + +.mdl-color-text--grey-400 { + color: rgb(189,189,189) !important; } + +.mdl-color--grey-400 { + background-color: rgb(189,189,189) !important; } + +.mdl-color-text--grey-500 { + color: rgb(158,158,158) !important; } + +.mdl-color--grey-500 { + background-color: rgb(158,158,158) !important; } + +.mdl-color-text--grey-600 { + color: rgb(117,117,117) !important; } + +.mdl-color--grey-600 { + background-color: rgb(117,117,117) !important; } + +.mdl-color-text--grey-700 { + color: rgb(97,97,97) !important; } + +.mdl-color--grey-700 { + background-color: rgb(97,97,97) !important; } + +.mdl-color-text--grey-800 { + color: rgb(66,66,66) !important; } + +.mdl-color--grey-800 { + background-color: rgb(66,66,66) !important; } + +.mdl-color-text--grey-900 { + color: rgb(33,33,33) !important; } + +.mdl-color--grey-900 { + background-color: rgb(33,33,33) !important; } + +.mdl-color-text--blue-grey { + color: rgb(96,125,139) !important; } + +.mdl-color--blue-grey { + background-color: rgb(96,125,139) !important; } + +.mdl-color-text--blue-grey-50 { + color: rgb(236,239,241) !important; } + +.mdl-color--blue-grey-50 { + background-color: rgb(236,239,241) !important; } + +.mdl-color-text--blue-grey-100 { + color: rgb(207,216,220) !important; } + +.mdl-color--blue-grey-100 { + background-color: rgb(207,216,220) !important; } + +.mdl-color-text--blue-grey-200 { + color: rgb(176,190,197) !important; } + +.mdl-color--blue-grey-200 { + background-color: rgb(176,190,197) !important; } + +.mdl-color-text--blue-grey-300 { + color: rgb(144,164,174) !important; } + +.mdl-color--blue-grey-300 { + background-color: rgb(144,164,174) !important; } + +.mdl-color-text--blue-grey-400 { + color: rgb(120,144,156) !important; } + +.mdl-color--blue-grey-400 { + background-color: rgb(120,144,156) !important; } + +.mdl-color-text--blue-grey-500 { + color: rgb(96,125,139) !important; } + +.mdl-color--blue-grey-500 { + background-color: rgb(96,125,139) !important; } + +.mdl-color-text--blue-grey-600 { + color: rgb(84,110,122) !important; } + +.mdl-color--blue-grey-600 { + background-color: rgb(84,110,122) !important; } + +.mdl-color-text--blue-grey-700 { + color: rgb(69,90,100) !important; } + +.mdl-color--blue-grey-700 { + background-color: rgb(69,90,100) !important; } + +.mdl-color-text--blue-grey-800 { + color: rgb(55,71,79) !important; } + +.mdl-color--blue-grey-800 { + background-color: rgb(55,71,79) !important; } + +.mdl-color-text--blue-grey-900 { + color: rgb(38,50,56) !important; } + +.mdl-color--blue-grey-900 { + background-color: rgb(38,50,56) !important; } + +.mdl-color--black { + background-color: rgb(0,0,0) !important; } + +.mdl-color-text--black { + color: rgb(0,0,0) !important; } + +.mdl-color--white { + background-color: rgb(255,255,255) !important; } + +.mdl-color-text--white { + color: rgb(255,255,255) !important; } + +.mdl-color--primary { + background-color: rgb(63,81,181) !important; } + +.mdl-color--primary-contrast { + background-color: rgb(255,255,255) !important; } + +.mdl-color--primary-dark { + background-color: rgb(48,63,159) !important; } + +.mdl-color--accent { + background-color: rgb(255,64,129) !important; } + +.mdl-color--accent-contrast { + background-color: rgb(255,255,255) !important; } + +.mdl-color-text--primary { + color: rgb(63,81,181) !important; } + +.mdl-color-text--primary-contrast { + color: rgb(255,255,255) !important; } + +.mdl-color-text--primary-dark { + color: rgb(48,63,159) !important; } + +.mdl-color-text--accent { + color: rgb(255,64,129) !important; } + +.mdl-color-text--accent-contrast { + color: rgb(255,255,255) !important; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-ripple { + background: rgb(0,0,0); + border-radius: 50%; + height: 50px; + left: 0; + opacity: 0; + pointer-events: none; + position: absolute; + top: 0; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 50px; + overflow: hidden; } + .mdl-ripple.is-animating { + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1); + transition: transform 0.3s cubic-bezier(0, 0, 0.2, 1), width 0.3s cubic-bezier(0, 0, 0.2, 1), height 0.3s cubic-bezier(0, 0, 0.2, 1), opacity 0.6s cubic-bezier(0, 0, 0.2, 1); } + .mdl-ripple.is-visible { + opacity: 0.3; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-animation--default { + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + +.mdl-animation--fast-out-slow-in { + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + +.mdl-animation--linear-out-slow-in { + -webkit-transition-timing-function: cubic-bezier(0, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0, 0, 0.2, 1); } + +.mdl-animation--fast-out-linear-in { + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 1, 1); + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-badge { + position: relative; + white-space: nowrap; + margin-right: 24px; } + .mdl-badge:not([data-badge]) { + margin-right: auto; } + .mdl-badge[data-badge]:after { + content: attr(data-badge); + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-content: center; + -ms-flex-line-pack: center; + align-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + position: absolute; + top: -11px; + right: -24px; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-weight: 600; + font-size: 12px; + width: 22px; + height: 22px; + border-radius: 50%; + background: rgb(255,64,129); + color: rgb(255,255,255); } + .mdl-button .mdl-badge[data-badge]:after { + top: -10px; + right: -5px; } + .mdl-badge.mdl-badge--no-background[data-badge]:after { + color: rgb(255,64,129); + background: rgba(255,255,255,0.2); + box-shadow: 0 0 1px gray; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-button { + background: transparent; + border: none; + border-radius: 2px; + color: rgb(0,0,0); + position: relative; + height: 36px; + min-width: 64px; + padding: 0 8px; + display: inline-block; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + line-height: 1; + letter-spacing: 0; + overflow: hidden; + will-change: box-shadow, transform; + -webkit-transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + outline: none; + cursor: pointer; + text-decoration: none; + text-align: center; + line-height: 36px; + vertical-align: middle; } + .mdl-button::-moz-focus-inner { + border: 0; } + .mdl-button:hover { + background-color: rgba(158,158,158, 0.20); } + .mdl-button:focus:not(:active) { + background-color: rgba(0,0,0, 0.12); } + .mdl-button:active { + background-color: rgba(158,158,158, 0.40); } + .mdl-button.mdl-button--colored { + color: rgb(63,81,181); } + .mdl-button.mdl-button--colored:focus:not(:active) { + background-color: rgba(0,0,0, 0.12); } + +input.mdl-button[type="submit"] { + -webkit-appearance: none; } + +.mdl-button--raised { + background: rgba(158,158,158, 0.20); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + .mdl-button--raised:active { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--raised:focus:not(:active) { + box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--raised.mdl-button--colored { + background: rgb(63,81,181); + color: rgb(255,255,255); } + .mdl-button--raised.mdl-button--colored:hover { + background-color: rgb(63,81,181); } + .mdl-button--raised.mdl-button--colored:active { + background-color: rgb(63,81,181); } + .mdl-button--raised.mdl-button--colored:focus:not(:active) { + background-color: rgb(63,81,181); } + .mdl-button--raised.mdl-button--colored .mdl-ripple { + background: rgb(255,255,255); } + +.mdl-button--fab { + border-radius: 50%; + font-size: 24px; + height: 56px; + margin: auto; + min-width: 56px; + width: 56px; + padding: 0; + overflow: hidden; + background: rgba(158,158,158, 0.20); + box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24); + position: relative; + line-height: normal; } + .mdl-button--fab .material-icons { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-12px, -12px); + -ms-transform: translate(-12px, -12px); + transform: translate(-12px, -12px); + line-height: 24px; + width: 24px; } + .mdl-button--fab.mdl-button--mini-fab { + height: 40px; + min-width: 40px; + width: 40px; } + .mdl-button--fab .mdl-button__ripple-container { + border-radius: 50%; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-button--fab:active { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--fab:focus:not(:active) { + box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); + background-color: rgba(158,158,158, 0.40); } + .mdl-button--fab.mdl-button--colored { + background: rgb(255,64,129); + color: rgb(255,255,255); } + .mdl-button--fab.mdl-button--colored:hover { + background-color: rgb(255,64,129); } + .mdl-button--fab.mdl-button--colored:focus:not(:active) { + background-color: rgb(255,64,129); } + .mdl-button--fab.mdl-button--colored:active { + background-color: rgb(255,64,129); } + .mdl-button--fab.mdl-button--colored .mdl-ripple { + background: rgb(255,255,255); } + +.mdl-button--icon { + border-radius: 50%; + font-size: 24px; + height: 32px; + margin-left: 0; + margin-right: 0; + min-width: 32px; + width: 32px; + padding: 0; + overflow: hidden; + color: inherit; + line-height: normal; } + .mdl-button--icon .material-icons { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-12px, -12px); + -ms-transform: translate(-12px, -12px); + transform: translate(-12px, -12px); + line-height: 24px; + width: 24px; } + .mdl-button--icon.mdl-button--mini-icon { + height: 24px; + min-width: 24px; + width: 24px; } + .mdl-button--icon.mdl-button--mini-icon .material-icons { + top: 0px; + left: 0px; } + .mdl-button--icon .mdl-button__ripple-container { + border-radius: 50%; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + +.mdl-button__ripple-container { + display: block; + height: 100%; + left: 0px; + position: absolute; + top: 0px; + width: 100%; + z-index: 0; + overflow: hidden; } + .mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple, + .mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple { + background-color: transparent; } + +.mdl-button--primary.mdl-button--primary { + color: rgb(63,81,181); } + .mdl-button--primary.mdl-button--primary .mdl-ripple { + background: rgb(255,255,255); } + .mdl-button--primary.mdl-button--primary.mdl-button--raised, .mdl-button--primary.mdl-button--primary.mdl-button--fab { + color: rgb(255,255,255); + background-color: rgb(63,81,181); } + +.mdl-button--accent.mdl-button--accent { + color: rgb(255,64,129); } + .mdl-button--accent.mdl-button--accent .mdl-ripple { + background: rgb(255,255,255); } + .mdl-button--accent.mdl-button--accent.mdl-button--raised, .mdl-button--accent.mdl-button--accent.mdl-button--fab { + color: rgb(255,255,255); + background-color: rgb(255,64,129); } + +.mdl-button[disabled][disabled], +.mdl-button.mdl-button--disabled.mdl-button--disabled { + color: rgba(0,0,0, 0.26); + cursor: auto; + background-color: transparent; } + +.mdl-button--fab[disabled][disabled], +.mdl-button--fab.mdl-button--disabled.mdl-button--disabled { + background-color: rgba(0,0,0, 0.12); + color: rgba(0,0,0, 0.26); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-button--raised[disabled][disabled], +.mdl-button--raised.mdl-button--disabled.mdl-button--disabled { + background-color: rgba(0,0,0, 0.12); + color: rgba(0,0,0, 0.26); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-button--colored[disabled][disabled], +.mdl-button--colored.mdl-button--disabled.mdl-button--disabled { + color: rgba(0,0,0, 0.26); } + +.mdl-button .material-icons { + vertical-align: middle; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-card { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + font-size: 16px; + font-weight: 400; + min-height: 200px; + overflow: hidden; + width: 330px; + z-index: 1; + position: relative; + background: rgb(255,255,255); + border-radius: 2px; + box-sizing: border-box; } + +.mdl-card__media { + background-color: rgb(255,64,129); + background-repeat: repeat; + background-position: 50% 50%; + background-size: cover; + background-origin: padding-box; + background-attachment: scroll; + box-sizing: border-box; } + +.mdl-card__title { + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + color: rgb(0,0,0); + display: block; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: stretch; + -webkit-justify-content: stretch; + -ms-flex-pack: stretch; + justify-content: stretch; + line-height: normal; + padding: 16px 16px; + -webkit-perspective-origin: 165px 56px; + perspective-origin: 165px 56px; + -webkit-transform-origin: 165px 56px; + -ms-transform-origin: 165px 56px; + transform-origin: 165px 56px; + box-sizing: border-box; } + .mdl-card__title.mdl-card--border { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); } + +.mdl-card__title-text { + -webkit-align-self: flex-end; + -ms-flex-item-align: end; + align-self: flex-end; + color: inherit; + display: block; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + font-size: 24px; + font-weight: 300; + line-height: normal; + overflow: hidden; + -webkit-transform-origin: 149px 48px; + -ms-transform-origin: 149px 48px; + transform-origin: 149px 48px; + margin: 0; } + +.mdl-card__subtitle-text { + font-size: 14px; + color: grey; + margin: 0; } + +.mdl-card__supporting-text { + color: rgba(0,0,0, 0.54); + font-size: 13px; + line-height: 18px; + overflow: hidden; + padding: 16px 16px; + width: 90%; } + +.mdl-card__actions { + font-size: 16px; + line-height: normal; + width: 100%; + background-color: transparent; + padding: 8px; + box-sizing: border-box; } + .mdl-card__actions.mdl-card--border { + border-top: 1px solid rgba(0, 0, 0, 0.1); } + +.mdl-card--expand { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + +.mdl-card__menu { + position: absolute; + right: 16px; + top: 16px; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-checkbox { + position: relative; + z-index: 1; + vertical-align: middle; + display: inline-block; + box-sizing: border-box; + width: 100%; + height: 24px; + margin: 0; + padding: 0; } + .mdl-checkbox.is-upgraded { + padding-left: 24px; } + +.mdl-checkbox__input { + line-height: 24px; } + .mdl-checkbox.is-upgraded .mdl-checkbox__input { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-checkbox__box-outline { + position: absolute; + top: 3px; + left: 0; + display: inline-block; + box-sizing: border-box; + width: 16px; + height: 16px; + margin: 0; + cursor: pointer; + overflow: hidden; + border: 2px solid rgba(0,0,0, 0.54); + border-radius: 2px; + z-index: 2; } + .mdl-checkbox.is-checked .mdl-checkbox__box-outline { + border: 2px solid rgb(63,81,181); } + .mdl-checkbox.is-disabled .mdl-checkbox__box-outline { + border: 2px solid rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-checkbox__focus-helper { + position: absolute; + top: 3px; + left: 0; + display: inline-block; + box-sizing: border-box; + width: 16px; + height: 16px; + border-radius: 50%; + background-color: transparent; } + .mdl-checkbox.is-focused .mdl-checkbox__focus-helper { + box-shadow: 0 0 0px 8px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1); } + .mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper { + box-shadow: 0 0 0px 8px rgba(63,81,181, 0.26); + background-color: rgba(63,81,181, 0.26); } + +.mdl-checkbox__tick-outline { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + -webkit-mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg=="); + mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg=="); + background: transparent; + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: background; + transition-property: background; } + .mdl-checkbox.is-checked .mdl-checkbox__tick-outline { + background: rgb(63,81,181) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K"); } + .mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline { + background: rgba(0,0,0, 0.26) url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K"); } + +.mdl-checkbox__label { + position: relative; + cursor: pointer; + font-size: 16px; + line-height: 24px; + margin: 0; } + .mdl-checkbox.is-disabled .mdl-checkbox__label { + color: rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-checkbox__ripple-container { + position: absolute; + z-index: 2; + top: -6px; + left: -10px; + box-sizing: border-box; + width: 36px; + height: 36px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-checkbox__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container { + cursor: auto; } + .mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple { + background: transparent; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-data-table { + position: relative; + border: 1px solid rgba(0, 0, 0, 0.12); + border-collapse: collapse; + white-space: nowrap; + font-size: 13px; + background-color: rgb(255,255,255); } + .mdl-data-table thead { + padding-bottom: 3px; } + .mdl-data-table thead .mdl-data-table__select { + margin-top: 0; } + .mdl-data-table tbody tr { + position: relative; + height: 48px; + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: background-color; + transition-property: background-color; } + .mdl-data-table tbody tr.is-selected { + background-color: #e0e0e0; } + .mdl-data-table tbody tr:hover { + background-color: #eeeeee; } + .mdl-data-table td, .mdl-data-table th { + padding: 0 18px 0 18px; + text-align: right; } + .mdl-data-table td:first-of-type, .mdl-data-table th:first-of-type { + padding-left: 24px; } + .mdl-data-table td:last-of-type, .mdl-data-table th:last-of-type { + padding-right: 24px; } + .mdl-data-table td { + position: relative; + vertical-align: top; + height: 48px; + border-top: 1px solid rgba(0, 0, 0, 0.12); + border-bottom: 1px solid rgba(0, 0, 0, 0.12); + padding-top: 12px; + box-sizing: border-box; } + .mdl-data-table td .mdl-data-table__select { + vertical-align: top; + position: absolute; + left: 24px; } + .mdl-data-table th { + position: relative; + vertical-align: bottom; + text-overflow: ellipsis; + font-size: 14px; + font-weight: bold; + line-height: 24px; + letter-spacing: 0; + height: 48px; + font-size: 12px; + color: rgba(0, 0, 0, 0.54); + padding-bottom: 8px; + box-sizing: border-box; } + .mdl-data-table th .mdl-data-table__select { + position: absolute; + bottom: 8px; + left: 24px; } + +.mdl-data-table__select { + width: 16px; } + +.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric { + text-align: left; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-mega-footer { + padding: 16px 40px; + color: rgb(158,158,158); + background-color: rgb(66,66,66); } + +.mdl-mega-footer--top-section:after, +.mdl-mega-footer--middle-section:after, +.mdl-mega-footer--bottom-section:after, +.mdl-mega-footer__top-section:after, +.mdl-mega-footer__middle-section:after, +.mdl-mega-footer__bottom-section:after { + content: ''; + display: block; + clear: both; } + +.mdl-mega-footer--left-section, +.mdl-mega-footer__left-section { + margin-bottom: 16px; } + +.mdl-mega-footer--right-section, +.mdl-mega-footer__right-section { + margin-bottom: 16px; } + +.mdl-mega-footer--right-section a, +.mdl-mega-footer__right-section a { + display: block; + margin-bottom: 16px; + color: inherit; + text-decoration: none; } + +@media screen and (min-width: 760px) { + .mdl-mega-footer--left-section, + .mdl-mega-footer__left-section { + float: left; } + .mdl-mega-footer--right-section, + .mdl-mega-footer__right-section { + float: right; } + .mdl-mega-footer--right-section a, + .mdl-mega-footer__right-section a { + display: inline-block; + margin-left: 16px; + line-height: 36px; + vertical-align: middle; } } + +.mdl-mega-footer--social-btn, +.mdl-mega-footer__social-btn { + width: 36px; + height: 36px; + padding: 0; + margin: 0; + background-color: rgb(158,158,158); + border: none; } + +.mdl-mega-footer--drop-down-section, +.mdl-mega-footer__drop-down-section { + display: block; + position: relative; } + +@media screen and (min-width: 760px) { + .mdl-mega-footer--drop-down-section, + .mdl-mega-footer__drop-down-section { + width: 33%; } + .mdl-mega-footer--drop-down-section:nth-child(1), + .mdl-mega-footer--drop-down-section:nth-child(2), + .mdl-mega-footer__drop-down-section:nth-child(1), + .mdl-mega-footer__drop-down-section:nth-child(2) { + float: left; } + .mdl-mega-footer--drop-down-section:nth-child(3), + .mdl-mega-footer__drop-down-section:nth-child(3) { + float: right; } + .mdl-mega-footer--drop-down-section:nth-child(3):after, + .mdl-mega-footer__drop-down-section:nth-child(3):after { + clear: right; } + .mdl-mega-footer--drop-down-section:nth-child(4), + .mdl-mega-footer__drop-down-section:nth-child(4) { + clear: right; + float: right; } + .mdl-mega-footer--middle-section:after, + .mdl-mega-footer__middle-section:after { + content: ''; + display: block; + clear: both; } + .mdl-mega-footer--bottom-section, + .mdl-mega-footer__bottom-section { + padding-top: 0; } } + +@media screen and (min-width: 1024px) { + .mdl-mega-footer--drop-down-section, + .mdl-mega-footer--drop-down-section:nth-child(3), + .mdl-mega-footer--drop-down-section:nth-child(4), + .mdl-mega-footer__drop-down-section, + .mdl-mega-footer__drop-down-section:nth-child(3), + .mdl-mega-footer__drop-down-section:nth-child(4) { + width: 24%; + float: left; } } + +.mdl-mega-footer--heading-checkbox, +.mdl-mega-footer__heading-checkbox { + position: absolute; + width: 100%; + height: 55.8px; + padding: 32px; + margin: 0; + margin-top: -16px; + cursor: pointer; + z-index: 1; + opacity: 0; } + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer__heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer__heading:after { + font-family: 'Material Icons'; + content: '\E5CE'; } + +.mdl-mega-footer--heading-checkbox:checked ~ ul, +.mdl-mega-footer__heading-checkbox:checked ~ ul { + display: none; } + +.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--heading:after, +.mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer__heading:after, +.mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer--heading:after, +.mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer__heading:after { + font-family: 'Material Icons'; + content: '\E5CF'; } + +.mdl-mega-footer--heading, +.mdl-mega-footer__heading { + position: relative; + width: 100%; + padding-right: 39.8px; + margin-bottom: 16px; + box-sizing: border-box; + font-size: 14px; + line-height: 23.8px; + font-weight: 500; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: rgb(224,224,224); } + +.mdl-mega-footer--heading:after, +.mdl-mega-footer__heading:after { + content: ''; + position: absolute; + top: 0; + right: 0; + display: block; + width: 23.8px; + height: 23.8px; + background-size: cover; } + +.mdl-mega-footer--link-list, +.mdl-mega-footer__link-list { + list-style: none; + margin: 0; + padding: 0; + margin-bottom: 32px; } + .mdl-mega-footer--link-list:after, + .mdl-mega-footer__link-list:after { + clear: both; + display: block; + content: ''; } + +.mdl-mega-footer--link-list li, +.mdl-mega-footer__link-list li { + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + line-height: 20px; } + +.mdl-mega-footer--link-list a, +.mdl-mega-footer__link-list a { + color: inherit; + text-decoration: none; + white-space: nowrap; } + +@media screen and (min-width: 760px) { + .mdl-mega-footer--heading-checkbox, + .mdl-mega-footer__heading-checkbox { + display: none; } + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer--heading-checkbox ~ .mdl-mega-footer__heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer__heading-checkbox ~ .mdl-mega-footer__heading:after { + background-image: none; } + .mdl-mega-footer--heading-checkbox:checked ~ ul, + .mdl-mega-footer__heading-checkbox:checked ~ ul { + display: block; } + .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer--heading-checkbox:checked ~ .mdl-mega-footer__heading:after, + .mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer--heading:after, + .mdl-mega-footer__heading-checkbox:checked ~ .mdl-mega-footer__heading:after { + content: ''; } } + +.mdl-mega-footer--bottom-section, +.mdl-mega-footer__bottom-section { + padding-top: 16px; + margin-bottom: 16px; } + +.mdl-logo { + margin-bottom: 16px; + color: white; } + +.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li, +.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li { + float: left; + margin-bottom: 0; + margin-right: 16px; } + +@media screen and (min-width: 760px) { + .mdl-logo { + float: left; + margin-bottom: 0; + margin-right: 16px; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-mini-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 32px 16px; + color: rgb(158,158,158); + background-color: rgb(66,66,66); } + .mdl-mini-footer:after { + content: ''; + display: block; } + .mdl-mini-footer .mdl-logo { + line-height: 36px; } + +.mdl-mini-footer--link-list, +.mdl-mini-footer__link-list { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row nowrap; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + list-style: none; + margin: 0; + padding: 0; } + .mdl-mini-footer--link-list li, + .mdl-mini-footer__link-list li { + margin-bottom: 0; + margin-right: 16px; } + @media screen and (min-width: 760px) { + .mdl-mini-footer--link-list li, + .mdl-mini-footer__link-list li { + line-height: 36px; } } + .mdl-mini-footer--link-list a, + .mdl-mini-footer__link-list a { + color: inherit; + text-decoration: none; + white-space: nowrap; } + +.mdl-mini-footer--left-section, +.mdl-mini-footer__left-section { + display: inline-block; + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; } + +.mdl-mini-footer--right-section, +.mdl-mini-footer__right-section { + display: inline-block; + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; } + +.mdl-mini-footer--social-btn, +.mdl-mini-footer__social-btn { + width: 36px; + height: 36px; + padding: 0; + margin: 0; + background-color: rgb(158,158,158); + border: none; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-icon-toggle { + position: relative; + z-index: 1; + vertical-align: middle; + display: inline-block; + height: 32px; + margin: 0; + padding: 0; } + +.mdl-icon-toggle__input { + line-height: 32px; } + .mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-icon-toggle__label { + display: inline-block; + position: relative; + cursor: pointer; + height: 32px; + width: 32px; + min-width: 32px; + color: rgb(97,97,97); + border-radius: 50%; + padding: 0; + margin-left: 0; + margin-right: 0; + text-align: center; + background-color: transparent; + will-change: background-color; + -webkit-transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), color 0.2s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-icon-toggle__label.material-icons { + line-height: 32px; + font-size: 24px; } + .mdl-icon-toggle.is-checked .mdl-icon-toggle__label { + color: rgb(63,81,181); } + .mdl-icon-toggle.is-disabled .mdl-icon-toggle__label { + color: rgba(0,0,0, 0.26); + cursor: auto; + -webkit-transition: none; + transition: none; } + .mdl-icon-toggle.is-focused .mdl-icon-toggle__label { + background-color: rgba(0,0,0, 0.12); } + .mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label { + background-color: rgba(63,81,181, 0.26); } + +.mdl-icon-toggle__ripple-container { + position: absolute; + z-index: 2; + top: -2px; + left: -2px; + box-sizing: border-box; + width: 36px; + height: 36px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-icon-toggle__ripple-container .mdl-ripple { + background: rgb(97,97,97); } + .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container { + cursor: auto; } + .mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple { + background: transparent; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-menu__container { + display: block; + margin: 0; + padding: 0; + border: none; + position: absolute; + overflow: visible; + height: 0; + width: 0; + visibility: hidden; + z-index: -1; } + .mdl-menu__container.is-visible, + .mdl-menu__container.is-animating { + z-index: 999; + visibility: visible; } + +.mdl-menu__outline { + display: block; + background: rgb(255,255,255); + margin: 0; + padding: 0; + border: none; + border-radius: 2px; + position: absolute; + top: 0; + left: 0; + overflow: hidden; + opacity: 0; + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + will-change: transform; + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + z-index: -1; } + .mdl-menu__container.is-visible .mdl-menu__outline { + opacity: 1; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + z-index: 999; } + .mdl-menu__outline.mdl-menu--bottom-right { + -webkit-transform-origin: 100% 0; + -ms-transform-origin: 100% 0; + transform-origin: 100% 0; } + .mdl-menu__outline.mdl-menu--top-left { + -webkit-transform-origin: 0 100%; + -ms-transform-origin: 0 100%; + transform-origin: 0 100%; } + .mdl-menu__outline.mdl-menu--top-right { + -webkit-transform-origin: 100% 100%; + -ms-transform-origin: 100% 100%; + transform-origin: 100% 100%; } + +.mdl-menu { + position: absolute; + list-style: none; + top: 0; + left: 0; + height: auto; + width: auto; + min-width: 124px; + padding: 8px 0; + margin: 0; + opacity: 0; + clip: rect(0 0 0 0); + z-index: -1; } + .mdl-menu__container.is-visible .mdl-menu { + opacity: 1; + z-index: 999; } + .mdl-menu.is-animating { + -webkit-transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), clip 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), clip 0.3s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-menu.mdl-menu--bottom-right { + left: auto; + right: 0; } + .mdl-menu.mdl-menu--top-left { + top: auto; + bottom: 0; } + .mdl-menu.mdl-menu--top-right { + top: auto; + left: auto; + bottom: 0; + right: 0; } + .mdl-menu.mdl-menu--unaligned { + top: auto; + left: auto; } + +.mdl-menu__item { + display: block; + border: none; + color: rgba(0,0,0, 0.87); + background-color: transparent; + text-align: left; + margin: 0; + padding: 0 16px; + outline-color: rgb(189,189,189); + position: relative; + overflow: hidden; + font-size: 14px; + font-weight: 400; + line-height: 24px; + letter-spacing: 0; + text-decoration: none; + cursor: pointer; + height: 48px; + line-height: 48px; + white-space: nowrap; + opacity: 0; + -webkit-transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .mdl-menu__container.is-visible .mdl-menu__item { + opacity: 1; } + .mdl-menu__item::-moz-focus-inner { + border: 0; } + .mdl-menu__item[disabled] { + color: rgb(189,189,189); + background-color: transparent; + cursor: auto; } + .mdl-menu__item[disabled]:hover { + background-color: transparent; } + .mdl-menu__item[disabled]:focus { + background-color: transparent; } + .mdl-menu__item[disabled] .mdl-ripple { + background: transparent; } + .mdl-menu__item:hover { + background-color: rgb(238,238,238); } + .mdl-menu__item:focus { + outline: none; + background-color: rgb(238,238,238); } + .mdl-menu__item:active { + background-color: rgb(224,224,224); } + +.mdl-menu__item--ripple-container { + display: block; + height: 100%; + left: 0px; + position: absolute; + top: 0px; + width: 100%; + z-index: 0; + overflow: hidden; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-progress { + display: block; + position: relative; + height: 4px; + width: 500px; } + +.mdl-progress > .bar { + display: block; + position: absolute; + top: 0; + bottom: 0; + width: 0%; + -webkit-transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1); + transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1); } + +.mdl-progress > .progressbar { + background-color: rgb(63,81,181); + z-index: 1; + left: 0; } + +.mdl-progress > .bufferbar { + background-image: -webkit-linear-gradient(left, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), -webkit-linear-gradient(left, rgb(63,81,181), rgb(63,81,181)); + background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); + z-index: 0; + left: 0; } + +.mdl-progress > .auxbar { + right: 0; } + +@supports (-webkit-appearance: none) { + .mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate) > .auxbar { + background-image: -webkit-linear-gradient(left, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), -webkit-linear-gradient(left, rgb(63,81,181), rgb(63,81,181)); + background-image: linear-gradient(to right, rgba(255,255,255, 0.7), rgba(255,255,255, 0.7)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); + -webkit-mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo="); + mask: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo="); } } + +.mdl-progress:not(.mdl-progress__indeterminate) > .auxbar { + background-image: -webkit-linear-gradient(left, rgba(255,255,255, 0.9), rgba(255,255,255, 0.9)), -webkit-linear-gradient(left, rgb(63,81,181), rgb(63,81,181)); + background-image: linear-gradient(to right, rgba(255,255,255, 0.9), rgba(255,255,255, 0.9)), linear-gradient(to right, rgb(63,81,181), rgb(63,81,181)); } + +.mdl-progress.mdl-progress__indeterminate > .bar1 { + background-color: rgb(63,81,181); + -webkit-animation-name: indeterminate1; + animation-name: indeterminate1; + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + +.mdl-progress.mdl-progress__indeterminate > .bar3 { + background-image: none; + background-color: rgb(63,81,181); + -webkit-animation-name: indeterminate2; + animation-name: indeterminate2; + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; } + +@-webkit-keyframes indeterminate1 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 25%; + width: 75%; } + 75% { + left: 100%; + width: 0%; } } + +@keyframes indeterminate1 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 25%; + width: 75%; } + 75% { + left: 100%; + width: 0%; } } + +@-webkit-keyframes indeterminate2 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 0%; + width: 0%; } + 75% { + left: 0%; + width: 25%; } + 100% { + left: 100%; + width: 0%; } } + +@keyframes indeterminate2 { + 0% { + left: 0%; + width: 0%; } + 50% { + left: 0%; + width: 0%; } + 75% { + left: 0%; + width: 25%; } + 100% { + left: 100%; + width: 0%; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-navigation { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + box-sizing: border-box; } + +.mdl-navigation__link { + color: rgb(66,66,66); + text-decoration: none; + font-weight: 500; + font-size: 13px; + margin: 0; } + +.mdl-layout { + width: 100%; + height: 100%; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + overflow-y: auto; + overflow-x: hidden; + position: relative; + -webkit-overflow-scrolling: touch; } + +.mdl-layout.is-small-screen .mdl-layout--large-screen-only { + display: none; } + +.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only { + display: none; } + +.mdl-layout__container { + position: absolute; + width: 100%; + height: 100%; } + +.mdl-layout-title { + display: block; + position: relative; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-size: 20px; + font-weight: 500; + line-height: 1; + letter-spacing: 0.02em; + font-weight: 400; + box-sizing: border-box; } + +.mdl-layout-spacer { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; } + +.mdl-layout__drawer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + width: 240px; + height: 100%; + max-height: 100%; + position: absolute; + top: 0; + left: 0; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + box-sizing: border-box; + border-right: 1px solid rgb(224,224,224); + background: rgb(250,250,250); + -webkit-transform: translateX(-250px); + -ms-transform: translateX(-250px); + transform: translateX(-250px); + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + will-change: transform; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: -webkit-transform; + transition-property: transform; + color: rgb(66,66,66); + overflow: visible; + overflow-y: auto; + z-index: 5; } + .mdl-layout__drawer.is-visible { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); } + .mdl-layout__drawer > * { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + .mdl-layout__drawer > .mdl-layout-title { + line-height: 64px; + padding-left: 40px; } + @media screen and (max-width: 1024px) { + .mdl-layout__drawer > .mdl-layout-title { + line-height: 56px; + padding-left: 16px; } } + .mdl-layout__drawer .mdl-navigation { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; + padding-top: 16px; } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link { + display: block; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + padding: 16px 40px; + margin: 0; + color: #757575; } + @media screen and (max-width: 1024px) { + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link { + padding: 16px 16px; } } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover { + background-color: rgb(224,224,224); } + .mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current { + background-color: rgb(0,0,0); + color: rgb(63,81,181); } + @media screen and (min-width: 1025px) { + .mdl-layout--fixed-drawer > .mdl-layout__drawer { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); } } + +.mdl-layout__drawer-button { + display: block; + position: absolute; + height: 48px; + width: 48px; + border: 0; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + overflow: hidden; + text-align: center; + cursor: pointer; + font-size: 26px; + line-height: 50px; + font-family: Helvetica, Arial, sans-serif; + margin: 10px 12px; + top: 0; + left: 0; + color: rgb(255,255,255); + z-index: 4; } + .mdl-layout__header .mdl-layout__drawer-button { + position: absolute; + color: rgb(255,255,255); + background-color: inherit; } + @media screen and (max-width: 1024px) { + .mdl-layout__header .mdl-layout__drawer-button { + margin: 4px; } } + @media screen and (max-width: 1024px) { + .mdl-layout__drawer-button { + margin: 4px; + color: rgba(0, 0, 0, 0.5); } } + @media screen and (min-width: 1025px) { + .mdl-layout--fixed-drawer > .mdl-layout__drawer-button { + display: none; } } + +.mdl-layout__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + box-sizing: border-box; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + width: 100%; + margin: 0; + padding: 0; + border: none; + min-height: 64px; + max-height: 1000px; + z-index: 3; + background-color: rgb(63,81,181); + color: rgb(255,255,255); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: max-height, box-shadow; + transition-property: max-height, box-shadow; } + @media screen and (max-width: 1024px) { + .mdl-layout__header { + min-height: 56px; } } + .mdl-layout--fixed-drawer:not(.is-small-screen) > .mdl-layout__header { + margin-left: 240px; + width: calc(100% - 240px); } + @media screen and (min-width: 1024px) { + .mdl-layout--fixed-drawer > .mdl-layout__header .mdl-layout__header-row { + padding-left: 40px; } } + .mdl-layout__header > .mdl-layout-icon { + position: absolute; + left: 40px; + top: 16px; + height: 32px; + width: 32px; + overflow: hidden; + z-index: 3; + display: block; } + @media screen and (max-width: 1024px) { + .mdl-layout__header > .mdl-layout-icon { + left: 16px; + top: 12px; } } + .mdl-layout.has-drawer .mdl-layout__header > .mdl-layout-icon { + display: none; } + .mdl-layout__header.is-compact { + max-height: 64px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header.is-compact { + max-height: 56px; } } + .mdl-layout__header.is-compact.has-tabs { + height: 112px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header.is-compact.has-tabs { + min-height: 104px; } } + @media screen and (max-width: 1024px) { + .mdl-layout__header { + display: none; } + .mdl-layout--fixed-header > .mdl-layout__header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; } } + +.mdl-layout__header--transparent.mdl-layout__header--transparent { + background-color: transparent; + box-shadow: none; } + +.mdl-layout__header--seamed { + box-shadow: none; } + +.mdl-layout__header--scroll { + box-shadow: none; } + +.mdl-layout__header--waterfall { + box-shadow: none; + overflow: hidden; } + .mdl-layout__header--waterfall.is-casting-shadow { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-layout__header-row { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + box-sizing: border-box; + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + height: 64px; + margin: 0; + padding: 0 40px 0 80px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header-row { + height: 56px; + padding: 0 16px 0 72px; } } + .mdl-layout__header-row > * { + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; } + .mdl-layout__header--scroll .mdl-layout__header-row { + width: 100%; } + .mdl-layout__header-row .mdl-navigation { + margin: 0; + padding: 0; + height: 64px; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; } + @media screen and (max-width: 1024px) { + .mdl-layout__header-row .mdl-navigation { + height: 56px; } } + .mdl-layout__header-row .mdl-navigation__link { + display: block; + color: rgb(255,255,255); + line-height: 64px; + padding: 0 24px; } + @media screen and (max-width: 1024px) { + .mdl-layout__header-row .mdl-navigation__link { + line-height: 56px; + padding: 0 16px; } } + +.mdl-layout__obfuscator { + background-color: transparent; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 4; + visibility: hidden; + -webkit-transition-property: background-color; + transition-property: background-color; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-layout__drawer.is-visible ~ .mdl-layout__obfuscator { + background-color: rgba(0, 0, 0, 0.5); + visibility: visible; } + +.mdl-layout__content { + -ms-flex: 0 1 auto; + display: inline-block; + overflow-y: auto; + overflow-x: hidden; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + z-index: 1; + -webkit-overflow-scrolling: touch; } + .mdl-layout--fixed-drawer > .mdl-layout__content { + margin-left: 240px; } + .mdl-layout__container.has-scrolling-header .mdl-layout__content { + overflow: visible; } + @media screen and (max-width: 1024px) { + .mdl-layout--fixed-drawer > .mdl-layout__content { + margin-left: 0; } + .mdl-layout__container.has-scrolling-header .mdl-layout__content { + overflow-y: auto; + overflow-x: hidden; } } + +.mdl-layout__tab-bar { + height: 96px; + margin: 0; + width: calc(100% - 112px); + padding: 0 0 0 56px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + background-color: rgb(63,81,181); + overflow-y: hidden; + overflow-x: scroll; } + .mdl-layout__tab-bar::-webkit-scrollbar { + display: none; } + @media screen and (max-width: 1024px) { + .mdl-layout__tab-bar { + width: calc(100% - 60px); + padding: 0 0 0 60px; } } + .mdl-layout--fixed-tabs .mdl-layout__tab-bar { + padding: 0; + overflow: hidden; + width: 100%; } + +.mdl-layout__tab-bar-container { + position: relative; + height: 48px; + width: 100%; + border: none; + margin: 0; + z-index: 2; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + overflow: hidden; } + .mdl-layout__container > .mdl-layout__tab-bar-container { + position: absolute; + top: 0; + left: 0; } + +.mdl-layout__tab-bar-button { + display: inline-block; + position: absolute; + top: 0; + height: 48px; + width: 56px; + z-index: 4; + text-align: center; + background-color: rgb(63,81,181); + color: transparent; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + @media screen and (max-width: 1024px) { + .mdl-layout__tab-bar-button { + display: none; + width: 60px; } } + .mdl-layout--fixed-tabs .mdl-layout__tab-bar-button { + display: none; } + .mdl-layout__tab-bar-button .material-icons { + line-height: 48px; } + .mdl-layout__tab-bar-button.is-active { + color: rgb(255,255,255); } + +.mdl-layout__tab-bar-left-button { + left: 0; } + +.mdl-layout__tab-bar-right-button { + right: 0; } + +.mdl-layout__tab { + margin: 0; + border: none; + padding: 0 24px 0 24px; + float: left; + position: relative; + display: block; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-flex-shrink: 0; + -ms-flex-negative: 0; + flex-shrink: 0; + text-decoration: none; + height: 48px; + line-height: 48px; + text-align: center; + font-weight: 500; + font-size: 14px; + text-transform: uppercase; + color: rgba(255,255,255, 0.6); + overflow: hidden; } + @media screen and (max-width: 1024px) { + .mdl-layout__tab { + padding: 0 12px 0 12px; } } + .mdl-layout--fixed-tabs .mdl-layout__tab { + float: none; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + padding: 0; } + .mdl-layout.is-upgraded .mdl-layout__tab.is-active { + color: rgb(255,255,255); } + .mdl-layout.is-upgraded .mdl-layout__tab.is-active::after { + height: 2px; + width: 100%; + display: block; + content: " "; + bottom: 0; + left: 0; + position: absolute; + background: rgb(255,64,129); + -webkit-animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + -webkit-transition: all 1s cubic-bezier(0.4, 0, 1, 1); + transition: all 1s cubic-bezier(0.4, 0, 1, 1); } + .mdl-layout__tab .mdl-layout__tab-ripple-container { + display: block; + position: absolute; + height: 100%; + width: 100%; + left: 0; + top: 0; + z-index: 1; + overflow: hidden; } + .mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple { + background-color: rgb(255,255,255); } + +.mdl-layout__tab-panel { + display: block; } + .mdl-layout.is-upgraded .mdl-layout__tab-panel { + display: none; } + .mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active { + display: block; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-radio { + position: relative; + font-size: 16px; + line-height: 24px; + display: inline-block; + box-sizing: border-box; + margin: 0; + padding-left: 0; } + .mdl-radio.is-upgraded { + padding-left: 24px; } + +.mdl-radio__button { + line-height: 24px; } + .mdl-radio.is-upgraded .mdl-radio__button { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-radio__outer-circle { + position: absolute; + top: 4px; + left: 0; + display: inline-block; + box-sizing: border-box; + width: 16px; + height: 16px; + margin: 0; + cursor: pointer; + border: 2px solid rgba(0,0,0, 0.54); + border-radius: 50%; + z-index: 2; } + .mdl-radio.is-checked .mdl-radio__outer-circle { + border: 2px solid rgb(63,81,181); } + .mdl-radio.is-disabled .mdl-radio__outer-circle { + border: 2px solid rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-radio__inner-circle { + position: absolute; + z-index: 1; + margin: 0; + top: 8px; + left: 4px; + box-sizing: border-box; + width: 8px; + height: 8px; + cursor: pointer; + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: -webkit-transform; + transition-property: transform; + -webkit-transform: scale3d(0, 0, 0); + transform: scale3d(0, 0, 0); + border-radius: 50%; + background: rgb(63,81,181); } + .mdl-radio.is-checked .mdl-radio__inner-circle { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); } + .mdl-radio.is-disabled .mdl-radio__inner-circle { + background: rgba(0,0,0, 0.26); + cursor: auto; } + .mdl-radio.is-focused .mdl-radio__inner-circle { + box-shadow: 0 0 0px 10px rgba(0, 0, 0, 0.1); } + +.mdl-radio__label { + cursor: pointer; } + .mdl-radio.is-disabled .mdl-radio__label { + color: rgba(0,0,0, 0.26); + cursor: auto; } + +.mdl-radio__ripple-container { + position: absolute; + z-index: 2; + top: -9px; + left: -13px; + box-sizing: border-box; + width: 42px; + height: 42px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); } + .mdl-radio__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + .mdl-radio.is-disabled .mdl-radio__ripple-container { + cursor: auto; } + .mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple { + background: transparent; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +_:-ms-input-placeholder, :root .mdl-slider.mdl-slider.is-upgraded { + -ms-appearance: none; + height: 32px; + margin: 0; } + +.mdl-slider { + width: calc(100% - 40px); + margin: 0 20px; } + .mdl-slider.is-upgraded { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + height: 2px; + background: transparent; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: 0; + padding: 0; + color: rgb(63,81,181); + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + z-index: 1; + cursor: pointer; + /**************************** Tracks ****************************/ + /**************************** Thumbs ****************************/ + /**************************** 0-value ****************************/ + /**************************** Disabled ****************************/ } + .mdl-slider.is-upgraded::-moz-focus-outer { + border: 0; } + .mdl-slider.is-upgraded::-ms-tooltip { + display: none; } + .mdl-slider.is-upgraded::-webkit-slider-runnable-track { + background: transparent; } + .mdl-slider.is-upgraded::-moz-range-track { + background: transparent; + border: none; } + .mdl-slider.is-upgraded::-ms-track { + background: none; + color: transparent; + height: 2px; + width: 100%; + border: none; } + .mdl-slider.is-upgraded::-ms-fill-lower { + padding: 0; + background: linear-gradient(to right, transparent, transparent 16px, rgb(63,81,181) 16px, rgb(63,81,181) 0); } + .mdl-slider.is-upgraded::-ms-fill-upper { + padding: 0; + background: linear-gradient(to left, transparent, transparent 16px, rgba(0,0,0, 0.26) 16px, rgba(0,0,0, 0.26) 0); } + .mdl-slider.is-upgraded::-webkit-slider-thumb { + -webkit-appearance: none; + width: 12px; + height: 12px; + box-sizing: border-box; + border-radius: 50%; + background: rgb(63,81,181); + border: none; + -webkit-transition: -webkit-transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-slider.is-upgraded::-moz-range-thumb { + -moz-appearance: none; + width: 12px; + height: 12px; + box-sizing: border-box; + border-radius: 50%; + background-image: none; + background: rgb(63,81,181); + border: none; } + .mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb { + box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); } + .mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(63,81,181, 0.26); } + .mdl-slider.is-upgraded:active::-webkit-slider-thumb { + background-image: none; + background: rgb(63,81,181); + -webkit-transform: scale(1.5); + transform: scale(1.5); } + .mdl-slider.is-upgraded:active::-moz-range-thumb { + background-image: none; + background: rgb(63,81,181); + transform: scale(1.5); } + .mdl-slider.is-upgraded::-ms-thumb { + width: 32px; + height: 32px; + border: none; + border-radius: 50%; + background: rgb(63,81,181); + -ms-transform: scale(0.375); + transform: scale(0.375); + transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb { + background: radial-gradient(circle closest-side, rgb(63,81,181) 0%, rgb(63,81,181) 37.5%, rgba(63,81,181, 0.26) 37.5%, rgba(63,81,181, 0.26) 100%); + -ms-transform: scale(1); + transform: scale(1); } + .mdl-slider.is-upgraded:active::-ms-thumb { + background: rgb(63,81,181); + -ms-transform: scale(0.5625); + transform: scale(0.5625); } + .mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb { + border: 2px solid rgba(0,0,0, 0.26); + background: transparent; } + .mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb { + border: 2px solid rgba(0,0,0, 0.26); + background: transparent; } + .mdl-slider.is-upgraded.is-lowest-value ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb { + box-shadow: 0 0 0 10px rgba(0,0,0, 0.12); + background: rgba(0,0,0, 0.12); } + .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(0,0,0, 0.12); + background: rgba(0,0,0, 0.12); } + .mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb { + border: 1.6px solid rgba(0,0,0, 0.26); + -webkit-transform: scale(1.5); + transform: scale(1.5); } + .mdl-slider.is-upgraded.is-lowest-value:active ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 9px; } + .mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb { + border: 1.5px solid rgba(0,0,0, 0.26); + transform: scale(1.5); } + .mdl-slider.is-upgraded.is-lowest-value::-ms-thumb { + background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, rgba(0,0,0, 0.26) 66.67%, rgba(0,0,0, 0.26) 100%); } + .mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb { + background: radial-gradient(circle closest-side, rgba(0,0,0, 0.12) 0%, rgba(0,0,0, 0.12) 25%, rgba(0,0,0, 0.26) 25%, rgba(0,0,0, 0.26) 37.5%, rgba(0,0,0, 0.12) 37.5%, rgba(0,0,0, 0.12) 100%); + -ms-transform: scale(1); + transform: scale(1); } + .mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb { + -ms-transform: scale(0.5625); + transform: scale(0.5625); + background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, rgba(0,0,0, 0.26) 77.78%, rgba(0,0,0, 0.26) 100%); } + .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower { + background: transparent; } + .mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper { + margin-left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper { + margin-left: 9px; } + .mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb, + .mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb, + .mdl-slider.is-upgraded:disabled::-webkit-slider-thumb { + -webkit-transform: scale(0.667); + transform: scale(0.667); + background: rgba(0,0,0, 0.26); } + .mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb, + .mdl-slider.is-upgraded:disabled:active::-moz-range-thumb, + .mdl-slider.is-upgraded:disabled::-moz-range-thumb { + transform: scale(0.667); + background: rgba(0,0,0, 0.26); } + .mdl-slider.is-upgraded:disabled ~ +.mdl-slider__background-flex > .mdl-slider__background-lower { + background-color: rgba(0,0,0, 0.26); + left: -6px; } + .mdl-slider.is-upgraded:disabled ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb { + border: 3px solid rgba(0,0,0, 0.26); + background: transparent; + -webkit-transform: scale(0.667); + transform: scale(0.667); } + .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb { + border: 3px solid rgba(0,0,0, 0.26); + background: transparent; + transform: scale(0.667); } + .mdl-slider.is-upgraded.is-lowest-value:disabled:active ~ +.mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; } + .mdl-slider.is-upgraded:disabled:focus::-ms-thumb, + .mdl-slider.is-upgraded:disabled:active::-ms-thumb, + .mdl-slider.is-upgraded:disabled::-ms-thumb { + -ms-transform: scale(0.25); + transform: scale(0.25); + background: rgba(0,0,0, 0.26); } + .mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb, + .mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb { + -ms-transform: scale(0.25); + transform: scale(0.25); + background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, rgba(0,0,0, 0.26) 50%, rgba(0,0,0, 0.26) 100%); } + .mdl-slider.is-upgraded:disabled::-ms-fill-lower { + margin-right: 6px; + background: linear-gradient(to right, transparent, transparent 25px, rgba(0,0,0, 0.26) 25px, rgba(0,0,0, 0.26) 0); } + .mdl-slider.is-upgraded:disabled::-ms-fill-upper { + margin-left: 6px; } + .mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper { + margin-left: 6px; } + +.mdl-slider__ie-container { + height: 18px; + overflow: visible; + border: none; + margin: none; + padding: none; } + +.mdl-slider__container { + height: 18px; + position: relative; + background: none; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; } + +.mdl-slider__background-flex { + background: transparent; + position: absolute; + height: 2px; + width: calc(100% - 52px); + top: 50%; + left: 0; + margin: 0 26px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + border: 0; + padding: 0; + -webkit-transform: translate(0, -1px); + -ms-transform: translate(0, -1px); + transform: translate(0, -1px); } + +.mdl-slider__background-lower { + background: rgb(63,81,181); + -webkit-box-flex: 0; + -webkit-flex: 0; + -ms-flex: 0; + flex: 0; + position: relative; + border: 0; + padding: 0; } + +.mdl-slider__background-upper { + background: rgba(0,0,0, 0.26); + -webkit-box-flex: 0; + -webkit-flex: 0; + -ms-flex: 0; + flex: 0; + position: relative; + border: 0; + padding: 0; + -webkit-transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1); + transition: left 0.18s cubic-bezier(0.4, 0, 0.2, 1); } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-spinner { + display: inline-block; + position: relative; + width: 28px; + height: 28px; } + .mdl-spinner:not(.is-upgraded).is-active:after { + content: "Loading..."; } + .mdl-spinner.is-upgraded.is-active { + -webkit-animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite; + animation: mdl-spinner__container-rotate 1568.23529412ms linear infinite; } + +@-webkit-keyframes mdl-spinner__container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes mdl-spinner__container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.mdl-spinner__layer { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; } + +.mdl-spinner__layer-1 { + border-color: rgb(66,165,245); } + .mdl-spinner--single-color .mdl-spinner__layer-1 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-1 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +.mdl-spinner__layer-2 { + border-color: rgb(244,67,54); } + .mdl-spinner--single-color .mdl-spinner__layer-2 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-2 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +.mdl-spinner__layer-3 { + border-color: rgb(253,216,53); } + .mdl-spinner--single-color .mdl-spinner__layer-3 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-3 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +.mdl-spinner__layer-4 { + border-color: rgb(76,175,80); } + .mdl-spinner--single-color .mdl-spinner__layer-4 { + border-color: rgb(63,81,181); } + .mdl-spinner.is-active .mdl-spinner__layer-4 { + -webkit-animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +@-webkit-keyframes mdl-spinner__fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); } + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); } + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); } + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); } + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); } + to { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); } } + +@keyframes mdl-spinner__fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); } + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); } + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); } + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); } + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); } + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); } + to { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); } } + +/** +* HACK: Even though the intention is to have the current .mdl-spinner__layer-N +* at `opacity: 1`, we set it to `opacity: 0.99` instead since this forces Chrome +* to do proper subpixel rendering for the elements being animated. This is +* especially visible in Chrome 39 on Ubuntu 14.04. See: +* +* - https://github.com/Polymer/paper-spinner/issues/9 +* - https://code.google.com/p/chromium/issues/detail?id=436255 +*/ +@-webkit-keyframes mdl-spinner__layer-1-fade-in-out { + from { + opacity: 0.99; } + 25% { + opacity: 0.99; } + 26% { + opacity: 0; } + 89% { + opacity: 0; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0.99; } } +@keyframes mdl-spinner__layer-1-fade-in-out { + from { + opacity: 0.99; } + 25% { + opacity: 0.99; } + 26% { + opacity: 0; } + 89% { + opacity: 0; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0.99; } } + +@-webkit-keyframes mdl-spinner__layer-2-fade-in-out { + from { + opacity: 0; } + 15% { + opacity: 0; } + 25% { + opacity: 0.99; } + 50% { + opacity: 0.99; } + 51% { + opacity: 0; } } + +@keyframes mdl-spinner__layer-2-fade-in-out { + from { + opacity: 0; } + 15% { + opacity: 0; } + 25% { + opacity: 0.99; } + 50% { + opacity: 0.99; } + 51% { + opacity: 0; } } + +@-webkit-keyframes mdl-spinner__layer-3-fade-in-out { + from { + opacity: 0; } + 40% { + opacity: 0; } + 50% { + opacity: 0.99; } + 75% { + opacity: 0.99; } + 76% { + opacity: 0; } } + +@keyframes mdl-spinner__layer-3-fade-in-out { + from { + opacity: 0; } + 40% { + opacity: 0; } + 50% { + opacity: 0.99; } + 75% { + opacity: 0.99; } + 76% { + opacity: 0; } } + +@-webkit-keyframes mdl-spinner__layer-4-fade-in-out { + from { + opacity: 0; } + 65% { + opacity: 0; } + 75% { + opacity: 0.99; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0; } } + +@keyframes mdl-spinner__layer-4-fade-in-out { + from { + opacity: 0; } + 65% { + opacity: 0; } + 75% { + opacity: 0.99; } + 90% { + opacity: 0.99; } + 100% { + opacity: 0; } } + +/** +* Patch the gap that appear between the two adjacent +* div.mdl-spinner__circle-clipper while the spinner is rotating +* (appears on Chrome 38, Safari 7.1, and IE 11). +* +* Update: the gap no longer appears on Chrome when .mdl-spinner__layer-N's +* opacity is 0.99, but still does on Safari and IE. +*/ +.mdl-spinner__gap-patch { + position: absolute; + box-sizing: border-box; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit; } + .mdl-spinner__gap-patch .mdl-spinner__circle { + width: 1000%; + left: -450%; } + +.mdl-spinner__circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit; } + .mdl-spinner__circle-clipper .mdl-spinner__circle { + width: 200%; } + +.mdl-spinner__circle { + box-sizing: border-box; + height: 100%; + border-width: 3px; + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; } + .mdl-spinner__left .mdl-spinner__circle { + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + -ms-transform: rotate(129deg); + transform: rotate(129deg); } + .mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle { + -webkit-animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + .mdl-spinner__right .mdl-spinner__circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + -ms-transform: rotate(-129deg); + transform: rotate(-129deg); } + .mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle { + -webkit-animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: mdl-spinner__right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; } + +@-webkit-keyframes mdl-spinner__left-spin { + from { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); } + to { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } } + +@keyframes mdl-spinner__left-spin { + from { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); } + to { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); } } + +@-webkit-keyframes mdl-spinner__right-spin { + from { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); } + to { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } } + +@keyframes mdl-spinner__right-spin { + from { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); } + to { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-switch { + position: relative; + z-index: 1; + vertical-align: middle; + display: inline-block; + box-sizing: border-box; + width: 100%; + height: 24px; + margin: 0; + padding: 0; + overflow: visible; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .mdl-switch.is-upgraded { + padding-left: 28px; } + +.mdl-switch__input { + line-height: 24px; } + .mdl-switch.is-upgraded .mdl-switch__input { + position: absolute; + width: 0; + height: 0; + margin: 0; + padding: 0; + opacity: 0; + -ms-appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + border: none; } + +.mdl-switch__track { + background: rgba(0,0,0, 0.26); + position: absolute; + left: 0; + top: 5px; + height: 14px; + width: 36px; + border-radius: 14px; + cursor: pointer; } + .mdl-switch.is-checked .mdl-switch__track { + background: rgba(63,81,181, 0.5); } + .mdl-switch.is-disabled .mdl-switch__track { + background: rgba(0,0,0, 0.12); + cursor: auto; } + +.mdl-switch__thumb { + background: rgb(250,250,250); + position: absolute; + left: 0; + top: 2px; + height: 20px; + width: 20px; + border-radius: 50%; + cursor: pointer; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); + -webkit-transition-duration: 0.28s; + transition-duration: 0.28s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + -webkit-transition-property: left; + transition-property: left; } + .mdl-switch.is-checked .mdl-switch__thumb { + background: rgb(63,81,181); + left: 16px; + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); } + .mdl-switch.is-disabled .mdl-switch__thumb { + background: rgb(189,189,189); + cursor: auto; } + +.mdl-switch__focus-helper { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-4px, -4px); + -ms-transform: translate(-4px, -4px); + transform: translate(-4px, -4px); + display: inline-block; + box-sizing: border-box; + width: 8px; + height: 8px; + border-radius: 50%; + background-color: transparent; } + .mdl-switch.is-focused .mdl-switch__focus-helper { + box-shadow: 0 0 0px 20px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1); } + .mdl-switch.is-focused.is-checked .mdl-switch__focus-helper { + box-shadow: 0 0 0px 20px rgba(63,81,181, 0.26); + background-color: rgba(63,81,181, 0.26); } + +.mdl-switch__label { + position: relative; + cursor: pointer; + font-size: 16px; + line-height: 24px; + margin: 0; + left: 24px; } + .mdl-switch.is-disabled .mdl-switch__label { + color: rgb(189,189,189); + cursor: auto; } + +.mdl-switch__ripple-container { + position: absolute; + z-index: 2; + top: -12px; + left: -14px; + box-sizing: border-box; + width: 48px; + height: 48px; + border-radius: 50%; + cursor: pointer; + overflow: hidden; + -webkit-mask-image: -webkit-radial-gradient(circle, white, black); + -webkit-transition-duration: 0.40s; + transition-duration: 0.40s; + -webkit-transition-timing-function: step-end; + transition-timing-function: step-end; + -webkit-transition-property: left; + transition-property: left; } + .mdl-switch__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + .mdl-switch.is-disabled .mdl-switch__ripple-container { + cursor: auto; } + .mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple { + background: transparent; } + .mdl-switch.is-checked .mdl-switch__ripple-container { + cursor: auto; + left: 2px; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-tabs { + display: block; + width: 100%; } + +.mdl-tabs__tab-bar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-align-content: space-between; + -ms-flex-line-pack: justify; + align-content: space-between; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + height: 48px; + padding: 0 0 0 0; + margin: 0; + border-bottom: 1px solid rgb(224,224,224); } + +.mdl-tabs__tab { + margin: 0; + border: none; + padding: 0 24px 0 24px; + float: left; + position: relative; + display: block; + color: red; + text-decoration: none; + height: 48px; + line-height: 48px; + text-align: center; + font-weight: 500; + font-size: 14px; + text-transform: uppercase; + color: rgba(0,0,0, 0.54); + overflow: hidden; } + .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active { + color: rgba(0,0,0, 0.87); } + .mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after { + height: 2px; + width: 100%; + display: block; + content: " "; + bottom: 0px; + left: 0px; + position: absolute; + background: rgb(63,81,181); + -webkit-animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + animation: border-expand 0.2s cubic-bezier(0.4, 0, 0.4, 1) 0.01s alternate forwards; + -webkit-transition: all 1s cubic-bezier(0.4, 0, 1, 1); + transition: all 1s cubic-bezier(0.4, 0, 1, 1); } + .mdl-tabs__tab .mdl-tabs__ripple-container { + display: block; + position: absolute; + height: 100%; + width: 100%; + left: 0px; + top: 0px; + z-index: 1; + overflow: hidden; } + .mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple { + background: rgb(63,81,181); } + +.mdl-tabs__panel { + display: block; } + .mdl-tabs.is-upgraded .mdl-tabs__panel { + display: none; } + .mdl-tabs.is-upgraded .mdl-tabs__panel.is-active { + display: block; } + +@-webkit-keyframes border-expand { + 0% { + opacity: 0; + width: 0; } + 100% { + opacity: 1; + width: 100%; } } + +@keyframes border-expand { + 0% { + opacity: 0; + width: 0; } + 100% { + opacity: 1; + width: 100%; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-textfield { + position: relative; + font-size: 16px; + display: inline-block; + box-sizing: border-box; + width: 300px; + max-width: 100%; + margin: 0; + padding: 20px 0; } + .mdl-textfield .mdl-button { + position: absolute; + bottom: 20px; } + +.mdl-textfield--align-right { + text-align: right; } + +.mdl-textfield--full-width { + width: 100%; } + +.mdl-textfield--expandable { + min-width: 32px; + width: auto; + min-height: 32px; } + +.mdl-textfield__input { + border: none; + border-bottom: 1px solid rgba(0,0,0, 0.12); + display: block; + font-size: 16px; + margin: 0; + padding: 4px 0; + width: 100%; + text-align: left; + color: inherit; } + .mdl-textfield.is-focused .mdl-textfield__input { + outline: none; } + .mdl-textfield.is-invalid .mdl-textfield__input { + border-color: rgb(222, 50, 38); + box-shadow: none; } + .mdl-textfield.is-disabled .mdl-textfield__input { + background-color: transparent; + border-bottom: 1px dotted rgba(0,0,0, 0.12); + color: rgba(0,0,0, 0.26); } + +.mdl-textfield textarea.mdl-textfield__input { + display: block; } + +.mdl-textfield__label { + bottom: 0; + color: rgba(0,0,0, 0.26); + font-size: 16px; + left: 0; + right: 0; + pointer-events: none; + position: absolute; + display: block; + top: 24px; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-align: left; } + .mdl-textfield.is-dirty .mdl-textfield__label { + visibility: hidden; } + .mdl-textfield--floating-label .mdl-textfield__label { + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } + .mdl-textfield.is-disabled.is-disabled .mdl-textfield__label { + color: rgba(0,0,0, 0.26); } + .mdl-textfield--floating-label.is-focused .mdl-textfield__label, + .mdl-textfield--floating-label.is-dirty .mdl-textfield__label { + color: rgb(63,81,181); + font-size: 12px; + top: 4px; + visibility: visible; } + .mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label, + .mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label { + top: -16px; } + .mdl-textfield--floating-label.is-invalid .mdl-textfield__label { + color: rgb(222, 50, 38); + font-size: 12px; } + .mdl-textfield__label:after { + background-color: rgb(63,81,181); + bottom: 20px; + content: ''; + height: 2px; + left: 45%; + position: absolute; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + visibility: hidden; + width: 10px; } + .mdl-textfield.is-focused .mdl-textfield__label:after { + left: 0; + visibility: visible; + width: 100%; } + .mdl-textfield.is-invalid .mdl-textfield__label:after { + background-color: rgb(222, 50, 38); } + +.mdl-textfield__error { + color: rgb(222, 50, 38); + position: absolute; + font-size: 12px; + margin-top: 3px; + visibility: hidden; + display: block; } + .mdl-textfield.is-invalid .mdl-textfield__error { + visibility: visible; } + +.mdl-textfield__expandable-holder { + display: inline-block; + position: relative; + margin-left: 32px; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; + -webkit-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + display: inline-block; + max-width: 0.1px; } + .mdl-textfield.is-focused .mdl-textfield__expandable-holder, .mdl-textfield.is-dirty .mdl-textfield__expandable-holder { + max-width: 600px; } + .mdl-textfield__expandable-holder .mdl-textfield__label:after { + bottom: 0; } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-tooltip { + -webkit-transform: scale(0); + -ms-transform: scale(0); + transform: scale(0); + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + will-change: transform; + z-index: 999; + background: rgba(97,97,97, 0.9); + border-radius: 2px; + color: rgb(255,255,255); + display: inline-block; + font-size: 10px; + font-weight: 500; + line-height: 14px; + max-width: 170px; + position: fixed; + top: -500px; + left: -500px; + padding: 8px; + text-align: center; } + +.mdl-tooltip.is-active { + -webkit-animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards; + animation: pulse 200ms cubic-bezier(0, 0, 0.2, 1) forwards; } + +.mdl-tooltip--large { + line-height: 14px; + font-size: 14px; + padding: 16px; } + +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + opacity: 0; } + 50% { + -webkit-transform: scale(0.99); + transform: scale(0.99); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + visibility: visible; } } + +@keyframes pulse { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + opacity: 0; } + 50% { + -webkit-transform: scale(0.99); + transform: scale(0.99); } + 100% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + visibility: visible; } } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* Typography */ +/* Shadows */ +/* Animations */ +.mdl-shadow--2dp { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } + +.mdl-shadow--3dp { + box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 3px 3px -2px rgba(0, 0, 0, 0.2), 0 1px 8px 0 rgba(0, 0, 0, 0.12); } + +.mdl-shadow--4dp { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.2); } + +.mdl-shadow--6dp { + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.2); } + +.mdl-shadow--8dp { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); } + +.mdl-shadow--16dp { + box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2); } + +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* +* NOTE: Some rules here are applied using duplicate selectors. +* This is on purpose to increase their specificity when applied. +* For example: `.mdl-cell--1-col-phone.mdl-cell--1-col-phone` +*/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/*------------------------------------* $CONTENTS +\*------------------------------------*/ +/** + * STYLE GUIDE VARIABLES------------------Declarations of Sass variables + * -----Typography + * -----Colors + * -----Textfield + * -----Switch + * -----Spinner + * -----Radio + * -----Menu + * -----List + * -----Layout + * -----Icon toggles + * -----Footer + * -----Column + * -----Checkbox + * -----Card + * -----Button + * -----Animation + * -----Progress + * -----Badge + * -----Shadows + * -----Grid + * -----Data table + */ +/* ========== TYPOGRAPHY ========== */ +/* We're splitting fonts into "preferred" and "performance" in order to optimize + page loading. For important text, such as the body, we want it to load + immediately and not wait for the web font load, whereas for other sections, + such as headers and titles, we're OK with things taking a bit longer to load. + We do have some optional classes and parameters in the mixins, in case you + definitely want to make sure you're using the preferred font and don't mind + the performance hit. + We should be able to improve on this once CSS Font Loading L3 becomes more + widely available. +*/ +/* ========== COLORS ========== */ +/** +* +* Material design color palettes. +* @see http://www.google.com/design/spec/style/color.html +* +**/ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color Palettes ========== */ +/* colors.scss */ +/** + * Copyright 2015 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* ========== Color & Themes ========== */ +/* ========== Typography ========== */ +/* ========== Components ========== */ +/* ========== Standard Buttons ========== */ +/* ========== Icon Toggles ========== */ +/* ========== Radio Buttons ========== */ +/* ========== Ripple effect ========== */ +/* ========== Layout ========== */ +/* ========== Content Tabs ========== */ +/* ========== Checkboxes ========== */ +/* ========== Switches ========== */ +/* ========== Spinner ========== */ +/* ========== Text fields ========== */ +/* ========== Card ========== */ +/* ========== Sliders ========== */ +/* ========== Progress ========== */ +/* ========== List ========== */ +/* ========== Item ========== */ +/* ========== Dropdown menu ========== */ +/* ========== Tooltips ========== */ +/* ========== Footer ========== */ +/* TEXTFIELD */ +/* SWITCH */ +/* SPINNER */ +/* RADIO */ +/* MENU */ +/* LIST */ +/* LAYOUT */ +/* ICON TOGGLE */ +/* FOOTER */ +/*mega-footer*/ +/*mini-footer*/ +/* CHECKBOX */ +/* CARD */ +/* Card dimensions */ +/* Cover image */ +/* BUTTON */ +/** + * + * Dimensions + * + */ +/* ANIMATION */ +/* PROGRESS */ +/* BADGE */ +/* SHADOWS */ +/* GRID */ +/* DATA TABLE */ +/* TOOLTIP */ +.mdl-grid { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin: 0 auto 0 auto; + -webkit-box-align: stretch; + -webkit-align-items: stretch; + -ms-flex-align: stretch; + align-items: stretch; } + .mdl-grid.mdl-grid--no-spacing { + padding: 0; } + +.mdl-cell { + box-sizing: border-box; } + +.mdl-cell--top { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; } + +.mdl-cell--middle { + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; } + +.mdl-cell--bottom { + -webkit-align-self: flex-end; + -ms-flex-item-align: end; + align-self: flex-end; } + +.mdl-cell--stretch { + -webkit-align-self: stretch; + -ms-flex-item-align: stretch; + align-self: stretch; } + +.mdl-grid.mdl-grid--no-spacing > .mdl-cell { + margin: 0; } + +@media (max-width: 479px) { + .mdl-grid { + padding: 8px; } + .mdl-cell { + margin: 8px; + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell { + width: 100%; } + .mdl-cell--hide-phone { + display: none !important; } + .mdl-cell--1-col, + .mdl-cell--1-col-phone.mdl-cell--1-col-phone { + width: calc(25% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--1-col, + .mdl-grid--no-spacing > .mdl-cell--1-col-phone.mdl-cell--1-col-phone { + width: 25%; } + .mdl-cell--2-col, + .mdl-cell--2-col-phone.mdl-cell--2-col-phone { + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--2-col, + .mdl-grid--no-spacing > .mdl-cell--2-col-phone.mdl-cell--2-col-phone { + width: 50%; } + .mdl-cell--3-col, + .mdl-cell--3-col-phone.mdl-cell--3-col-phone { + width: calc(75% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--3-col, + .mdl-grid--no-spacing > .mdl-cell--3-col-phone.mdl-cell--3-col-phone { + width: 75%; } + .mdl-cell--4-col, + .mdl-cell--4-col-phone.mdl-cell--4-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--4-col, + .mdl-grid--no-spacing > .mdl-cell--4-col-phone.mdl-cell--4-col-phone { + width: 100%; } + .mdl-cell--5-col, + .mdl-cell--5-col-phone.mdl-cell--5-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--5-col, + .mdl-grid--no-spacing > .mdl-cell--5-col-phone.mdl-cell--5-col-phone { + width: 100%; } + .mdl-cell--6-col, + .mdl-cell--6-col-phone.mdl-cell--6-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--6-col, + .mdl-grid--no-spacing > .mdl-cell--6-col-phone.mdl-cell--6-col-phone { + width: 100%; } + .mdl-cell--7-col, + .mdl-cell--7-col-phone.mdl-cell--7-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--7-col, + .mdl-grid--no-spacing > .mdl-cell--7-col-phone.mdl-cell--7-col-phone { + width: 100%; } + .mdl-cell--8-col, + .mdl-cell--8-col-phone.mdl-cell--8-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--8-col, + .mdl-grid--no-spacing > .mdl-cell--8-col-phone.mdl-cell--8-col-phone { + width: 100%; } + .mdl-cell--9-col, + .mdl-cell--9-col-phone.mdl-cell--9-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--9-col, + .mdl-grid--no-spacing > .mdl-cell--9-col-phone.mdl-cell--9-col-phone { + width: 100%; } + .mdl-cell--10-col, + .mdl-cell--10-col-phone.mdl-cell--10-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--10-col, + .mdl-grid--no-spacing > .mdl-cell--10-col-phone.mdl-cell--10-col-phone { + width: 100%; } + .mdl-cell--11-col, + .mdl-cell--11-col-phone.mdl-cell--11-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--11-col, + .mdl-grid--no-spacing > .mdl-cell--11-col-phone.mdl-cell--11-col-phone { + width: 100%; } + .mdl-cell--12-col, + .mdl-cell--12-col-phone.mdl-cell--12-col-phone { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--12-col, + .mdl-grid--no-spacing > .mdl-cell--12-col-phone.mdl-cell--12-col-phone { + width: 100%; } } + +@media (min-width: 480px) and (max-width: 839px) { + .mdl-grid { + padding: 8px; } + .mdl-cell { + margin: 8px; + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell { + width: 50%; } + .mdl-cell--hide-tablet { + display: none !important; } + .mdl-cell--1-col, + .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet { + width: calc(12.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--1-col, + .mdl-grid--no-spacing > .mdl-cell--1-col-tablet.mdl-cell--1-col-tablet { + width: 12.5%; } + .mdl-cell--2-col, + .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet { + width: calc(25% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--2-col, + .mdl-grid--no-spacing > .mdl-cell--2-col-tablet.mdl-cell--2-col-tablet { + width: 25%; } + .mdl-cell--3-col, + .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet { + width: calc(37.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--3-col, + .mdl-grid--no-spacing > .mdl-cell--3-col-tablet.mdl-cell--3-col-tablet { + width: 37.5%; } + .mdl-cell--4-col, + .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet { + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--4-col, + .mdl-grid--no-spacing > .mdl-cell--4-col-tablet.mdl-cell--4-col-tablet { + width: 50%; } + .mdl-cell--5-col, + .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet { + width: calc(62.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--5-col, + .mdl-grid--no-spacing > .mdl-cell--5-col-tablet.mdl-cell--5-col-tablet { + width: 62.5%; } + .mdl-cell--6-col, + .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet { + width: calc(75% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--6-col, + .mdl-grid--no-spacing > .mdl-cell--6-col-tablet.mdl-cell--6-col-tablet { + width: 75%; } + .mdl-cell--7-col, + .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet { + width: calc(87.5% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--7-col, + .mdl-grid--no-spacing > .mdl-cell--7-col-tablet.mdl-cell--7-col-tablet { + width: 87.5%; } + .mdl-cell--8-col, + .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--8-col, + .mdl-grid--no-spacing > .mdl-cell--8-col-tablet.mdl-cell--8-col-tablet { + width: 100%; } + .mdl-cell--9-col, + .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--9-col, + .mdl-grid--no-spacing > .mdl-cell--9-col-tablet.mdl-cell--9-col-tablet { + width: 100%; } + .mdl-cell--10-col, + .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--10-col, + .mdl-grid--no-spacing > .mdl-cell--10-col-tablet.mdl-cell--10-col-tablet { + width: 100%; } + .mdl-cell--11-col, + .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--11-col, + .mdl-grid--no-spacing > .mdl-cell--11-col-tablet.mdl-cell--11-col-tablet { + width: 100%; } + .mdl-cell--12-col, + .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--12-col, + .mdl-grid--no-spacing > .mdl-cell--12-col-tablet.mdl-cell--12-col-tablet { + width: 100%; } } + +@media (min-width: 840px) { + .mdl-grid { + padding: 8px; } + .mdl-cell { + margin: 8px; + width: calc(33.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell { + width: 33.3333333333%; } + .mdl-cell--hide-desktop { + display: none !important; } + .mdl-cell--1-col, + .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop { + width: calc(8.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--1-col, + .mdl-grid--no-spacing > .mdl-cell--1-col-desktop.mdl-cell--1-col-desktop { + width: 8.3333333333%; } + .mdl-cell--2-col, + .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop { + width: calc(16.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--2-col, + .mdl-grid--no-spacing > .mdl-cell--2-col-desktop.mdl-cell--2-col-desktop { + width: 16.6666666667%; } + .mdl-cell--3-col, + .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop { + width: calc(25% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--3-col, + .mdl-grid--no-spacing > .mdl-cell--3-col-desktop.mdl-cell--3-col-desktop { + width: 25%; } + .mdl-cell--4-col, + .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop { + width: calc(33.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--4-col, + .mdl-grid--no-spacing > .mdl-cell--4-col-desktop.mdl-cell--4-col-desktop { + width: 33.3333333333%; } + .mdl-cell--5-col, + .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop { + width: calc(41.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--5-col, + .mdl-grid--no-spacing > .mdl-cell--5-col-desktop.mdl-cell--5-col-desktop { + width: 41.6666666667%; } + .mdl-cell--6-col, + .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop { + width: calc(50% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--6-col, + .mdl-grid--no-spacing > .mdl-cell--6-col-desktop.mdl-cell--6-col-desktop { + width: 50%; } + .mdl-cell--7-col, + .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop { + width: calc(58.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--7-col, + .mdl-grid--no-spacing > .mdl-cell--7-col-desktop.mdl-cell--7-col-desktop { + width: 58.3333333333%; } + .mdl-cell--8-col, + .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop { + width: calc(66.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--8-col, + .mdl-grid--no-spacing > .mdl-cell--8-col-desktop.mdl-cell--8-col-desktop { + width: 66.6666666667%; } + .mdl-cell--9-col, + .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop { + width: calc(75% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--9-col, + .mdl-grid--no-spacing > .mdl-cell--9-col-desktop.mdl-cell--9-col-desktop { + width: 75%; } + .mdl-cell--10-col, + .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop { + width: calc(83.3333333333% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--10-col, + .mdl-grid--no-spacing > .mdl-cell--10-col-desktop.mdl-cell--10-col-desktop { + width: 83.3333333333%; } + .mdl-cell--11-col, + .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop { + width: calc(91.6666666667% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--11-col, + .mdl-grid--no-spacing > .mdl-cell--11-col-desktop.mdl-cell--11-col-desktop { + width: 91.6666666667%; } + .mdl-cell--12-col, + .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop { + width: calc(100% - 16px); } + .mdl-grid--no-spacing > .mdl-cell--12-col, + .mdl-grid--no-spacing > .mdl-cell--12-col-desktop.mdl-cell--12-col-desktop { + width: 100%; } } diff --git a/public/vendor/mdl/mdl.min.css b/public/vendor/mdl/mdl.min.css new file mode 100644 index 0000000000..3815742333 --- /dev/null +++ b/public/vendor/mdl/mdl.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.mdl-button,.mdl-button .material-icons,.mdl-checkbox,audio,canvas,iframe,img,svg,video{vertical-align:middle}.visuallyhidden,hr{border:0;height:1px}.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:112px;font-weight:300;line-height:1;letter-spacing:-.04em}.mdl-typography--display-3,.mdl-typography--display-4,.mdl-typography--display-4-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif}.mdl-card,.mdl-card__media,.mdl-card__title{box-sizing:border-box}.mdl-badge[data-badge]:after,.mdl-card,.mdl-layout,.mdl-layout__drawer,.mdl-layout__header{-webkit-box-direction:normal}::-moz-selection{background:#b3d4fc;text-shadow:none}::selection{background:#b3d4fc;text-shadow:none}hr{display:block;border-top:1px solid #ccc;margin:1em 0;padding:0}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}.browserupgrade{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.hidden{display:none!important}.visuallyhidden{clip:rect(0 0 0 0);margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}body,html{width:100%}.invisible{visibility:hidden}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before,:first-letter,:first-line{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.mdl-accordion,.mdl-button,.mdl-card,.mdl-checkbox,.mdl-dropdown-menu,.mdl-icon-toggle,.mdl-item,.mdl-radio,.mdl-slider,.mdl-switch,.mdl-tabs__tab,a{-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:rgba(255,255,255,0)}html{height:100%;-ms-touch-action:manipulation;touch-action:manipulation}body{min-height:100%;margin:0}main{display:block}[hidden]{display:none!important}.mdl-typography--display-4-color-contrast{opacity:.54}.mdl-typography--display-3,.mdl-typography--display-3-color-contrast{font-size:56px;font-weight:400;line-height:1.35;letter-spacing:-.02em}.mdl-typography--display-3-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;opacity:.54}.mdl-typography--display-2,.mdl-typography--display-2-color-contrast{font-weight:400;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:45px;line-height:48px}.mdl-typography--display-2-color-contrast{opacity:.54}.mdl-typography--display-1{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:34px;font-weight:400;line-height:40px}.mdl-typography--display-1-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:34px;font-weight:400;line-height:40px;opacity:.54}.mdl-typography--headline,.mdl-typography--headline-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:24px;font-weight:400;line-height:32px;-moz-osx-font-smoothing:grayscale}.mdl-typography--headline-color-contrast{opacity:.87}.mdl-typography--title,.mdl-typography--title-color-contrast{font-size:20px;font-weight:500;line-height:1;letter-spacing:.02em}.mdl-typography--title{font-family:Roboto,Helvetica,Arial,sans-serif}.mdl-typography--title-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;opacity:.87}.mdl-typography--subhead,.mdl-typography--subhead-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;line-height:24px;font-size:16px;font-weight:400;letter-spacing:.04em}.mdl-typography--subhead-color-contrast{opacity:.87}.mdl-typography--body-2{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0}.mdl-typography--body-2-color-contrast{font-size:14px;font-weight:700;line-height:24px;letter-spacing:0;opacity:.87}.mdl-typography--body-1,.mdl-typography--body-1-color-contrast{line-height:24px;letter-spacing:0;font-size:14px;font-weight:400}.mdl-typography--body-1-color-contrast{opacity:.87}.mdl-typography--body-2-force-preferred-font{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0}.mdl-typography--body-2-force-preferred-font-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;line-height:24px;letter-spacing:0;opacity:.87}.mdl-typography--body-1-force-preferred-font,.mdl-typography--body-1-force-preferred-font-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:24px;letter-spacing:0}.mdl-typography--body-1-force-preferred-font-color-contrast{opacity:.87}.mdl-typography--caption,.mdl-typography--caption-color-contrast,.mdl-typography--caption-force-preferred-font,.mdl-typography--caption-force-preferred-font-color-contrast{font-size:12px;font-weight:400;line-height:1;letter-spacing:0}.mdl-typography--caption-force-preferred-font{font-family:Roboto,Helvetica,Arial,sans-serif}.mdl-typography--caption-color-contrast{opacity:.54}.mdl-typography--caption-force-preferred-font-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;opacity:.54}.mdl-typography--button,.mdl-typography--button-color-contrast,.mdl-typography--menu,.mdl-typography--menu-color-contrast{font-family:Roboto,Helvetica,Arial,sans-serif;letter-spacing:0;font-weight:500;font-size:14px;line-height:1}.mdl-typography--menu-color-contrast{opacity:.87}.mdl-typography--button{text-transform:uppercase}.mdl-typography--button-color-contrast{text-transform:uppercase;opacity:.87}.mdl-typography--text-left{text-align:left}.mdl-typography--text-right{text-align:right}.mdl-typography--text-center{text-align:center}.mdl-typography--text-justify{text-align:justify}.mdl-typography--text-nowrap{white-space:nowrap}.mdl-typography--text-lowercase{text-transform:lowercase}.mdl-typography--text-uppercase{text-transform:uppercase}.mdl-typography--text-capitalize{text-transform:capitalize}.mdl-button,.mdl-layout__tab,.mdl-tabs__tab{text-decoration:none;text-transform:uppercase}.mdl-typography--font-thin{font-weight:200!important}.mdl-typography--font-light{font-weight:300!important}.mdl-typography--font-regular{font-weight:400!important}.mdl-typography--font-medium{font-weight:500!important}.mdl-typography--font-bold{font-weight:700!important}.mdl-typography--font-black{font-weight:900!important}.mdl-color-text--red{color:#f44336!important}.mdl-color--red{background-color:#f44336!important}.mdl-color-text--red-50{color:#ffebee!important}.mdl-color--red-50{background-color:#ffebee!important}.mdl-color-text--red-100{color:#ffcdd2!important}.mdl-color--red-100{background-color:#ffcdd2!important}.mdl-color-text--red-200{color:#ef9a9a!important}.mdl-color--red-200{background-color:#ef9a9a!important}.mdl-color-text--red-300{color:#e57373!important}.mdl-color--red-300{background-color:#e57373!important}.mdl-color-text--red-400{color:#ef5350!important}.mdl-color--red-400{background-color:#ef5350!important}.mdl-color-text--red-500{color:#f44336!important}.mdl-color--red-500{background-color:#f44336!important}.mdl-color-text--red-600{color:#e53935!important}.mdl-color--red-600{background-color:#e53935!important}.mdl-color-text--red-700{color:#d32f2f!important}.mdl-color--red-700{background-color:#d32f2f!important}.mdl-color-text--red-800{color:#c62828!important}.mdl-color--red-800{background-color:#c62828!important}.mdl-color-text--red-900{color:#b71c1c!important}.mdl-color--red-900{background-color:#b71c1c!important}.mdl-color-text--red-A100{color:#ff8a80!important}.mdl-color--red-A100{background-color:#ff8a80!important}.mdl-color-text--red-A200{color:#ff5252!important}.mdl-color--red-A200{background-color:#ff5252!important}.mdl-color-text--red-A400{color:#ff1744!important}.mdl-color--red-A400{background-color:#ff1744!important}.mdl-color-text--red-A700{color:#d50000!important}.mdl-color--red-A700{background-color:#d50000!important}.mdl-color-text--pink{color:#e91e63!important}.mdl-color--pink{background-color:#e91e63!important}.mdl-color-text--pink-50{color:#fce4ec!important}.mdl-color--pink-50{background-color:#fce4ec!important}.mdl-color-text--pink-100{color:#f8bbd0!important}.mdl-color--pink-100{background-color:#f8bbd0!important}.mdl-color-text--pink-200{color:#f48fb1!important}.mdl-color--pink-200{background-color:#f48fb1!important}.mdl-color-text--pink-300{color:#f06292!important}.mdl-color--pink-300{background-color:#f06292!important}.mdl-color-text--pink-400{color:#ec407a!important}.mdl-color--pink-400{background-color:#ec407a!important}.mdl-color-text--pink-500{color:#e91e63!important}.mdl-color--pink-500{background-color:#e91e63!important}.mdl-color-text--pink-600{color:#d81b60!important}.mdl-color--pink-600{background-color:#d81b60!important}.mdl-color-text--pink-700{color:#c2185b!important}.mdl-color--pink-700{background-color:#c2185b!important}.mdl-color-text--pink-800{color:#ad1457!important}.mdl-color--pink-800{background-color:#ad1457!important}.mdl-color-text--pink-900{color:#880e4f!important}.mdl-color--pink-900{background-color:#880e4f!important}.mdl-color-text--pink-A100{color:#ff80ab!important}.mdl-color--pink-A100{background-color:#ff80ab!important}.mdl-color-text--pink-A200{color:#ff4081!important}.mdl-color--pink-A200{background-color:#ff4081!important}.mdl-color-text--pink-A400{color:#f50057!important}.mdl-color--pink-A400{background-color:#f50057!important}.mdl-color-text--pink-A700{color:#c51162!important}.mdl-color--pink-A700{background-color:#c51162!important}.mdl-color-text--purple{color:#9c27b0!important}.mdl-color--purple{background-color:#9c27b0!important}.mdl-color-text--purple-50{color:#f3e5f5!important}.mdl-color--purple-50{background-color:#f3e5f5!important}.mdl-color-text--purple-100{color:#e1bee7!important}.mdl-color--purple-100{background-color:#e1bee7!important}.mdl-color-text--purple-200{color:#ce93d8!important}.mdl-color--purple-200{background-color:#ce93d8!important}.mdl-color-text--purple-300{color:#ba68c8!important}.mdl-color--purple-300{background-color:#ba68c8!important}.mdl-color-text--purple-400{color:#ab47bc!important}.mdl-color--purple-400{background-color:#ab47bc!important}.mdl-color-text--purple-500{color:#9c27b0!important}.mdl-color--purple-500{background-color:#9c27b0!important}.mdl-color-text--purple-600{color:#8e24aa!important}.mdl-color--purple-600{background-color:#8e24aa!important}.mdl-color-text--purple-700{color:#7b1fa2!important}.mdl-color--purple-700{background-color:#7b1fa2!important}.mdl-color-text--purple-800{color:#6a1b9a!important}.mdl-color--purple-800{background-color:#6a1b9a!important}.mdl-color-text--purple-900{color:#4a148c!important}.mdl-color--purple-900{background-color:#4a148c!important}.mdl-color-text--purple-A100{color:#ea80fc!important}.mdl-color--purple-A100{background-color:#ea80fc!important}.mdl-color-text--purple-A200{color:#e040fb!important}.mdl-color--purple-A200{background-color:#e040fb!important}.mdl-color-text--purple-A400{color:#d500f9!important}.mdl-color--purple-A400{background-color:#d500f9!important}.mdl-color-text--purple-A700{color:#a0f!important}.mdl-color--purple-A700{background-color:#a0f!important}.mdl-color-text--deep-purple{color:#673ab7!important}.mdl-color--deep-purple{background-color:#673ab7!important}.mdl-color-text--deep-purple-50{color:#ede7f6!important}.mdl-color--deep-purple-50{background-color:#ede7f6!important}.mdl-color-text--deep-purple-100{color:#d1c4e9!important}.mdl-color--deep-purple-100{background-color:#d1c4e9!important}.mdl-color-text--deep-purple-200{color:#b39ddb!important}.mdl-color--deep-purple-200{background-color:#b39ddb!important}.mdl-color-text--deep-purple-300{color:#9575cd!important}.mdl-color--deep-purple-300{background-color:#9575cd!important}.mdl-color-text--deep-purple-400{color:#7e57c2!important}.mdl-color--deep-purple-400{background-color:#7e57c2!important}.mdl-color-text--deep-purple-500{color:#673ab7!important}.mdl-color--deep-purple-500{background-color:#673ab7!important}.mdl-color-text--deep-purple-600{color:#5e35b1!important}.mdl-color--deep-purple-600{background-color:#5e35b1!important}.mdl-color-text--deep-purple-700{color:#512da8!important}.mdl-color--deep-purple-700{background-color:#512da8!important}.mdl-color-text--deep-purple-800{color:#4527a0!important}.mdl-color--deep-purple-800{background-color:#4527a0!important}.mdl-color-text--deep-purple-900{color:#311b92!important}.mdl-color--deep-purple-900{background-color:#311b92!important}.mdl-color-text--deep-purple-A100{color:#b388ff!important}.mdl-color--deep-purple-A100{background-color:#b388ff!important}.mdl-color-text--deep-purple-A200{color:#7c4dff!important}.mdl-color--deep-purple-A200{background-color:#7c4dff!important}.mdl-color-text--deep-purple-A400{color:#651fff!important}.mdl-color--deep-purple-A400{background-color:#651fff!important}.mdl-color-text--deep-purple-A700{color:#6200ea!important}.mdl-color--deep-purple-A700{background-color:#6200ea!important}.mdl-color-text--indigo{color:#3f51b5!important}.mdl-color--indigo{background-color:#3f51b5!important}.mdl-color-text--indigo-50{color:#e8eaf6!important}.mdl-color--indigo-50{background-color:#e8eaf6!important}.mdl-color-text--indigo-100{color:#c5cae9!important}.mdl-color--indigo-100{background-color:#c5cae9!important}.mdl-color-text--indigo-200{color:#9fa8da!important}.mdl-color--indigo-200{background-color:#9fa8da!important}.mdl-color-text--indigo-300{color:#7986cb!important}.mdl-color--indigo-300{background-color:#7986cb!important}.mdl-color-text--indigo-400{color:#5c6bc0!important}.mdl-color--indigo-400{background-color:#5c6bc0!important}.mdl-color-text--indigo-500{color:#3f51b5!important}.mdl-color--indigo-500{background-color:#3f51b5!important}.mdl-color-text--indigo-600{color:#3949ab!important}.mdl-color--indigo-600{background-color:#3949ab!important}.mdl-color-text--indigo-700{color:#303f9f!important}.mdl-color--indigo-700{background-color:#303f9f!important}.mdl-color-text--indigo-800{color:#283593!important}.mdl-color--indigo-800{background-color:#283593!important}.mdl-color-text--indigo-900{color:#1a237e!important}.mdl-color--indigo-900{background-color:#1a237e!important}.mdl-color-text--indigo-A100{color:#8c9eff!important}.mdl-color--indigo-A100{background-color:#8c9eff!important}.mdl-color-text--indigo-A200{color:#536dfe!important}.mdl-color--indigo-A200{background-color:#536dfe!important}.mdl-color-text--indigo-A400{color:#3d5afe!important}.mdl-color--indigo-A400{background-color:#3d5afe!important}.mdl-color-text--indigo-A700{color:#304ffe!important}.mdl-color--indigo-A700{background-color:#304ffe!important}.mdl-color-text--blue{color:#2196f3!important}.mdl-color--blue{background-color:#2196f3!important}.mdl-color-text--blue-50{color:#e3f2fd!important}.mdl-color--blue-50{background-color:#e3f2fd!important}.mdl-color-text--blue-100{color:#bbdefb!important}.mdl-color--blue-100{background-color:#bbdefb!important}.mdl-color-text--blue-200{color:#90caf9!important}.mdl-color--blue-200{background-color:#90caf9!important}.mdl-color-text--blue-300{color:#64b5f6!important}.mdl-color--blue-300{background-color:#64b5f6!important}.mdl-color-text--blue-400{color:#42a5f5!important}.mdl-color--blue-400{background-color:#42a5f5!important}.mdl-color-text--blue-500{color:#2196f3!important}.mdl-color--blue-500{background-color:#2196f3!important}.mdl-color-text--blue-600{color:#1e88e5!important}.mdl-color--blue-600{background-color:#1e88e5!important}.mdl-color-text--blue-700{color:#1976d2!important}.mdl-color--blue-700{background-color:#1976d2!important}.mdl-color-text--blue-800{color:#1565c0!important}.mdl-color--blue-800{background-color:#1565c0!important}.mdl-color-text--blue-900{color:#0d47a1!important}.mdl-color--blue-900{background-color:#0d47a1!important}.mdl-color-text--blue-A100{color:#82b1ff!important}.mdl-color--blue-A100{background-color:#82b1ff!important}.mdl-color-text--blue-A200{color:#448aff!important}.mdl-color--blue-A200{background-color:#448aff!important}.mdl-color-text--blue-A400{color:#2979ff!important}.mdl-color--blue-A400{background-color:#2979ff!important}.mdl-color-text--blue-A700{color:#2962ff!important}.mdl-color--blue-A700{background-color:#2962ff!important}.mdl-color-text--light-blue{color:#03a9f4!important}.mdl-color--light-blue{background-color:#03a9f4!important}.mdl-color-text--light-blue-50{color:#e1f5fe!important}.mdl-color--light-blue-50{background-color:#e1f5fe!important}.mdl-color-text--light-blue-100{color:#b3e5fc!important}.mdl-color--light-blue-100{background-color:#b3e5fc!important}.mdl-color-text--light-blue-200{color:#81d4fa!important}.mdl-color--light-blue-200{background-color:#81d4fa!important}.mdl-color-text--light-blue-300{color:#4fc3f7!important}.mdl-color--light-blue-300{background-color:#4fc3f7!important}.mdl-color-text--light-blue-400{color:#29b6f6!important}.mdl-color--light-blue-400{background-color:#29b6f6!important}.mdl-color-text--light-blue-500{color:#03a9f4!important}.mdl-color--light-blue-500{background-color:#03a9f4!important}.mdl-color-text--light-blue-600{color:#039be5!important}.mdl-color--light-blue-600{background-color:#039be5!important}.mdl-color-text--light-blue-700{color:#0288d1!important}.mdl-color--light-blue-700{background-color:#0288d1!important}.mdl-color-text--light-blue-800{color:#0277bd!important}.mdl-color--light-blue-800{background-color:#0277bd!important}.mdl-color-text--light-blue-900{color:#01579b!important}.mdl-color--light-blue-900{background-color:#01579b!important}.mdl-color-text--light-blue-A100{color:#80d8ff!important}.mdl-color--light-blue-A100{background-color:#80d8ff!important}.mdl-color-text--light-blue-A200{color:#40c4ff!important}.mdl-color--light-blue-A200{background-color:#40c4ff!important}.mdl-color-text--light-blue-A400{color:#00b0ff!important}.mdl-color--light-blue-A400{background-color:#00b0ff!important}.mdl-color-text--light-blue-A700{color:#0091ea!important}.mdl-color--light-blue-A700{background-color:#0091ea!important}.mdl-color-text--cyan{color:#00bcd4!important}.mdl-color--cyan{background-color:#00bcd4!important}.mdl-color-text--cyan-50{color:#e0f7fa!important}.mdl-color--cyan-50{background-color:#e0f7fa!important}.mdl-color-text--cyan-100{color:#b2ebf2!important}.mdl-color--cyan-100{background-color:#b2ebf2!important}.mdl-color-text--cyan-200{color:#80deea!important}.mdl-color--cyan-200{background-color:#80deea!important}.mdl-color-text--cyan-300{color:#4dd0e1!important}.mdl-color--cyan-300{background-color:#4dd0e1!important}.mdl-color-text--cyan-400{color:#26c6da!important}.mdl-color--cyan-400{background-color:#26c6da!important}.mdl-color-text--cyan-500{color:#00bcd4!important}.mdl-color--cyan-500{background-color:#00bcd4!important}.mdl-color-text--cyan-600{color:#00acc1!important}.mdl-color--cyan-600{background-color:#00acc1!important}.mdl-color-text--cyan-700{color:#0097a7!important}.mdl-color--cyan-700{background-color:#0097a7!important}.mdl-color-text--cyan-800{color:#00838f!important}.mdl-color--cyan-800{background-color:#00838f!important}.mdl-color-text--cyan-900{color:#006064!important}.mdl-color--cyan-900{background-color:#006064!important}.mdl-color-text--cyan-A100{color:#84ffff!important}.mdl-color--cyan-A100{background-color:#84ffff!important}.mdl-color-text--cyan-A200{color:#18ffff!important}.mdl-color--cyan-A200{background-color:#18ffff!important}.mdl-color-text--cyan-A400{color:#00e5ff!important}.mdl-color--cyan-A400{background-color:#00e5ff!important}.mdl-color-text--cyan-A700{color:#00b8d4!important}.mdl-color--cyan-A700{background-color:#00b8d4!important}.mdl-color-text--teal{color:#009688!important}.mdl-color--teal{background-color:#009688!important}.mdl-color-text--teal-50{color:#e0f2f1!important}.mdl-color--teal-50{background-color:#e0f2f1!important}.mdl-color-text--teal-100{color:#b2dfdb!important}.mdl-color--teal-100{background-color:#b2dfdb!important}.mdl-color-text--teal-200{color:#80cbc4!important}.mdl-color--teal-200{background-color:#80cbc4!important}.mdl-color-text--teal-300{color:#4db6ac!important}.mdl-color--teal-300{background-color:#4db6ac!important}.mdl-color-text--teal-400{color:#26a69a!important}.mdl-color--teal-400{background-color:#26a69a!important}.mdl-color-text--teal-500{color:#009688!important}.mdl-color--teal-500{background-color:#009688!important}.mdl-color-text--teal-600{color:#00897b!important}.mdl-color--teal-600{background-color:#00897b!important}.mdl-color-text--teal-700{color:#00796b!important}.mdl-color--teal-700{background-color:#00796b!important}.mdl-color-text--teal-800{color:#00695c!important}.mdl-color--teal-800{background-color:#00695c!important}.mdl-color-text--teal-900{color:#004d40!important}.mdl-color--teal-900{background-color:#004d40!important}.mdl-color-text--teal-A100{color:#a7ffeb!important}.mdl-color--teal-A100{background-color:#a7ffeb!important}.mdl-color-text--teal-A200{color:#64ffda!important}.mdl-color--teal-A200{background-color:#64ffda!important}.mdl-color-text--teal-A400{color:#1de9b6!important}.mdl-color--teal-A400{background-color:#1de9b6!important}.mdl-color-text--teal-A700{color:#00bfa5!important}.mdl-color--teal-A700{background-color:#00bfa5!important}.mdl-color-text--green{color:#4caf50!important}.mdl-color--green{background-color:#4caf50!important}.mdl-color-text--green-50{color:#e8f5e9!important}.mdl-color--green-50{background-color:#e8f5e9!important}.mdl-color-text--green-100{color:#c8e6c9!important}.mdl-color--green-100{background-color:#c8e6c9!important}.mdl-color-text--green-200{color:#a5d6a7!important}.mdl-color--green-200{background-color:#a5d6a7!important}.mdl-color-text--green-300{color:#81c784!important}.mdl-color--green-300{background-color:#81c784!important}.mdl-color-text--green-400{color:#66bb6a!important}.mdl-color--green-400{background-color:#66bb6a!important}.mdl-color-text--green-500{color:#4caf50!important}.mdl-color--green-500{background-color:#4caf50!important}.mdl-color-text--green-600{color:#43a047!important}.mdl-color--green-600{background-color:#43a047!important}.mdl-color-text--green-700{color:#388e3c!important}.mdl-color--green-700{background-color:#388e3c!important}.mdl-color-text--green-800{color:#2e7d32!important}.mdl-color--green-800{background-color:#2e7d32!important}.mdl-color-text--green-900{color:#1b5e20!important}.mdl-color--green-900{background-color:#1b5e20!important}.mdl-color-text--green-A100{color:#b9f6ca!important}.mdl-color--green-A100{background-color:#b9f6ca!important}.mdl-color-text--green-A200{color:#69f0ae!important}.mdl-color--green-A200{background-color:#69f0ae!important}.mdl-color-text--green-A400{color:#00e676!important}.mdl-color--green-A400{background-color:#00e676!important}.mdl-color-text--green-A700{color:#00c853!important}.mdl-color--green-A700{background-color:#00c853!important}.mdl-color-text--light-green{color:#8bc34a!important}.mdl-color--light-green{background-color:#8bc34a!important}.mdl-color-text--light-green-50{color:#f1f8e9!important}.mdl-color--light-green-50{background-color:#f1f8e9!important}.mdl-color-text--light-green-100{color:#dcedc8!important}.mdl-color--light-green-100{background-color:#dcedc8!important}.mdl-color-text--light-green-200{color:#c5e1a5!important}.mdl-color--light-green-200{background-color:#c5e1a5!important}.mdl-color-text--light-green-300{color:#aed581!important}.mdl-color--light-green-300{background-color:#aed581!important}.mdl-color-text--light-green-400{color:#9ccc65!important}.mdl-color--light-green-400{background-color:#9ccc65!important}.mdl-color-text--light-green-500{color:#8bc34a!important}.mdl-color--light-green-500{background-color:#8bc34a!important}.mdl-color-text--light-green-600{color:#7cb342!important}.mdl-color--light-green-600{background-color:#7cb342!important}.mdl-color-text--light-green-700{color:#689f38!important}.mdl-color--light-green-700{background-color:#689f38!important}.mdl-color-text--light-green-800{color:#558b2f!important}.mdl-color--light-green-800{background-color:#558b2f!important}.mdl-color-text--light-green-900{color:#33691e!important}.mdl-color--light-green-900{background-color:#33691e!important}.mdl-color-text--light-green-A100{color:#ccff90!important}.mdl-color--light-green-A100{background-color:#ccff90!important}.mdl-color-text--light-green-A200{color:#b2ff59!important}.mdl-color--light-green-A200{background-color:#b2ff59!important}.mdl-color-text--light-green-A400{color:#76ff03!important}.mdl-color--light-green-A400{background-color:#76ff03!important}.mdl-color-text--light-green-A700{color:#64dd17!important}.mdl-color--light-green-A700{background-color:#64dd17!important}.mdl-color-text--lime{color:#cddc39!important}.mdl-color--lime{background-color:#cddc39!important}.mdl-color-text--lime-50{color:#f9fbe7!important}.mdl-color--lime-50{background-color:#f9fbe7!important}.mdl-color-text--lime-100{color:#f0f4c3!important}.mdl-color--lime-100{background-color:#f0f4c3!important}.mdl-color-text--lime-200{color:#e6ee9c!important}.mdl-color--lime-200{background-color:#e6ee9c!important}.mdl-color-text--lime-300{color:#dce775!important}.mdl-color--lime-300{background-color:#dce775!important}.mdl-color-text--lime-400{color:#d4e157!important}.mdl-color--lime-400{background-color:#d4e157!important}.mdl-color-text--lime-500{color:#cddc39!important}.mdl-color--lime-500{background-color:#cddc39!important}.mdl-color-text--lime-600{color:#c0ca33!important}.mdl-color--lime-600{background-color:#c0ca33!important}.mdl-color-text--lime-700{color:#afb42b!important}.mdl-color--lime-700{background-color:#afb42b!important}.mdl-color-text--lime-800{color:#9e9d24!important}.mdl-color--lime-800{background-color:#9e9d24!important}.mdl-color-text--lime-900{color:#827717!important}.mdl-color--lime-900{background-color:#827717!important}.mdl-color-text--lime-A100{color:#f4ff81!important}.mdl-color--lime-A100{background-color:#f4ff81!important}.mdl-color-text--lime-A200{color:#eeff41!important}.mdl-color--lime-A200{background-color:#eeff41!important}.mdl-color-text--lime-A400{color:#c6ff00!important}.mdl-color--lime-A400{background-color:#c6ff00!important}.mdl-color-text--lime-A700{color:#aeea00!important}.mdl-color--lime-A700{background-color:#aeea00!important}.mdl-color-text--yellow{color:#ffeb3b!important}.mdl-color--yellow{background-color:#ffeb3b!important}.mdl-color-text--yellow-50{color:#fffde7!important}.mdl-color--yellow-50{background-color:#fffde7!important}.mdl-color-text--yellow-100{color:#fff9c4!important}.mdl-color--yellow-100{background-color:#fff9c4!important}.mdl-color-text--yellow-200{color:#fff59d!important}.mdl-color--yellow-200{background-color:#fff59d!important}.mdl-color-text--yellow-300{color:#fff176!important}.mdl-color--yellow-300{background-color:#fff176!important}.mdl-color-text--yellow-400{color:#ffee58!important}.mdl-color--yellow-400{background-color:#ffee58!important}.mdl-color-text--yellow-500{color:#ffeb3b!important}.mdl-color--yellow-500{background-color:#ffeb3b!important}.mdl-color-text--yellow-600{color:#fdd835!important}.mdl-color--yellow-600{background-color:#fdd835!important}.mdl-color-text--yellow-700{color:#fbc02d!important}.mdl-color--yellow-700{background-color:#fbc02d!important}.mdl-color-text--yellow-800{color:#f9a825!important}.mdl-color--yellow-800{background-color:#f9a825!important}.mdl-color-text--yellow-900{color:#f57f17!important}.mdl-color--yellow-900{background-color:#f57f17!important}.mdl-color-text--yellow-A100{color:#ffff8d!important}.mdl-color--yellow-A100{background-color:#ffff8d!important}.mdl-color-text--yellow-A200{color:#ff0!important}.mdl-color--yellow-A200{background-color:#ff0!important}.mdl-color-text--yellow-A400{color:#ffea00!important}.mdl-color--yellow-A400{background-color:#ffea00!important}.mdl-color-text--yellow-A700{color:#ffd600!important}.mdl-color--yellow-A700{background-color:#ffd600!important}.mdl-color-text--amber{color:#ffc107!important}.mdl-color--amber{background-color:#ffc107!important}.mdl-color-text--amber-50{color:#fff8e1!important}.mdl-color--amber-50{background-color:#fff8e1!important}.mdl-color-text--amber-100{color:#ffecb3!important}.mdl-color--amber-100{background-color:#ffecb3!important}.mdl-color-text--amber-200{color:#ffe082!important}.mdl-color--amber-200{background-color:#ffe082!important}.mdl-color-text--amber-300{color:#ffd54f!important}.mdl-color--amber-300{background-color:#ffd54f!important}.mdl-color-text--amber-400{color:#ffca28!important}.mdl-color--amber-400{background-color:#ffca28!important}.mdl-color-text--amber-500{color:#ffc107!important}.mdl-color--amber-500{background-color:#ffc107!important}.mdl-color-text--amber-600{color:#ffb300!important}.mdl-color--amber-600{background-color:#ffb300!important}.mdl-color-text--amber-700{color:#ffa000!important}.mdl-color--amber-700{background-color:#ffa000!important}.mdl-color-text--amber-800{color:#ff8f00!important}.mdl-color--amber-800{background-color:#ff8f00!important}.mdl-color-text--amber-900{color:#ff6f00!important}.mdl-color--amber-900{background-color:#ff6f00!important}.mdl-color-text--amber-A100{color:#ffe57f!important}.mdl-color--amber-A100{background-color:#ffe57f!important}.mdl-color-text--amber-A200{color:#ffd740!important}.mdl-color--amber-A200{background-color:#ffd740!important}.mdl-color-text--amber-A400{color:#ffc400!important}.mdl-color--amber-A400{background-color:#ffc400!important}.mdl-color-text--amber-A700{color:#ffab00!important}.mdl-color--amber-A700{background-color:#ffab00!important}.mdl-color-text--orange{color:#ff9800!important}.mdl-color--orange{background-color:#ff9800!important}.mdl-color-text--orange-50{color:#fff3e0!important}.mdl-color--orange-50{background-color:#fff3e0!important}.mdl-color-text--orange-100{color:#ffe0b2!important}.mdl-color--orange-100{background-color:#ffe0b2!important}.mdl-color-text--orange-200{color:#ffcc80!important}.mdl-color--orange-200{background-color:#ffcc80!important}.mdl-color-text--orange-300{color:#ffb74d!important}.mdl-color--orange-300{background-color:#ffb74d!important}.mdl-color-text--orange-400{color:#ffa726!important}.mdl-color--orange-400{background-color:#ffa726!important}.mdl-color-text--orange-500{color:#ff9800!important}.mdl-color--orange-500{background-color:#ff9800!important}.mdl-color-text--orange-600{color:#fb8c00!important}.mdl-color--orange-600{background-color:#fb8c00!important}.mdl-color-text--orange-700{color:#f57c00!important}.mdl-color--orange-700{background-color:#f57c00!important}.mdl-color-text--orange-800{color:#ef6c00!important}.mdl-color--orange-800{background-color:#ef6c00!important}.mdl-color-text--orange-900{color:#e65100!important}.mdl-color--orange-900{background-color:#e65100!important}.mdl-color-text--orange-A100{color:#ffd180!important}.mdl-color--orange-A100{background-color:#ffd180!important}.mdl-color-text--orange-A200{color:#ffab40!important}.mdl-color--orange-A200{background-color:#ffab40!important}.mdl-color-text--orange-A400{color:#ff9100!important}.mdl-color--orange-A400{background-color:#ff9100!important}.mdl-color-text--orange-A700{color:#ff6d00!important}.mdl-color--orange-A700{background-color:#ff6d00!important}.mdl-color-text--deep-orange{color:#ff5722!important}.mdl-color--deep-orange{background-color:#ff5722!important}.mdl-color-text--deep-orange-50{color:#fbe9e7!important}.mdl-color--deep-orange-50{background-color:#fbe9e7!important}.mdl-color-text--deep-orange-100{color:#ffccbc!important}.mdl-color--deep-orange-100{background-color:#ffccbc!important}.mdl-color-text--deep-orange-200{color:#ffab91!important}.mdl-color--deep-orange-200{background-color:#ffab91!important}.mdl-color-text--deep-orange-300{color:#ff8a65!important}.mdl-color--deep-orange-300{background-color:#ff8a65!important}.mdl-color-text--deep-orange-400{color:#ff7043!important}.mdl-color--deep-orange-400{background-color:#ff7043!important}.mdl-color-text--deep-orange-500{color:#ff5722!important}.mdl-color--deep-orange-500{background-color:#ff5722!important}.mdl-color-text--deep-orange-600{color:#f4511e!important}.mdl-color--deep-orange-600{background-color:#f4511e!important}.mdl-color-text--deep-orange-700{color:#e64a19!important}.mdl-color--deep-orange-700{background-color:#e64a19!important}.mdl-color-text--deep-orange-800{color:#d84315!important}.mdl-color--deep-orange-800{background-color:#d84315!important}.mdl-color-text--deep-orange-900{color:#bf360c!important}.mdl-color--deep-orange-900{background-color:#bf360c!important}.mdl-color-text--deep-orange-A100{color:#ff9e80!important}.mdl-color--deep-orange-A100{background-color:#ff9e80!important}.mdl-color-text--deep-orange-A200{color:#ff6e40!important}.mdl-color--deep-orange-A200{background-color:#ff6e40!important}.mdl-color-text--deep-orange-A400{color:#ff3d00!important}.mdl-color--deep-orange-A400{background-color:#ff3d00!important}.mdl-color-text--deep-orange-A700{color:#dd2c00!important}.mdl-color--deep-orange-A700{background-color:#dd2c00!important}.mdl-color-text--brown{color:#795548!important}.mdl-color--brown{background-color:#795548!important}.mdl-color-text--brown-50{color:#efebe9!important}.mdl-color--brown-50{background-color:#efebe9!important}.mdl-color-text--brown-100{color:#d7ccc8!important}.mdl-color--brown-100{background-color:#d7ccc8!important}.mdl-color-text--brown-200{color:#bcaaa4!important}.mdl-color--brown-200{background-color:#bcaaa4!important}.mdl-color-text--brown-300{color:#a1887f!important}.mdl-color--brown-300{background-color:#a1887f!important}.mdl-color-text--brown-400{color:#8d6e63!important}.mdl-color--brown-400{background-color:#8d6e63!important}.mdl-color-text--brown-500{color:#795548!important}.mdl-color--brown-500{background-color:#795548!important}.mdl-color-text--brown-600{color:#6d4c41!important}.mdl-color--brown-600{background-color:#6d4c41!important}.mdl-color-text--brown-700{color:#5d4037!important}.mdl-color--brown-700{background-color:#5d4037!important}.mdl-color-text--brown-800{color:#4e342e!important}.mdl-color--brown-800{background-color:#4e342e!important}.mdl-color-text--brown-900{color:#3e2723!important}.mdl-color--brown-900{background-color:#3e2723!important}.mdl-color-text--grey{color:#9e9e9e!important}.mdl-color--grey{background-color:#9e9e9e!important}.mdl-color-text--grey-50{color:#fafafa!important}.mdl-color--grey-50{background-color:#fafafa!important}.mdl-color-text--grey-100{color:#f5f5f5!important}.mdl-color--grey-100{background-color:#f5f5f5!important}.mdl-color-text--grey-200{color:#eee!important}.mdl-color--grey-200{background-color:#eee!important}.mdl-color-text--grey-300{color:#e0e0e0!important}.mdl-color--grey-300{background-color:#e0e0e0!important}.mdl-color-text--grey-400{color:#bdbdbd!important}.mdl-color--grey-400{background-color:#bdbdbd!important}.mdl-color-text--grey-500{color:#9e9e9e!important}.mdl-color--grey-500{background-color:#9e9e9e!important}.mdl-color-text--grey-600{color:#757575!important}.mdl-color--grey-600{background-color:#757575!important}.mdl-color-text--grey-700{color:#616161!important}.mdl-color--grey-700{background-color:#616161!important}.mdl-color-text--grey-800{color:#424242!important}.mdl-color--grey-800{background-color:#424242!important}.mdl-color-text--grey-900{color:#212121!important}.mdl-color--grey-900{background-color:#212121!important}.mdl-color-text--blue-grey{color:#607d8b!important}.mdl-color--blue-grey{background-color:#607d8b!important}.mdl-color-text--blue-grey-50{color:#eceff1!important}.mdl-color--blue-grey-50{background-color:#eceff1!important}.mdl-color-text--blue-grey-100{color:#cfd8dc!important}.mdl-color--blue-grey-100{background-color:#cfd8dc!important}.mdl-color-text--blue-grey-200{color:#b0bec5!important}.mdl-color--blue-grey-200{background-color:#b0bec5!important}.mdl-color-text--blue-grey-300{color:#90a4ae!important}.mdl-color--blue-grey-300{background-color:#90a4ae!important}.mdl-color-text--blue-grey-400{color:#78909c!important}.mdl-color--blue-grey-400{background-color:#78909c!important}.mdl-color-text--blue-grey-500{color:#607d8b!important}.mdl-color--blue-grey-500{background-color:#607d8b!important}.mdl-color-text--blue-grey-600{color:#546e7a!important}.mdl-color--blue-grey-600{background-color:#546e7a!important}.mdl-color-text--blue-grey-700{color:#455a64!important}.mdl-color--blue-grey-700{background-color:#455a64!important}.mdl-color-text--blue-grey-800{color:#37474f!important}.mdl-color--blue-grey-800{background-color:#37474f!important}.mdl-color-text--blue-grey-900{color:#263238!important}.mdl-color--blue-grey-900{background-color:#263238!important}.mdl-color--black{background-color:#000!important}.mdl-color-text--black{color:#000!important}.mdl-color--white{background-color:#fff!important}.mdl-color-text--white{color:#fff!important}.mdl-color--primary{background-color:#3f51b5!important}.mdl-color--primary-contrast{background-color:#fff!important}.mdl-color--primary-dark{background-color:#303f9f!important}.mdl-color--accent{background-color:#ff4081!important}.mdl-color--accent-contrast{background-color:#fff!important}.mdl-color-text--primary{color:#3f51b5!important}.mdl-color-text--primary-contrast{color:#fff!important}.mdl-color-text--primary-dark{color:#303f9f!important}.mdl-color-text--accent{color:#ff4081!important}.mdl-color-text--accent-contrast{color:#fff!important}.mdl-ripple{background:#000;border-radius:50%;height:50px;left:0;opacity:0;pointer-events:none;position:absolute;top:0;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:50px;overflow:hidden}.mdl-ripple.is-animating{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1);transition:transform .3s cubic-bezier(0,0,.2,1),width .3s cubic-bezier(0,0,.2,1),height .3s cubic-bezier(0,0,.2,1),opacity .6s cubic-bezier(0,0,.2,1)}.mdl-ripple.is-visible{opacity:.3}.mdl-animation--default,.mdl-animation--fast-out-slow-in{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-animation--linear-out-slow-in{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.mdl-animation--fast-out-linear-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.mdl-badge{position:relative;white-space:nowrap;margin-right:24px}.mdl-badge:not([data-badge]){margin-right:auto}.mdl-badge[data-badge]:after{content:attr(data-badge);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:-11px;right:-24px;font-family:Roboto,Helvetica,Arial,sans-serif;font-weight:600;font-size:12px;width:22px;height:22px;border-radius:50%;background:#ff4081;color:#fff}.mdl-button .mdl-badge[data-badge]:after{top:-10px;right:-5px}.mdl-badge.mdl-badge--no-background[data-badge]:after{color:#ff4081;background:rgba(255,255,255,.2);box-shadow:0 0 1px gray}.mdl-button{background:0 0;border:none;border-radius:2px;color:#000;position:relative;height:36px;min-width:64px;padding:0 8px;display:inline-block;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:14px;font-weight:500;letter-spacing:0;overflow:hidden;will-change:box-shadow,transform;-webkit-transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:box-shadow .2s cubic-bezier(.4,0,1,1),background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);outline:0;cursor:pointer;text-align:center;line-height:36px}.mdl-button--fab,.mdl-button--icon{overflow:hidden;font-size:24px;padding:0}.mdl-button::-moz-focus-inner{border:0}.mdl-button:hover{background-color:rgba(158,158,158,.2)}.mdl-button:focus:not(:active){background-color:rgba(0,0,0,.12)}.mdl-button:active{background-color:rgba(158,158,158,.4)}.mdl-button.mdl-button--colored{color:#3f51b5}.mdl-button.mdl-button--colored:focus:not(:active){background-color:rgba(0,0,0,.12)}input.mdl-button[type=submit]{-webkit-appearance:none}.mdl-button--raised{background:rgba(158,158,158,.2);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--raised:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--raised:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--raised.mdl-button--colored{background:#3f51b5;color:#fff}.mdl-button--raised.mdl-button--colored:active,.mdl-button--raised.mdl-button--colored:focus:not(:active),.mdl-button--raised.mdl-button--colored:hover{background-color:#3f51b5}.mdl-button--raised.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--fab{border-radius:50%;height:56px;margin:auto;min-width:56px;width:56px;background:rgba(158,158,158,.2);box-shadow:0 1px 1.5px 0 rgba(0,0,0,.12),0 1px 1px 0 rgba(0,0,0,.24);position:relative;line-height:normal}.mdl-button--fab .material-icons{transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--fab .material-icons,.mdl-button--icon .material-icons{position:absolute;top:50%;left:50%;-webkit-transform:translate(-12px,-12px);-ms-transform:translate(-12px,-12px)}.mdl-button--fab.mdl-button--mini-fab{height:40px;min-width:40px;width:40px}.mdl-button--fab .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button--fab:active{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);background-color:rgba(158,158,158,.4)}.mdl-button--fab:focus:not(:active){box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);background-color:rgba(158,158,158,.4)}.mdl-button--fab.mdl-button--colored{background:#ff4081;color:#fff}.mdl-button--fab.mdl-button--colored:active,.mdl-button--fab.mdl-button--colored:focus:not(:active),.mdl-button--fab.mdl-button--colored:hover{background-color:#ff4081}.mdl-button--fab.mdl-button--colored .mdl-ripple{background:#fff}.mdl-button--icon{border-radius:50%;height:32px;margin-left:0;margin-right:0;min-width:32px;width:32px;color:inherit;line-height:normal}.mdl-button--icon .material-icons{transform:translate(-12px,-12px);line-height:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon{height:24px;min-width:24px;width:24px}.mdl-button--icon.mdl-button--mini-icon .material-icons{top:0;left:0}.mdl-button--icon .mdl-button__ripple-container{border-radius:50%;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-button__ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-button.mdl-button--disabled .mdl-button__ripple-container .mdl-ripple,.mdl-button[disabled] .mdl-button__ripple-container .mdl-ripple{background-color:transparent}.mdl-button--primary.mdl-button--primary{color:#3f51b5}.mdl-button--primary.mdl-button--primary .mdl-ripple{background:#fff}.mdl-button--primary.mdl-button--primary.mdl-button--fab,.mdl-button--primary.mdl-button--primary.mdl-button--raised{color:#fff;background-color:#3f51b5}.mdl-button--accent.mdl-button--accent{color:#ff4081}.mdl-button--accent.mdl-button--accent .mdl-ripple{background:#fff}.mdl-button--accent.mdl-button--accent.mdl-button--fab,.mdl-button--accent.mdl-button--accent.mdl-button--raised{color:#fff;background-color:#ff4081}.mdl-button.mdl-button--disabled.mdl-button--disabled,.mdl-button[disabled][disabled]{color:rgba(0,0,0,.26);cursor:auto;background-color:transparent}.mdl-button--fab.mdl-button--disabled.mdl-button--disabled,.mdl-button--fab[disabled][disabled],.mdl-button--raised.mdl-button--disabled.mdl-button--disabled,.mdl-button--raised[disabled][disabled]{background-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-button--colored.mdl-button--disabled.mdl-button--disabled,.mdl-button--colored[disabled][disabled]{color:rgba(0,0,0,.26)}.mdl-card{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;font-size:16px;font-weight:400;min-height:200px;overflow:hidden;width:330px;z-index:1;position:relative;background:#fff;border-radius:2px}.mdl-card__media{background-color:#ff4081;background-repeat:repeat;background-position:50% 50%;background-size:cover;background-origin:padding-box;background-attachment:scroll}.mdl-card__title{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;color:#000;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-webkit-justify-content:stretch;-ms-flex-pack:stretch;justify-content:stretch;line-height:normal;padding:16px;-webkit-perspective-origin:165px 56px;perspective-origin:165px 56px;-webkit-transform-origin:165px 56px;-ms-transform-origin:165px 56px;transform-origin:165px 56px}.mdl-card__title.mdl-card--border{border-bottom:1px solid rgba(0,0,0,.1)}.mdl-card__title-text{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end;color:inherit;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:24px;font-weight:300;line-height:normal;overflow:hidden;-webkit-transform-origin:149px 48px;-ms-transform-origin:149px 48px;transform-origin:149px 48px;margin:0}.mdl-card__subtitle-text{font-size:14px;color:grey;margin:0}.mdl-card__supporting-text{color:rgba(0,0,0,.54);font-size:13px;line-height:18px;overflow:hidden;padding:16px;width:90%}.mdl-card__actions,.mdl-checkbox{box-sizing:border-box;width:100%}.mdl-card__actions{font-size:16px;line-height:normal;background-color:transparent;padding:8px}.mdl-card__actions.mdl-card--border{border-top:1px solid rgba(0,0,0,.1)}.mdl-card--expand{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-card__menu{position:absolute;right:16px;top:16px}.mdl-checkbox{position:relative;z-index:1;display:inline-block;height:24px;margin:0;padding:0}.mdl-checkbox.is-upgraded{padding-left:24px}.mdl-checkbox__input{line-height:24px}.mdl-checkbox.is-upgraded .mdl-checkbox__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-checkbox__box-outline,.mdl-checkbox__focus-helper{position:absolute;left:0;top:3px;display:inline-block;box-sizing:border-box;width:16px;height:16px}.mdl-checkbox__box-outline{margin:0;cursor:pointer;overflow:hidden;border:2px solid rgba(0,0,0,.54);border-radius:2px;z-index:2}.mdl-checkbox.is-checked .mdl-checkbox__box-outline{border:2px solid #3f51b5}.mdl-checkbox.is-disabled .mdl-checkbox__box-outline{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__focus-helper{border-radius:50%;background-color:transparent}.mdl-checkbox.is-focused .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-checkbox.is-focused.is-checked .mdl-checkbox__focus-helper{box-shadow:0 0 0 8px rgba(63,81,181,.26);background-color:rgba(63,81,181,.26)}.mdl-layout__drawer,.mdl-layout__header,.mdl-menu__outline{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-checkbox__tick-outline{position:absolute;top:0;left:0;height:100%;width:100%;-webkit-mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==);mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8ZGVmcz4KICAgIDxjbGlwUGF0aCBpZD0iY2xpcCI+CiAgICAgIDxwYXRoCiAgICAgICAgIGQ9Ik0gMCwwIDAsMSAxLDEgMSwwIDAsMCB6IE0gMC44NTM0Mzc1LDAuMTY3MTg3NSAwLjk1OTY4NzUsMC4yNzMxMjUgMC40MjkzNzUsMC44MDM0Mzc1IDAuMzIzMTI1LDAuOTA5Njg3NSAwLjIxNzE4NzUsMC44MDM0Mzc1IDAuMDQwMzEyNSwwLjYyNjg3NSAwLjE0NjU2MjUsMC41MjA2MjUgMC4zMjMxMjUsMC42OTc1IDAuODUzNDM3NSwwLjE2NzE4NzUgeiIKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8bWFzayBpZD0ibWFzayIgbWFza1VuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgbWFza0NvbnRlbnRVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgogICAgICA8cGF0aAogICAgICAgICBkPSJNIDAsMCAwLDEgMSwxIDEsMCAwLDAgeiBNIDAuODUzNDM3NSwwLjE2NzE4NzUgMC45NTk2ODc1LDAuMjczMTI1IDAuNDI5Mzc1LDAuODAzNDM3NSAwLjMyMzEyNSwwLjkwOTY4NzUgMC4yMTcxODc1LDAuODAzNDM3NSAwLjA0MDMxMjUsMC42MjY4NzUgMC4xNDY1NjI1LDAuNTIwNjI1IDAuMzIzMTI1LDAuNjk3NSAwLjg1MzQzNzUsMC4xNjcxODc1IHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+CiAgICA8L21hc2s+CiAgPC9kZWZzPgogIDxyZWN0CiAgICAgd2lkdGg9IjEiCiAgICAgaGVpZ2h0PSIxIgogICAgIHg9IjAiCiAgICAgeT0iMCIKICAgICBjbGlwLXBhdGg9InVybCgjY2xpcCkiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4KPC9zdmc+Cg==);background:0 0;-webkit-transition-duration:.28s;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background;transition-property:background}.mdl-checkbox__tick-outline,.mdl-data-table tbody tr{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-checkbox__ripple-container,.mdl-icon-toggle__ripple-container{box-sizing:border-box;overflow:hidden;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-checkbox.is-checked .mdl-checkbox__tick-outline{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K) #3f51b5}.mdl-checkbox.is-checked.is-disabled .mdl-checkbox__tick-outline{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K) rgba(0,0,0,.26)}.mdl-checkbox__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0}.mdl-checkbox.is-disabled .mdl-checkbox__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-checkbox__ripple-container{position:absolute;z-index:2;top:-6px;left:-10px;width:36px;height:36px;border-radius:50%;cursor:pointer}.mdl-checkbox__ripple-container .mdl-ripple{background:#3f51b5}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container{cursor:auto}.mdl-checkbox.is-disabled .mdl-checkbox__ripple-container .mdl-ripple{background:0 0}.mdl-data-table{position:relative;border:1px solid rgba(0,0,0,.12);border-collapse:collapse;white-space:nowrap;font-size:13px;background-color:#fff}.mdl-data-table thead{padding-bottom:3px}.mdl-data-table thead .mdl-data-table__select{margin-top:0}.mdl-data-table tbody tr{position:relative;height:48px;-webkit-transition-duration:.28s;transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:background-color;transition-property:background-color}.mdl-data-table tbody tr.is-selected{background-color:#e0e0e0}.mdl-data-table tbody tr:hover{background-color:#eee}.mdl-data-table td,.mdl-data-table th{padding:0 18px;text-align:right}.mdl-data-table td:first-of-type,.mdl-data-table th:first-of-type{padding-left:24px}.mdl-data-table td:last-of-type,.mdl-data-table th:last-of-type{padding-right:24px}.mdl-data-table td{position:relative;vertical-align:top;height:48px;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);padding-top:12px;box-sizing:border-box}.mdl-data-table td .mdl-data-table__select{vertical-align:top;position:absolute;left:24px}.mdl-data-table th{position:relative;vertical-align:bottom;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;height:48px;font-size:12px;color:rgba(0,0,0,.54);padding-bottom:8px;box-sizing:border-box}.mdl-data-table th .mdl-data-table__select{position:absolute;bottom:8px;left:24px}.mdl-data-table__select{width:16px}.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric{text-align:left}.mdl-mega-footer{padding:16px 40px;color:#9e9e9e;background-color:#424242}.mdl-mega-footer--bottom-section:after,.mdl-mega-footer--middle-section:after,.mdl-mega-footer--top-section:after,.mdl-mega-footer__bottom-section:after,.mdl-mega-footer__middle-section:after,.mdl-mega-footer__top-section:after{content:'';display:block;clear:both}.mdl-mega-footer--left-section,.mdl-mega-footer--right-section,.mdl-mega-footer__left-section,.mdl-mega-footer__right-section{margin-bottom:16px}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:block;margin-bottom:16px;color:inherit;text-decoration:none}@media screen and (min-width:760px){.mdl-mega-footer--left-section,.mdl-mega-footer__left-section{float:left}.mdl-mega-footer--right-section,.mdl-mega-footer__right-section{float:right}.mdl-mega-footer--right-section a,.mdl-mega-footer__right-section a{display:inline-block;margin-left:16px;line-height:36px;vertical-align:middle}}.mdl-mega-footer--social-btn,.mdl-mega-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{display:block;position:relative}@media screen and (min-width:760px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer__drop-down-section{width:33%}.mdl-mega-footer--drop-down-section:nth-child(1),.mdl-mega-footer--drop-down-section:nth-child(2),.mdl-mega-footer__drop-down-section:nth-child(1),.mdl-mega-footer__drop-down-section:nth-child(2){float:left}.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(3){float:right}.mdl-mega-footer--drop-down-section:nth-child(3):after,.mdl-mega-footer__drop-down-section:nth-child(3):after{clear:right}.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section:nth-child(4){clear:right;float:right}.mdl-mega-footer--middle-section:after,.mdl-mega-footer__middle-section:after{content:'';display:block;clear:both}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:0}}@media screen and (min-width:1024px){.mdl-mega-footer--drop-down-section,.mdl-mega-footer--drop-down-section:nth-child(3),.mdl-mega-footer--drop-down-section:nth-child(4),.mdl-mega-footer__drop-down-section,.mdl-mega-footer__drop-down-section:nth-child(3),.mdl-mega-footer__drop-down-section:nth-child(4){width:24%;float:left}}.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{position:absolute;width:100%;height:55.8px;padding:32px;margin:-16px 0 0;cursor:pointer;z-index:1;opacity:0}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CE'}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:none}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{font-family:'Material Icons';content:'\E5CF'}.mdl-mega-footer--heading,.mdl-mega-footer__heading{position:relative;width:100%;padding-right:39.8px;margin-bottom:16px;box-sizing:border-box;font-size:14px;line-height:23.8px;font-weight:500;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#e0e0e0}.mdl-mega-footer--heading:after,.mdl-mega-footer__heading:after{content:'';position:absolute;top:0;right:0;display:block;width:23.8px;height:23.8px;background-size:cover}.mdl-mega-footer--link-list,.mdl-mega-footer__link-list{list-style:none;margin:0 0 32px;padding:0}.mdl-mega-footer--link-list:after,.mdl-mega-footer__link-list:after{clear:both;display:block;content:''}.mdl-mega-footer--link-list li,.mdl-mega-footer__link-list li{font-size:14px;font-weight:400;letter-spacing:0;line-height:20px}.mdl-mega-footer--link-list a,.mdl-mega-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mega-footer--bottom-section,.mdl-mega-footer__bottom-section{padding-top:16px;margin-bottom:16px}.mdl-logo{margin-bottom:16px;color:#fff}.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li{float:left;margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mega-footer--heading-checkbox,.mdl-mega-footer__heading-checkbox{display:none}.mdl-mega-footer--heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox~.mdl-mega-footer__heading:after{background-image:none}.mdl-mega-footer--heading-checkbox:checked~ul,.mdl-mega-footer__heading-checkbox:checked~ul{display:block}.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer--heading-checkbox:checked~.mdl-mega-footer__heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer--heading:after,.mdl-mega-footer__heading-checkbox:checked~.mdl-mega-footer__heading:after{content:''}.mdl-logo{float:left;margin-bottom:0;margin-right:16px}}.mdl-mini-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:32px 16px;color:#9e9e9e;background-color:#424242}.mdl-mini-footer:after{content:'';display:block}.mdl-mini-footer .mdl-logo{line-height:36px}.mdl-mini-footer--link-list,.mdl-mini-footer__link-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;list-style:none;margin:0;padding:0}.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{margin-bottom:0;margin-right:16px}@media screen and (min-width:760px){.mdl-mini-footer--link-list li,.mdl-mini-footer__link-list li{line-height:36px}}.mdl-mini-footer--link-list a,.mdl-mini-footer__link-list a{color:inherit;text-decoration:none;white-space:nowrap}.mdl-mini-footer--left-section,.mdl-mini-footer__left-section{display:inline-block;-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.mdl-mini-footer--right-section,.mdl-mini-footer__right-section{display:inline-block;-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.mdl-mini-footer--social-btn,.mdl-mini-footer__social-btn{width:36px;height:36px;padding:0;margin:0;background-color:#9e9e9e;border:none}.mdl-icon-toggle{position:relative;z-index:1;vertical-align:middle;display:inline-block;height:32px;margin:0;padding:0}.mdl-icon-toggle__input{line-height:32px}.mdl-icon-toggle.is-upgraded .mdl-icon-toggle__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-icon-toggle__label{display:inline-block;position:relative;cursor:pointer;height:32px;width:32px;min-width:32px;color:#616161;border-radius:50%;padding:0;margin-left:0;margin-right:0;text-align:center;background-color:transparent;will-change:background-color;-webkit-transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1);transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.mdl-icon-toggle__label.material-icons{line-height:32px;font-size:24px}.mdl-icon-toggle.is-checked .mdl-icon-toggle__label{color:#3f51b5}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__label{color:rgba(0,0,0,.26);cursor:auto;-webkit-transition:none;transition:none}.mdl-icon-toggle.is-focused .mdl-icon-toggle__label{background-color:rgba(0,0,0,.12)}.mdl-icon-toggle.is-focused.is-checked .mdl-icon-toggle__label{background-color:rgba(63,81,181,.26)}.mdl-icon-toggle__ripple-container{position:absolute;z-index:2;top:-2px;left:-2px;width:36px;height:36px;border-radius:50%;cursor:pointer}.mdl-menu,.mdl-menu__outline{position:absolute;top:0;left:0}.mdl-icon-toggle__ripple-container .mdl-ripple{background:#616161}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container{cursor:auto}.mdl-icon-toggle.is-disabled .mdl-icon-toggle__ripple-container .mdl-ripple{background:0 0}.mdl-menu__container{display:block;margin:0;padding:0;border:none;position:absolute;overflow:visible;height:0;width:0;visibility:hidden;z-index:-1}.mdl-menu__container.is-animating,.mdl-menu__container.is-visible{z-index:999;visibility:visible}.mdl-menu__outline{background:#fff;padding:0;border-radius:2px;overflow:hidden;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;will-change:transform;-webkit-transition:-webkit-transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);transition:transform .3s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1);z-index:-1}.mdl-menu__item,.mdl-menu__outline{margin:0;display:block;border:none}.mdl-menu__item,.mdl-menu__item[disabled],.mdl-menu__item[disabled]:focus,.mdl-menu__item[disabled]:hover{background-color:transparent}.mdl-menu__container.is-visible .mdl-menu__outline{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);z-index:999}.mdl-menu__outline.mdl-menu--bottom-right{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.mdl-menu__outline.mdl-menu--top-left{-webkit-transform-origin:0 100%;-ms-transform-origin:0 100%;transform-origin:0 100%}.mdl-menu__outline.mdl-menu--top-right{-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.mdl-menu{list-style:none;height:auto;width:auto;min-width:124px;padding:8px 0;margin:0;opacity:0;clip:rect(0 0 0 0);z-index:-1}.mdl-menu__container.is-visible .mdl-menu{opacity:1;z-index:999}.mdl-menu.is-animating{-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1),clip .3s cubic-bezier(.4,0,.2,1)}.mdl-menu.mdl-menu--bottom-right{left:auto;right:0}.mdl-menu.mdl-menu--top-left{top:auto;bottom:0}.mdl-menu.mdl-menu--top-right{top:auto;left:auto;bottom:0;right:0}.mdl-menu.mdl-menu--unaligned{top:auto;left:auto}.mdl-menu__item{color:rgba(0,0,0,.87);text-align:left;padding:0 16px;outline-color:#bdbdbd;position:relative;overflow:hidden;font-size:14px;font-weight:400;letter-spacing:0;text-decoration:none;cursor:pointer;height:48px;line-height:48px;white-space:nowrap;opacity:0;-webkit-transition:opacity .2s cubic-bezier(.4,0,.2,1);transition:opacity .2s cubic-bezier(.4,0,.2,1);user-select:none}.mdl-layout__tab-bar-button,.mdl-menu__item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.mdl-menu__item:focus,.mdl-textfield.is-focused .mdl-textfield__input{outline:0}.mdl-menu__container.is-visible .mdl-menu__item{opacity:1}.mdl-menu__item::-moz-focus-inner{border:0}.mdl-menu__item[disabled]{color:#bdbdbd;cursor:auto}.mdl-menu__item[disabled] .mdl-ripple{background:0 0}.mdl-menu__item:focus,.mdl-menu__item:hover{background-color:#eee}.mdl-menu__item:active{background-color:#e0e0e0}.mdl-menu__item--ripple-container{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:0;overflow:hidden}.mdl-progress{display:block;position:relative;height:4px;width:500px}.mdl-progress>.bar{display:block;position:absolute;top:0;bottom:0;width:0;-webkit-transition:width .2s cubic-bezier(.4,0,.2,1);transition:width .2s cubic-bezier(.4,0,.2,1)}.mdl-layout,.mdl-navigation{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.mdl-progress>.progressbar{background-color:#3f51b5;z-index:1;left:0}.mdl-progress>.bufferbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#3f51b5,#3f51b5);background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#3f51b5,#3f51b5);z-index:0;left:0}.mdl-progress>.auxbar{right:0}@supports (-webkit-appearance:none){.mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.7),rgba(255,255,255,.7)),-webkit-linear-gradient(left,#3f51b5,#3f51b5);background-image:linear-gradient(to right,rgba(255,255,255,.7),rgba(255,255,255,.7)),linear-gradient(to right,#3f51b5,#3f51b5);-webkit-mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=);mask:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjQiIHZpZXdQb3J0PSIwIDAgMTIgNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxlbGxpcHNlIGN4PSIyIiBjeT0iMiIgcng9IjIiIHJ5PSIyIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImN4IiBmcm9tPSIyIiB0bz0iLTEwIiBkdXI9IjAuNnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiAvPgogIDwvZWxsaXBzZT4KICA8ZWxsaXBzZSBjeD0iMTQiIGN5PSIyIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJsb2FkZXIiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iY3giIGZyb209IjE0IiB0bz0iMiIgZHVyPSIwLjZzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgLz4KICA8L2VsbGlwc2U+Cjwvc3ZnPgo=)}}.mdl-progress:not(.mdl-progress__indeterminate)>.auxbar{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.9),rgba(255,255,255,.9)),-webkit-linear-gradient(left,#3f51b5,#3f51b5);background-image:linear-gradient(to right,rgba(255,255,255,.9),rgba(255,255,255,.9)),linear-gradient(to right,#3f51b5,#3f51b5)}.mdl-progress.mdl-progress__indeterminate>.bar1{background-color:#3f51b5;-webkit-animation-name:indeterminate1;animation-name:indeterminate1;animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar1,.mdl-progress.mdl-progress__indeterminate>.bar3{-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear}.mdl-progress.mdl-progress__indeterminate>.bar3{background-image:none;background-color:#3f51b5;-webkit-animation-name:indeterminate2;animation-name:indeterminate2;animation-duration:2s;animation-iteration-count:infinite;animation-timing-function:linear}@-webkit-keyframes indeterminate1{0%{left:0;width:0}50%{left:25%;width:75%}75%{left:100%;width:0}}@keyframes indeterminate1{0%{left:0;width:0}50%{left:25%;width:75%}75%{left:100%;width:0}}@-webkit-keyframes indeterminate2{0%,50%{left:0;width:0}75%{left:0;width:25%}100%{left:100%;width:0}}@keyframes indeterminate2{0%,50%{left:0;width:0}75%{left:0;width:25%}100%{left:100%;width:0}}.mdl-navigation{display:flex;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;box-sizing:border-box}.mdl-navigation__link{color:#424242;text-decoration:none;font-weight:500;font-size:13px;margin:0}.mdl-layout{width:100%;height:100%;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-overflow-scrolling:touch}.mdl-layout.is-small-screen .mdl-layout--large-screen-only,.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only{display:none}.mdl-layout__container{position:absolute;width:100%;height:100%}.mdl-layout-title{display:block;position:relative;font-family:Roboto,Helvetica,Arial,sans-serif;font-size:20px;line-height:1;letter-spacing:.02em;font-weight:400;box-sizing:border-box}.mdl-layout-spacer{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.mdl-layout__drawer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:240px;height:100%;max-height:100%;position:absolute;top:0;left:0;box-sizing:border-box;border-right:1px solid #e0e0e0;background:#fafafa;-webkit-transform:translateX(-250px);-ms-transform:translateX(-250px);transform:translateX(-250px);-webkit-transform-style:preserve-3d;transform-style:preserve-3d;will-change:transform;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;color:#424242;overflow:visible;overflow-y:auto;z-index:5}.mdl-layout__drawer.is-visible{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout__drawer>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__drawer>.mdl-layout-title{line-height:64px;padding-left:40px}@media screen and (max-width:1024px){.mdl-layout__drawer>.mdl-layout-title{line-height:56px;padding-left:16px}}.mdl-layout__drawer .mdl-navigation{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;padding-top:16px}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{display:block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;padding:16px 40px;margin:0;color:#757575}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link:hover{background-color:#e0e0e0}.mdl-layout__drawer .mdl-navigation .mdl-navigation__link--current{background-color:#000;color:#3f51b5}.mdl-layout__drawer-button{display:block;position:absolute;height:48px;width:48px;border:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden;text-align:center;cursor:pointer;font-size:26px;line-height:50px;font-family:Helvetica,Arial,sans-serif;margin:10px 12px;top:0;left:0;color:#fff;z-index:4}.mdl-layout__header .mdl-layout__drawer-button{position:absolute;color:#fff;background-color:inherit}@media screen and (max-width:1024px){.mdl-layout__drawer .mdl-navigation .mdl-navigation__link{padding:16px}.mdl-layout__header .mdl-layout__drawer-button{margin:4px}.mdl-layout__drawer-button{margin:4px;color:rgba(0,0,0,.5)}}@media screen and (min-width:1025px){.mdl-layout--fixed-drawer>.mdl-layout__drawer{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.mdl-layout--fixed-drawer>.mdl-layout__drawer-button{display:none}}.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;margin:0;padding:0;border:none;min-height:64px;max-height:1000px;z-index:3;background-color:#3f51b5;color:#fff;-webkit-transition-duration:.2s;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:max-height,box-shadow;transition-property:max-height,box-shadow}.mdl-layout__header,.mdl-layout__obfuscator{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout--fixed-drawer:not(.is-small-screen)>.mdl-layout__header{margin-left:240px;width:calc(100% - 240px)}.mdl-layout__header-row,.mdl-layout__header-row .mdl-navigation{-webkit-box-orient:horizontal;-webkit-box-direction:normal;margin:0}@media screen and (min-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__header .mdl-layout__header-row{padding-left:40px}}.mdl-layout__header>.mdl-layout-icon{position:absolute;left:40px;top:16px;height:32px;width:32px;overflow:hidden;z-index:3;display:block}.mdl-layout.has-drawer .mdl-layout__header>.mdl-layout-icon{display:none}.mdl-layout__header.is-compact{max-height:64px}.mdl-layout__header.is-compact.has-tabs{height:112px}@media screen and (max-width:1024px){.mdl-layout__header{min-height:56px;display:none}.mdl-layout__header>.mdl-layout-icon{left:16px;top:12px}.mdl-layout__header.is-compact{max-height:56px}.mdl-layout__header.is-compact.has-tabs{min-height:104px}.mdl-layout--fixed-header>.mdl-layout__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.mdl-layout__header--transparent.mdl-layout__header--transparent{background-color:transparent;box-shadow:none}.mdl-layout__header--scroll,.mdl-layout__header--seamed{box-shadow:none}.mdl-layout__header--waterfall{box-shadow:none;overflow:hidden}.mdl-layout__header--waterfall.is-casting-shadow,.mdl-switch__thumb{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-layout__header-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;box-sizing:border-box;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:64px;padding:0 40px 0 80px}@media screen and (max-width:1024px){.mdl-layout__header-row{height:56px;padding:0 16px 0 72px}}.mdl-layout__header-row>*{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.mdl-layout__header--scroll .mdl-layout__header-row{width:100%}.mdl-layout__header-row .mdl-navigation{padding:0;height:64px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.mdl-layout__header-row .mdl-navigation__link{display:block;color:#fff;line-height:64px;padding:0 24px}@media screen and (max-width:1024px){.mdl-layout__header-row .mdl-navigation{height:56px}.mdl-layout__header-row .mdl-navigation__link{line-height:56px;padding:0 16px}}.mdl-layout__tab,.mdl-layout__tab-bar-button .material-icons{line-height:48px}.mdl-layout__obfuscator{background-color:transparent;position:absolute;top:0;left:0;height:100%;width:100%;z-index:4;visibility:hidden;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-duration:.2s;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-layout__drawer.is-visible~.mdl-layout__obfuscator{background-color:rgba(0,0,0,.5);visibility:visible}.mdl-layout__content{-ms-flex:0 1 auto;display:inline-block;overflow-y:auto;overflow-x:hidden;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;z-index:1;-webkit-overflow-scrolling:touch}.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:240px}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow:visible}@media screen and (max-width:1024px){.mdl-layout--fixed-drawer>.mdl-layout__content{margin-left:0}.mdl-layout__container.has-scrolling-header .mdl-layout__content{overflow-y:auto;overflow-x:hidden}}.mdl-layout__tab-bar{height:96px;margin:0;width:calc(100% - 112px);padding:0 0 0 56px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#3f51b5;overflow-y:hidden;overflow-x:scroll}.mdl-layout__tab-bar::-webkit-scrollbar{display:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar{width:calc(100% - 60px);padding:0 0 0 60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar{padding:0;overflow:hidden;width:100%}.mdl-layout__tab-bar-container{position:relative;height:48px;width:100%;border:none;margin:0;z-index:2;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.mdl-layout__container>.mdl-layout__tab-bar-container{position:absolute;top:0;left:0}.mdl-layout__tab-bar-button{display:inline-block;position:absolute;top:0;height:48px;width:56px;z-index:4;text-align:center;background-color:#3f51b5;color:transparent;cursor:pointer;user-select:none}@media screen and (max-width:1024px){.mdl-layout__tab-bar-button{display:none;width:60px}}.mdl-layout--fixed-tabs .mdl-layout__tab-bar-button{display:none}.mdl-layout__tab-bar-button.is-active{color:#fff}.mdl-layout__tab-bar-left-button{left:0}.mdl-layout__tab-bar-right-button{right:0}.mdl-layout__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;height:48px;text-align:center;font-weight:500;font-size:14px;color:rgba(255,255,255,.6);overflow:hidden}.mdl-radio,.mdl-radio__button,.mdl-switch__input{line-height:24px}@media screen and (max-width:1024px){.mdl-layout__tab{padding:0 12px}}.mdl-layout--fixed-tabs .mdl-layout__tab{float:none;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0}.mdl-layout.is-upgraded .mdl-layout__tab.is-active{color:#fff}.mdl-layout.is-upgraded .mdl-layout__tab.is-active::after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:#ff4081;-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-layout__tab .mdl-layout__tab-ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-layout__tab .mdl-layout__tab-ripple-container .mdl-ripple{background-color:#fff}.mdl-layout__tab-panel{display:block}.mdl-layout.is-upgraded .mdl-layout__tab-panel{display:none}.mdl-layout.is-upgraded .mdl-layout__tab-panel.is-active{display:block}.mdl-radio,.mdl-radio__outer-circle{margin:0;box-sizing:border-box;display:inline-block}.mdl-radio{position:relative;font-size:16px;padding-left:0}.mdl-radio.is-upgraded{padding-left:24px}.mdl-radio.is-upgraded .mdl-radio__button{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-radio__outer-circle{position:absolute;top:4px;left:0;width:16px;height:16px;cursor:pointer;border:2px solid rgba(0,0,0,.54);border-radius:50%;z-index:2}.mdl-radio.is-checked .mdl-radio__outer-circle{border:2px solid #3f51b5}.mdl-radio.is-disabled .mdl-radio__outer-circle{border:2px solid rgba(0,0,0,.26);cursor:auto}.mdl-radio__inner-circle{position:absolute;z-index:1;margin:0;top:8px;left:4px;box-sizing:border-box;width:8px;height:8px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0);border-radius:50%;background:#3f51b5}.mdl-radio__ripple-container,.mdl-switch__ripple-container{box-sizing:border-box;z-index:2;-webkit-mask-image:-webkit-radial-gradient(circle,#fff,#000)}.mdl-radio.is-checked .mdl-radio__inner-circle{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.mdl-radio.is-disabled .mdl-radio__inner-circle{background:rgba(0,0,0,.26);cursor:auto}.mdl-radio.is-focused .mdl-radio__inner-circle{box-shadow:0 0 0 10px rgba(0,0,0,.1)}.mdl-radio__label{cursor:pointer}.mdl-radio.is-disabled .mdl-radio__label{color:rgba(0,0,0,.26);cursor:auto}.mdl-radio__ripple-container{position:absolute;top:-9px;left:-13px;width:42px;height:42px;border-radius:50%;cursor:pointer;overflow:hidden}.mdl-radio__ripple-container .mdl-ripple{background:#3f51b5}.mdl-radio.is-disabled .mdl-radio__ripple-container{cursor:auto}.mdl-radio.is-disabled .mdl-radio__ripple-container .mdl-ripple{background:0 0}:root .mdl-slider.mdl-slider.is-upgraded,_:-ms-input-placeholder{-ms-appearance:none;height:32px;margin:0}.mdl-slider{width:calc(100% - 40px);margin:0 20px}.mdl-slider.is-upgraded{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:2px;background:0 0;user-select:none;outline:0;padding:0;color:#3f51b5;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;z-index:1;cursor:pointer}.mdl-slider.is-upgraded,.mdl-switch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.mdl-slider.is-upgraded::-moz-focus-outer{border:0}.mdl-slider.is-upgraded::-ms-tooltip{display:none}.mdl-slider.is-upgraded::-webkit-slider-runnable-track{background:0 0}.mdl-slider.is-upgraded::-moz-range-track{background:0 0;border:none}.mdl-slider.is-upgraded::-ms-track{background:0 0;color:transparent;height:2px;width:100%;border:none}.mdl-slider.is-upgraded::-ms-fill-lower{padding:0;background:linear-gradient(to right,transparent,transparent 16px,#3f51b5 16px,#3f51b5 0)}.mdl-slider.is-upgraded::-ms-fill-upper{padding:0;background:linear-gradient(to left,transparent,transparent 16px,rgba(0,0,0,.26) 16px,rgba(0,0,0,.26) 0)}.mdl-slider.is-upgraded::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:#3f51b5;border:none;-webkit-transition:-webkit-transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1);transition:transform .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded::-moz-range-thumb{-moz-appearance:none;width:12px;height:12px;box-sizing:border-box;border-radius:50%;background:#3f51b5;border:none}.mdl-slider.is-upgraded:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(63,81,181,.26)}.mdl-slider.is-upgraded:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(63,81,181,.26)}.mdl-slider.is-upgraded:active::-webkit-slider-thumb{background:#3f51b5;-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded:active::-moz-range-thumb{background:#3f51b5;transform:scale(1.5)}.mdl-slider.is-upgraded::-ms-thumb{width:32px;height:32px;border:none;border-radius:50%;background:#3f51b5;-ms-transform:scale(.375);transform:scale(.375);transition:transform .18s cubic-bezier(.4,0,.2,1),background .28s cubic-bezier(.4,0,.2,1)}.mdl-slider.is-upgraded:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,#3f51b5 0,#3f51b5 37.5%,rgba(63,81,181,.26) 37.5%,rgba(63,81,181,.26) 100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded:active::-ms-thumb{background:#3f51b5;-ms-transform:scale(.5625);transform:scale(.5625)}.mdl-slider.is-upgraded.is-lowest-value::-webkit-slider-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-moz-range-thumb{border:2px solid rgba(0,0,0,.26);background:0 0}.mdl-slider.is-upgraded.is-lowest-value~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-webkit-slider-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(0,0,0,.12);background:rgba(0,0,0,.12)}.mdl-slider.is-upgraded.is-lowest-value:active::-webkit-slider-thumb{border:1.6px solid rgba(0,0,0,.26);-webkit-transform:scale(1.5);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value:active~.mdl-slider__background-flex>.mdl-slider__background-upper{left:9px}.mdl-slider.is-upgraded.is-lowest-value:active::-moz-range-thumb{border:1.5px solid rgba(0,0,0,.26);transform:scale(1.5)}.mdl-slider.is-upgraded.is-lowest-value::-ms-thumb{background:radial-gradient(circle closest-side,transparent 0,transparent 66.67%,rgba(0,0,0,.26) 66.67%,rgba(0,0,0,.26) 100%)}.mdl-slider.is-upgraded.is-lowest-value:focus:not(:active)::-ms-thumb{background:radial-gradient(circle closest-side,rgba(0,0,0,.12) 0,rgba(0,0,0,.12) 25%,rgba(0,0,0,.26) 25%,rgba(0,0,0,.26) 37.5%,rgba(0,0,0,.12) 37.5%,rgba(0,0,0,.12) 100%);-ms-transform:scale(1);transform:scale(1)}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-thumb{-ms-transform:scale(.5625);transform:scale(.5625);background:radial-gradient(circle closest-side,transparent 0,transparent 77.78%,rgba(0,0,0,.26) 77.78%,rgba(0,0,0,.26) 100%)}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-lower{background:0 0}.mdl-slider.is-upgraded.is-lowest-value::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:active::-ms-fill-upper{margin-left:9px}.mdl-slider.is-upgraded:disabled::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded:disabled:focus::-webkit-slider-thumb{-webkit-transform:scale(.667);transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded:disabled:focus::-moz-range-thumb{transform:scale(.667);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-lower{background-color:rgba(0,0,0,.26);left:-6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active~.mdl-slider__background-flex>.mdl-slider__background-upper,.mdl-slider.is-upgraded:disabled~.mdl-slider__background-flex>.mdl-slider__background-upper{left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-webkit-slider-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-webkit-slider-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;-webkit-transform:scale(.667);transform:scale(.667)}.mdl-slider.is-upgraded.is-lowest-value:disabled::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-moz-range-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-moz-range-thumb{border:3px solid rgba(0,0,0,.26);background:0 0;transform:scale(.667)}.mdl-slider.is-upgraded:disabled::-ms-thumb,.mdl-slider.is-upgraded:disabled:active::-ms-thumb,.mdl-slider.is-upgraded:disabled:focus::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:rgba(0,0,0,.26)}.mdl-slider.is-upgraded.is-lowest-value:disabled::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-thumb,.mdl-slider.is-upgraded.is-lowest-value:disabled:focus::-ms-thumb{-ms-transform:scale(.25);transform:scale(.25);background:radial-gradient(circle closest-side,transparent 0,transparent 50%,rgba(0,0,0,.26) 50%,rgba(0,0,0,.26) 100%)}.mdl-slider.is-upgraded:disabled::-ms-fill-lower{margin-right:6px;background:linear-gradient(to right,transparent,transparent 25px,rgba(0,0,0,.26) 25px,rgba(0,0,0,.26) 0)}.mdl-slider__background-flex,.mdl-slider__container{background:0 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox}.mdl-slider.is-upgraded:disabled::-ms-fill-upper{margin-left:6px}.mdl-slider.is-upgraded.is-lowest-value:disabled:active::-ms-fill-upper{margin-left:6px}.mdl-slider__ie-container{height:18px;overflow:visible;border:none;margin:none;padding:none}.mdl-slider__container{height:18px;position:relative;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.mdl-slider__background-flex{position:absolute;height:2px;width:calc(100% - 52px);top:50%;left:0;margin:0 26px;display:flex;overflow:hidden;border:0;padding:0;-webkit-transform:translate(0,-1px);-ms-transform:translate(0,-1px);transform:translate(0,-1px)}.mdl-slider__background-lower{background:#3f51b5;-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0}.mdl-slider__background-upper{background:rgba(0,0,0,.26);-webkit-box-flex:0;-webkit-flex:0;-ms-flex:0;flex:0;position:relative;border:0;padding:0;-webkit-transition:left .18s cubic-bezier(.4,0,.2,1);transition:left .18s cubic-bezier(.4,0,.2,1)}.mdl-spinner{display:inline-block;position:relative;width:28px;height:28px}.mdl-spinner:not(.is-upgraded).is-active:after{content:"Loading..."}.mdl-spinner.is-upgraded.is-active{-webkit-animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite;animation:mdl-spinner__container-rotate 1568.23529412ms linear infinite}@-webkit-keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes mdl-spinner__container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.mdl-spinner__layer{position:absolute;width:100%;height:100%;opacity:0}.mdl-spinner__layer-1{border-color:#42a5f5}.mdl-spinner--single-color .mdl-spinner__layer-1{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-1{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-1-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__layer-2{border-color:#f44336}.mdl-spinner--single-color .mdl-spinner__layer-2{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-2{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-2-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__layer-3{border-color:#fdd835}.mdl-spinner--single-color .mdl-spinner__layer-3{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-3{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-3-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__layer-4{border-color:#4caf50}.mdl-spinner--single-color .mdl-spinner__layer-4{border-color:#3f51b5}.mdl-spinner.is-active .mdl-spinner__layer-4{-webkit-animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,mdl-spinner__layer-4-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@keyframes mdl-spinner__fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes mdl-spinner__layer-1-fade-in-out{100%,25%,90%,from{opacity:.99}26%,89%{opacity:0}}@keyframes mdl-spinner__layer-1-fade-in-out{100%,25%,90%,from{opacity:.99}26%,89%{opacity:0}}@-webkit-keyframes mdl-spinner__layer-2-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:.99}}@keyframes mdl-spinner__layer-2-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-3-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:.99}}@keyframes mdl-spinner__layer-3-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:.99}}@-webkit-keyframes mdl-spinner__layer-4-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:.99}}@keyframes mdl-spinner__layer-4-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:.99}}.mdl-spinner__gap-patch{position:absolute;box-sizing:border-box;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__gap-patch .mdl-spinner__circle{width:1000%;left:-450%}.mdl-spinner__circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.mdl-spinner__circle-clipper .mdl-spinner__circle{width:200%}.mdl-spinner__circle{box-sizing:border-box;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0;left:0}.mdl-spinner__left .mdl-spinner__circle{border-right-color:transparent!important;-webkit-transform:rotate(129deg);-ms-transform:rotate(129deg);transform:rotate(129deg)}.mdl-spinner.is-active .mdl-spinner__left .mdl-spinner__circle{-webkit-animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.mdl-spinner__right .mdl-spinner__circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);-ms-transform:rotate(-129deg);transform:rotate(-129deg)}.mdl-spinner.is-active .mdl-spinner__right .mdl-spinner__circle{-webkit-animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:mdl-spinner__right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes mdl-spinner__left-spin{from,to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}}@keyframes mdl-spinner__left-spin{from,to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}}@-webkit-keyframes mdl-spinner__right-spin{from,to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}@keyframes mdl-spinner__right-spin{from,to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}.mdl-switch{position:relative;z-index:1;vertical-align:middle;display:inline-block;box-sizing:border-box;width:100%;height:24px;margin:0;padding:0;overflow:visible;-webkit-touch-callout:none;user-select:none}.mdl-switch.is-upgraded{padding-left:28px}.mdl-switch.is-upgraded .mdl-switch__input{position:absolute;width:0;height:0;margin:0;padding:0;opacity:0;-ms-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;border:none}.mdl-switch__track{background:rgba(0,0,0,.26);position:absolute;left:0;top:5px;height:14px;width:36px;border-radius:14px;cursor:pointer}.mdl-switch.is-checked .mdl-switch__track{background:rgba(63,81,181,.5)}.mdl-switch.is-disabled .mdl-switch__track{background:rgba(0,0,0,.12);cursor:auto}.mdl-switch__thumb{background:#fafafa;position:absolute;left:0;top:2px;height:20px;width:20px;cursor:pointer;-webkit-transition-duration:.28s;transition-duration:.28s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:left}.mdl-switch__ripple-container,.mdl-switch__thumb{border-radius:50%;-webkit-transition-property:left}.mdl-switch.is-checked .mdl-switch__thumb{background:#3f51b5;left:16px;box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-switch.is-disabled .mdl-switch__thumb{background:#bdbdbd;cursor:auto}.mdl-switch__focus-helper{position:absolute;top:50%;left:50%;-webkit-transform:translate(-4px,-4px);-ms-transform:translate(-4px,-4px);transform:translate(-4px,-4px);display:inline-block;box-sizing:border-box;width:8px;height:8px;border-radius:50%;background-color:transparent}.mdl-switch.is-focused .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(0,0,0,.1);background-color:rgba(0,0,0,.1)}.mdl-switch.is-focused.is-checked .mdl-switch__focus-helper{box-shadow:0 0 0 20px rgba(63,81,181,.26);background-color:rgba(63,81,181,.26)}.mdl-switch__label{position:relative;cursor:pointer;font-size:16px;line-height:24px;margin:0;left:24px}.mdl-switch.is-disabled .mdl-switch__label{color:#bdbdbd;cursor:auto}.mdl-switch__ripple-container{position:absolute;top:-12px;left:-14px;width:48px;height:48px;cursor:pointer;overflow:hidden;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:step-end;transition-timing-function:step-end;transition-property:left}.mdl-switch__ripple-container .mdl-ripple{background:#3f51b5}.mdl-switch.is-disabled .mdl-switch__ripple-container{cursor:auto}.mdl-switch.is-disabled .mdl-switch__ripple-container .mdl-ripple{background:0 0}.mdl-switch.is-checked .mdl-switch__ripple-container{cursor:auto;left:2px}.mdl-tabs{display:block;width:100%}.mdl-tabs__tab-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;height:48px;padding:0;margin:0;border-bottom:1px solid #e0e0e0}.mdl-tabs__tab{margin:0;border:none;padding:0 24px;float:left;position:relative;display:block;color:red;height:48px;line-height:48px;text-align:center;font-weight:500;font-size:14px;color:rgba(0,0,0,.54);overflow:hidden}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active{color:rgba(0,0,0,.87)}.mdl-tabs.is-upgraded .mdl-tabs__tab.is-active:after{height:2px;width:100%;display:block;content:" ";bottom:0;left:0;position:absolute;background:#3f51b5;-webkit-animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;animation:border-expand .2s cubic-bezier(.4,0,.4,1) .01s alternate forwards;-webkit-transition:all 1s cubic-bezier(.4,0,1,1);transition:all 1s cubic-bezier(.4,0,1,1)}.mdl-tabs__tab .mdl-tabs__ripple-container{display:block;position:absolute;height:100%;width:100%;left:0;top:0;z-index:1;overflow:hidden}.mdl-tabs__tab .mdl-tabs__ripple-container .mdl-ripple{background:#3f51b5}.mdl-tabs__panel{display:block}.mdl-tabs.is-upgraded .mdl-tabs__panel{display:none}.mdl-tabs.is-upgraded .mdl-tabs__panel.is-active{display:block}@-webkit-keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}@keyframes border-expand{0%{opacity:0;width:0}100%{opacity:1;width:100%}}.mdl-textfield{position:relative;font-size:16px;display:inline-block;box-sizing:border-box;width:300px;max-width:100%;margin:0;padding:20px 0}.mdl-textfield .mdl-button{position:absolute;bottom:20px}.mdl-textfield--align-right{text-align:right}.mdl-textfield--full-width{width:100%}.mdl-textfield--expandable{min-width:32px;width:auto;min-height:32px}.mdl-textfield__input,.mdl-textfield__label{display:block;font-size:16px;width:100%;text-align:left}.mdl-textfield__input{border:none;border-bottom:1px solid rgba(0,0,0,.12);margin:0;padding:4px 0;color:inherit}.mdl-textfield.is-disabled.is-disabled .mdl-textfield__label,.mdl-textfield__label{color:rgba(0,0,0,.26)}.mdl-textfield.is-invalid .mdl-textfield__input{border-color:#de3226;box-shadow:none}.mdl-textfield.is-disabled .mdl-textfield__input{background-color:transparent;border-bottom:1px dotted rgba(0,0,0,.12);color:rgba(0,0,0,.26)}.mdl-textfield textarea.mdl-textfield__input{display:block}.mdl-textfield__label{bottom:0;left:0;right:0;pointer-events:none;position:absolute;top:24px;overflow:hidden;white-space:nowrap}.mdl-textfield.is-dirty .mdl-textfield__label{visibility:hidden}.mdl-textfield--floating-label .mdl-textfield__label{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield--floating-label.is-dirty .mdl-textfield__label,.mdl-textfield--floating-label.is-focused .mdl-textfield__label{color:#3f51b5;font-size:12px;top:4px;visibility:visible}.mdl-textfield--floating-label.is-invalid .mdl-textfield__label,.mdl-textfield__error{color:#de3226;font-size:12px}.mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder .mdl-textfield__label,.mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder .mdl-textfield__label{top:-16px}.mdl-textfield__label:after{background-color:#3f51b5;bottom:20px;content:'';height:2px;left:45%;position:absolute;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);visibility:hidden;width:10px}.mdl-textfield__expandable-holder,.mdl-textfield__label:after{-webkit-transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)}.mdl-textfield.is-focused .mdl-textfield__label:after{left:0;visibility:visible;width:100%}.mdl-textfield.is-invalid .mdl-textfield__label:after{background-color:#de3226}.mdl-textfield__error{position:absolute;margin-top:3px;visibility:hidden;display:block}.mdl-textfield.is-invalid .mdl-textfield__error{visibility:visible}.mdl-textfield__expandable-holder{position:relative;margin-left:32px;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-block;max-width:.1px}.mdl-textfield.is-dirty .mdl-textfield__expandable-holder,.mdl-textfield.is-focused .mdl-textfield__expandable-holder{max-width:600px}.mdl-textfield__expandable-holder .mdl-textfield__label:after{bottom:0}.mdl-tooltip{-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;will-change:transform;z-index:999;background:rgba(97,97,97,.9);border-radius:2px;color:#fff;display:inline-block;font-size:10px;font-weight:500;line-height:14px;max-width:170px;position:fixed;top:-500px;left:-500px;padding:8px;text-align:center}.mdl-tooltip.is-active{-webkit-animation:pulse 200ms cubic-bezier(0,0,.2,1) forwards;animation:pulse 200ms cubic-bezier(0,0,.2,1) forwards}.mdl-tooltip--large{line-height:14px;font-size:14px;padding:16px}@-webkit-keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}@keyframes pulse{0%{-webkit-transform:scale(0);transform:scale(0);opacity:0}50%{-webkit-transform:scale(.99);transform:scale(.99)}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1;visibility:visible}}.mdl-shadow--2dp{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12)}.mdl-shadow--3dp{box-shadow:0 3px 4px 0 rgba(0,0,0,.14),0 3px 3px -2px rgba(0,0,0,.2),0 1px 8px 0 rgba(0,0,0,.12)}.mdl-shadow--4dp{box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.mdl-shadow--6dp{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.2)}.mdl-shadow--8dp{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.2)}.mdl-shadow--16dp{box-shadow:0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12),0 8px 10px -5px rgba(0,0,0,.2)}.mdl-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin:0 auto;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}.mdl-grid.mdl-grid--no-spacing{padding:0}.mdl-cell{box-sizing:border-box}.mdl-cell--top{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.mdl-cell--middle{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.mdl-cell--bottom{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.mdl-cell--stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.mdl-grid.mdl-grid--no-spacing>.mdl-cell{margin:0}@media (max-width:479px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:100%}.mdl-cell--hide-phone{display:none!important}.mdl-cell--1-col,.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col,.mdl-grid--no-spacing>.mdl-cell--1-col-phone.mdl-cell--1-col-phone{width:25%}.mdl-cell--2-col,.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col,.mdl-grid--no-spacing>.mdl-cell--2-col-phone.mdl-cell--2-col-phone{width:50%}.mdl-cell--3-col,.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col,.mdl-grid--no-spacing>.mdl-cell--3-col-phone.mdl-cell--3-col-phone{width:75%}.mdl-cell--4-col,.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col,.mdl-grid--no-spacing>.mdl-cell--4-col-phone.mdl-cell--4-col-phone{width:100%}.mdl-cell--5-col,.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col,.mdl-grid--no-spacing>.mdl-cell--5-col-phone.mdl-cell--5-col-phone{width:100%}.mdl-cell--6-col,.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col,.mdl-grid--no-spacing>.mdl-cell--6-col-phone.mdl-cell--6-col-phone{width:100%}.mdl-cell--7-col,.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col,.mdl-grid--no-spacing>.mdl-cell--7-col-phone.mdl-cell--7-col-phone{width:100%}.mdl-cell--8-col,.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col,.mdl-grid--no-spacing>.mdl-cell--8-col-phone.mdl-cell--8-col-phone{width:100%}.mdl-cell--9-col,.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col,.mdl-grid--no-spacing>.mdl-cell--9-col-phone.mdl-cell--9-col-phone{width:100%}.mdl-cell--10-col,.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col,.mdl-grid--no-spacing>.mdl-cell--10-col-phone.mdl-cell--10-col-phone{width:100%}.mdl-cell--11-col,.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col,.mdl-grid--no-spacing>.mdl-cell--11-col-phone.mdl-cell--11-col-phone{width:100%}.mdl-cell--12-col,.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col,.mdl-grid--no-spacing>.mdl-cell--12-col-phone.mdl-cell--12-col-phone{width:100%}}@media (min-width:480px) and (max-width:839px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:50%}.mdl-cell--hide-tablet{display:none!important}.mdl-cell--1-col,.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:calc(12.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col,.mdl-grid--no-spacing>.mdl-cell--1-col-tablet.mdl-cell--1-col-tablet{width:12.5%}.mdl-cell--2-col,.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col,.mdl-grid--no-spacing>.mdl-cell--2-col-tablet.mdl-cell--2-col-tablet{width:25%}.mdl-cell--3-col,.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:calc(37.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col,.mdl-grid--no-spacing>.mdl-cell--3-col-tablet.mdl-cell--3-col-tablet{width:37.5%}.mdl-cell--4-col,.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col,.mdl-grid--no-spacing>.mdl-cell--4-col-tablet.mdl-cell--4-col-tablet{width:50%}.mdl-cell--5-col,.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:calc(62.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col,.mdl-grid--no-spacing>.mdl-cell--5-col-tablet.mdl-cell--5-col-tablet{width:62.5%}.mdl-cell--6-col,.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col,.mdl-grid--no-spacing>.mdl-cell--6-col-tablet.mdl-cell--6-col-tablet{width:75%}.mdl-cell--7-col,.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:calc(87.5% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col,.mdl-grid--no-spacing>.mdl-cell--7-col-tablet.mdl-cell--7-col-tablet{width:87.5%}.mdl-cell--8-col,.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col,.mdl-grid--no-spacing>.mdl-cell--8-col-tablet.mdl-cell--8-col-tablet{width:100%}.mdl-cell--9-col,.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col,.mdl-grid--no-spacing>.mdl-cell--9-col-tablet.mdl-cell--9-col-tablet{width:100%}.mdl-cell--10-col,.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col,.mdl-grid--no-spacing>.mdl-cell--10-col-tablet.mdl-cell--10-col-tablet{width:100%}.mdl-cell--11-col,.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col,.mdl-grid--no-spacing>.mdl-cell--11-col-tablet.mdl-cell--11-col-tablet{width:100%}.mdl-cell--12-col,.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col,.mdl-grid--no-spacing>.mdl-cell--12-col-tablet.mdl-cell--12-col-tablet{width:100%}}@media (min-width:840px){.mdl-grid{padding:8px}.mdl-cell{margin:8px;width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell{width:33.3333333333%}.mdl-cell--hide-desktop{display:none!important}.mdl-cell--1-col,.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:calc(8.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--1-col,.mdl-grid--no-spacing>.mdl-cell--1-col-desktop.mdl-cell--1-col-desktop{width:8.3333333333%}.mdl-cell--2-col,.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:calc(16.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--2-col,.mdl-grid--no-spacing>.mdl-cell--2-col-desktop.mdl-cell--2-col-desktop{width:16.6666666667%}.mdl-cell--3-col,.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:calc(25% - 16px)}.mdl-grid--no-spacing>.mdl-cell--3-col,.mdl-grid--no-spacing>.mdl-cell--3-col-desktop.mdl-cell--3-col-desktop{width:25%}.mdl-cell--4-col,.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:calc(33.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--4-col,.mdl-grid--no-spacing>.mdl-cell--4-col-desktop.mdl-cell--4-col-desktop{width:33.3333333333%}.mdl-cell--5-col,.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:calc(41.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--5-col,.mdl-grid--no-spacing>.mdl-cell--5-col-desktop.mdl-cell--5-col-desktop{width:41.6666666667%}.mdl-cell--6-col,.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:calc(50% - 16px)}.mdl-grid--no-spacing>.mdl-cell--6-col,.mdl-grid--no-spacing>.mdl-cell--6-col-desktop.mdl-cell--6-col-desktop{width:50%}.mdl-cell--7-col,.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:calc(58.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--7-col,.mdl-grid--no-spacing>.mdl-cell--7-col-desktop.mdl-cell--7-col-desktop{width:58.3333333333%}.mdl-cell--8-col,.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:calc(66.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--8-col,.mdl-grid--no-spacing>.mdl-cell--8-col-desktop.mdl-cell--8-col-desktop{width:66.6666666667%}.mdl-cell--9-col,.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:calc(75% - 16px)}.mdl-grid--no-spacing>.mdl-cell--9-col,.mdl-grid--no-spacing>.mdl-cell--9-col-desktop.mdl-cell--9-col-desktop{width:75%}.mdl-cell--10-col,.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:calc(83.3333333333% - 16px)}.mdl-grid--no-spacing>.mdl-cell--10-col,.mdl-grid--no-spacing>.mdl-cell--10-col-desktop.mdl-cell--10-col-desktop{width:83.3333333333%}.mdl-cell--11-col,.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:calc(91.6666666667% - 16px)}.mdl-grid--no-spacing>.mdl-cell--11-col,.mdl-grid--no-spacing>.mdl-cell--11-col-desktop.mdl-cell--11-col-desktop{width:91.6666666667%}.mdl-cell--12-col,.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:calc(100% - 16px)}.mdl-grid--no-spacing>.mdl-cell--12-col,.mdl-grid--no-spacing>.mdl-cell--12-col-desktop.mdl-cell--12-col-desktop{width:100%}} \ No newline at end of file diff --git a/public/vendor/nanoscroller/nanoscroller.css b/public/vendor/nanoscroller/nanoscroller.css deleted file mode 100644 index 4bb360f615..0000000000 --- a/public/vendor/nanoscroller/nanoscroller.css +++ /dev/null @@ -1,54 +0,0 @@ -/** initial setup **/ -.nano { - position : relative; - width : 100%; - height : 100%; - overflow : hidden; -} -.nano > .nano-content { - position : absolute; - overflow : scroll; - overflow-x : hidden; - top : 0; - right : 0; - bottom : 0; - left : 0; -} -.nano > .nano-content:focus { - outline: thin dotted; -} -.nano > .nano-content::-webkit-scrollbar { - display: none; -} -.has-scrollbar > .nano-content::-webkit-scrollbar { - display: block; -} -.nano > .nano-pane { - background : rgba(0,0,0,.25); - position : absolute; - width : 10px; - right : 0; - top : 0; - bottom : 0; - visibility : hidden\9; /* Target only IE7 and IE8 with this hack */ - opacity : .01; - -webkit-transition : .2s; - -moz-transition : .2s; - -o-transition : .2s; - transition : .2s; - -moz-border-radius : 5px; - -webkit-border-radius : 5px; - border-radius : 5px; -} -.nano > .nano-pane > .nano-slider { - background: rgba(255, 255, 255, 0.3); - position : relative; - margin : 0 1px; - -moz-border-radius : 3px; - -webkit-border-radius : 3px; - border-radius : 3px; -} -.nano:hover > .nano-pane, .nano-pane.active, .nano-pane.flashed { - visibility : visible\9; /* Target only IE7 and IE8 with this hack */ - opacity : 0.99; -} diff --git a/public/vendor/nanoscroller/nanoscroller.min.js b/public/vendor/nanoscroller/nanoscroller.min.js deleted file mode 100644 index bbe7d3c6d5..0000000000 --- a/public/vendor/nanoscroller/nanoscroller.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! nanoScrollerJS - v0.8.4 - (c) 2014 James Florentino; Licensed MIT */ - -!function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H;z={paneClass:"nano-pane",sliderClass:"nano-slider",contentClass:"nano-content",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},u="scrollbar",t="scroll",l="mousedown",m="mouseenter",n="mousemove",p="mousewheel",o="mouseup",s="resize",h="drag",i="enter",w="up",r="panedown",f="DOMMouseScroll",g="down",x="wheel",j="keydown",k="keyup",v="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,D=b.requestAnimationFrame,y=b.cancelAnimationFrame,F=c.createElement("div").style,H=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in F)return d[a].substr(0,d[a].length-1);return!1}(),G=function(a){return H===!1?!1:""===H?a:H+a.charAt(0).toUpperCase()+a.substr(1)},E=G("transform"),B=E!==!1,A=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=t,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},C=function(){var a,c,d;return c=b.navigator.userAgent,(a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c))?(d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23):!1},q=function(){function j(d,f){this.el=d,this.options=f,e||(e=A()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.body=this.doc.find("body"),this.$content=this.$el.children("."+f.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.previousPosition=0,this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return j.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===w&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===p){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===w&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},j.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},j.prototype.updateScrollValues=function(){var a,b;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,b=this.contentScrollTop>this.previousPosition?"down":this.contentScrollTop=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1}}(this),up:function(a){return function(){return a.isBeingDragged=!1,a.pane.removeClass("active"),a.doc.unbind(n,a.events[h]).unbind(o,a.events[w]),a.body.unbind(m,a.events[i]),!1}}(this),resize:function(a){return function(){a.reset()}}(this),panedown:function(a){return function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1}}(this),scroll:function(a){return function(b){a.updateScrollValues(),a.isBeingDragged||(a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.setOnScrollStyles()),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,w),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))}}(this),wheel:function(a){return function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}(this),enter:function(a){return function(b){var c;if(a.isBeingDragged)return 1!==(b.buttons||b.which)?(c=a.events)[w].apply(c,arguments):void 0}}(this)}},j.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(s,a[s]),this.iOSNativeScrolling||(this.slider.bind(l,a[g]),this.pane.bind(l,a[r]).bind(""+p+" "+f,a[x])),this.$content.bind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(s,a[s]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.generate=function(){var a,c,d,f,g,h,i;return f=this.options,h=f.paneClass,i=f.sliderClass,a=f.contentClass,(g=this.$el.children("."+h)).length||g.children("."+i).length||this.$el.append('
    '),this.pane=this.$el.children("."+h),this.slider=this.pane.find("."+i),0===e&&C()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/[^0-9.]+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass("has-scrollbar")),null!=c&&this.$content.css(c),this},j.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},j.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l,m,n;return this.iOSNativeScrolling?void(this.contentHeight=this.content.scrollHeight):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(),a=this.content,f=a.style,g=f.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,l=parseInt(this.$el.css("max-height"),10),l>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>l?l:a.scrollHeight)),i=this.pane.outerHeight(!1),k=parseInt(this.pane.css("top"),10),h=parseInt(this.pane.css("bottom"),10),j=i+k+h,n=Math.round(j/b*j),nthis.options.sliderMaxHeight&&(n=this.options.sliderMaxHeight),g===t&&f.overflowX!==t&&(n+=e),this.maxSliderTop=j-n,this.contentHeight=b,this.paneHeight=i,this.paneOuterHeight=j,this.sliderHeight=n,this.paneTop=k,this.slider.height(n),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&g!==t?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&g===t?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),c=this.$content.css("position"),("static"===c||"relative"===c)&&(m=parseInt(this.$content.css("right"),10),m&&this.$content.css({right:"",marginRight:m})),this)},j.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop(this.maxScrollTop*this.sliderY/this.maxSliderTop),this.iOSNativeScrolling||(this.updateScrollValues(),this.setOnScrollStyles()),this):void 0},j.prototype.scrollBottom=function(a){return this.isActive?(this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTop=function(a){return this.isActive?(this.$content.scrollTop(+a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTo=function(a){return this.isActive?(this.scrollTop(this.$el.find(a).get(0).offsetTop),this):void 0},j.prototype.stop=function(){return y&&this.scrollRAF&&(y(this.scrollRAF),this.scrollRAF=null),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},j.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass("has-scrollbar")&&(this.$el.removeClass("has-scrollbar"),this.$content.css({right:""})),this},j.prototype.flash=function(){return!this.iOSNativeScrolling&&this.isActive?(this.reset(),this.pane.addClass("flashed"),setTimeout(function(a){return function(){a.pane.removeClass("flashed")}}(this),this.options.flashDelay),this):void 0},j}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},z,b),this.nanoscroller=d=new q(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),null!=b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(null!=b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=q}(jQuery,window,document); \ No newline at end of file diff --git a/public/vendor/slideout/slideout.min.js b/public/vendor/slideout/slideout.min.js new file mode 100644 index 0000000000..e381bf02ff --- /dev/null +++ b/public/vendor/slideout/slideout.min.js @@ -0,0 +1 @@ +!function(t){var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.Slideout=t()}(function(){var t,e,n;return function i(t,e,n){function o(s,a){if(!e[s]){if(!t[s]){var u=typeof require=="function"&&require;if(!a&&u)return u(s,!0);if(r)return r(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var l=e[s]={exports:{}};t[s][0].call(l.exports,function(e){var n=t[s][1][e];return o(n?n:e)},l,l.exports,i,t,e,n)}return e[s].exports}var r=typeof require=="function"&&require;for(var s=0;st._tolerance?t.open():t.close()}t._moved=false});this.panel.addEventListener(l.move,function(e){if(s||t._preventOpen||typeof e.touches==="undefined"){return}var n=e.touches[0].clientX-t._startOffsetX;var i=t._currentOffsetX=n;if(Math.abs(i)>t._padding){return}if(Math.abs(n)>20){t._opening=true;var o=n*t._orientation;if(t._opened&&o>0||!t._opened&&o<0){return}if(o<=0){i=n+t._padding*t._orientation;t._opening=false}if(!t._moved&&u.className.search("slideout-open")===-1){u.className+=" slideout-open"}t.panel.style[p+"transform"]=t.panel.style.transform="translate3d("+i+"px, 0, 0)";t.emit("translate",i);t._moved=true}})};e.exports=d},{decouple:2,emitter:3}],2:[function(t,e,n){"use strict";var i=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();function o(t,e,n){var o,r=false;function s(t){o=t;a()}function a(){if(!r){i(u);r=true}}function u(){n.call(t,o);r=false}t.addEventListener(e,s,false)}e.exports=o},{}],3:[function(t,e,n){"use strict";var i=function(t,e){if(!(t instanceof e)){throw new TypeError("Cannot call a class as a function")}};n.__esModule=true;var o=function(){function t(){i(this,t)}t.prototype.on=function e(t,n){this._eventCollection=this._eventCollection||{};this._eventCollection[t]=this._eventCollection[t]||[];this._eventCollection[t].push(n);return this};t.prototype.once=function n(t,e){var n=this;function i(){n.off(t,i);e.apply(this,arguments)}i.listener=e;this.on(t,i);return this};t.prototype.off=function o(t,e){var n=undefined;if(!this._eventCollection||!(n=this._eventCollection[t])){return this}n.forEach(function(t,i){if(t===e||t.listener===e){n.splice(i,1)}});if(n.length===0){delete this._eventCollection[t]}return this};t.prototype.emit=function r(t){var e=this;for(var n=arguments.length,i=Array(n>1?n-1:0),o=1;o")}),t(document).on("click","[data-toggle=snackbar]",function(){t(this).snackbar("toggle")}).on("click","#snackbar-container .snackbar",function(){t(this).snackbar("hide")}),t.snackbar=function(n){if(a(n)&&n===Object(n)){var e,o=!1;a(n.id)?t("#"+n.id).length?e=t("#"+n.id):(e=t("
    ").attr("id",""+n.id).attr("class","snackbar"),o=!0):(e=t("
    ").attr("id","snackbar"+Date.now()).attr("class","snackbar"),o=!0);var i=e.hasClass("snackbar-opened");a(n.style)?(i?e.attr("class","snackbar snackbar-opened "+n.style):e.attr("class","snackbar "+n.style),e.attr("data-style",n.style)):i?e.attr("class","snackbar snackbar-opened"):e.attr("class","snackbar"),n.htmlAllowed=a(n.htmlAllowed)?n.htmlAllowed:!1,n.timeout=a(n.timeout)?n.timeout:3e3,e.attr("data-timeout",n.timeout),n.content=n.htmlAllowed?n.content:t("

    "+n.content+"

    ").text(),a(n.htmlAllowed)&&e.attr("data-html-allowed",n.htmlAllowed),a(n.content)&&(e.find(".snackbar-content").length?e.find(".snackbar-content").html(n.content):e.prepend(""+n.content+""),e.attr("data-content",n.content)),o?e.appendTo("#snackbar-container"):e.insertAfter("#snackbar-container .snackbar:last-child"),a(n.action)&&"toggle"==n.action&&(n.action=i?"hide":"show");var s=Date.now();e.data("animationId1",s),setTimeout(function(){e.data("animationId1")===s&&(a(n.action)&&"show"!=n.action?a(n.action)&&"hide"==n.action&&e.removeClass("snackbar-opened"):e.addClass("snackbar-opened"))},50);var c=Date.now();return e.data("animationId2",c),0!==n.timeout&&setTimeout(function(){e.data("animationId2")===c&&e.removeClass("snackbar-opened")},n.timeout),e}return!1},t.fn.snackbar=function(n){if("undefined"!=typeof n){var e={};if(this.hasClass("snackbar"))return e={id:this.attr("id"),content:t(this).attr("data-content"),style:t(this).attr("data-style"),timeout:t(this).attr("data-timeout"),htmlAllowed:t(this).attr("data-html-allowed")},("show"===n||"hide"===n||"toggle"==n)&&(e.action=n),t.snackbar(e);a(n)&&"show"!==n&&"hide"!==n&&"toggle"!=n||(e={content:t(this).attr("data-content"),style:t(this).attr("data-style"),timeout:t(this).attr("data-timeout"),htmlAllowed:t(this).attr("data-html-allowed")}),a(n)&&(e.id=this.attr("data-snackbar-id"),("show"===n||"hide"===n||"toggle"==n)&&(e.action=n));var o=t.snackbar(e);return this.attr("data-snackbar-id",o.attr("id")),o}}}); \ No newline at end of file diff --git a/src/analytics.js b/src/analytics.js index 49254954bc..8ac91877c3 100644 --- a/src/analytics.js +++ b/src/analytics.js @@ -66,4 +66,23 @@ var cronJob = require('cron').CronJob, Analytics.getUnwrittenPageviews = function() { return pageViews; }; + + Analytics.getMonthlyPageViews = function(callback) { + var thisMonth = new Date(); + var lastMonth = new Date(); + thisMonth.setMonth(thisMonth.getMonth(), 1); + thisMonth.setHours(0, 0, 0, 0); + lastMonth.setMonth(thisMonth.getMonth() - 1, 1); + lastMonth.setHours(0, 0, 0, 0); + + var values = [thisMonth.getTime(), lastMonth.getTime()]; + + db.sortedSetScores('analytics:pageviews:month', values, function(err, scores) { + if (err) { + return callback(err); + } + callback(null, {thisMonth: scores[0] || 0, lastMonth: scores[1] || 0}); + }); + }; + }(exports)); \ No newline at end of file diff --git a/src/categories.js b/src/categories.js index d30cd0c47a..0626de3349 100644 --- a/src/categories.js +++ b/src/categories.js @@ -103,10 +103,10 @@ var async = require('async'), }); }; - Categories.getCategoriesByPrivilege = function(uid, privilege, callback) { + Categories.getCategoriesByPrivilege = function(set, uid, privilege, callback) { async.waterfall([ function(next) { - db.getSortedSetRange('categories:cid', 0, -1, next); + db.getSortedSetRange(set, 0, -1, next); }, function(cids, next) { privileges.categories.filterCids(privilege, cids, uid, next); @@ -273,6 +273,7 @@ var async = require('async'), if (!category) { return; } + var postCount = parseInt(category.post_count, 10) || 0; var topicCount = parseInt(category.topic_count, 10) || 0; if (!Array.isArray(category.children) || !category.children.length) { @@ -282,9 +283,11 @@ var async = require('async'), } category.children.forEach(function(child) { - postCount += parseInt(child.post_count, 10) || 0; - topicCount += parseInt(child.topic_count, 10) || 0; + calculateTopicPostCount(child); + postCount += parseInt(child.totalPostCount, 10) || 0; + topicCount += parseInt(child.totalTopicCount, 10) || 0; }); + category.totalPostCount = postCount; category.totalTopicCount = topicCount; } @@ -308,22 +311,57 @@ var async = require('async'), }; Categories.getChildren = function(cids, uid, callback) { + var categories = cids.map(function(cid) { + return {cid: cid}; + }); + + async.each(categories, function(category, next) { + getChildrenRecursive(category, uid, next); + }, function (err) { + callback(err, categories.map(function(c) { + return c && c.children; + })); + }); + }; + + function getChildrenRecursive(category, uid, callback) { async.waterfall([ - async.apply(db.getSortedSetRange, 'categories:cid', 0, -1), - function(cids, next) { - privileges.categories.filterCids('find', cids, uid, next); + function (next) { + db.getSortedSetRange('cid:' + category.cid + ':children', 0, -1, next); }, - function (cids, next) { - Categories.getCategoriesData(cids, next); + function (children, next) { + privileges.categories.filterCids('find', children, uid, next); }, - function (categories, next) { - async.map(cids, function(cid, next) { - next(null, categories.filter(function(category) { - return category && parseInt(category.parentCid, 10) === parseInt(cid, 10); - })); + function (children, next) { + if (!children.length) { + category.children = []; + return callback(); + } + Categories.getCategoriesData(children, next); + }, + function (childrenData, next) { + category.children = childrenData; + async.each(category.children, function(child, next) { + getChildrenRecursive(child, uid, next); }, next); } ], callback); + } + + Categories.flattenCategories = function(allCategories, categoryData) { + categoryData.forEach(function(category) { + if (!category) { + return; + } + + if (!category.parent) { + allCategories.push(category); + } + + if (Array.isArray(category.children) && category.children.length) { + Categories.flattenCategories(allCategories, category.children); + } + }); }; /** @@ -335,13 +373,13 @@ var async = require('async'), Categories.getTree = function(categories, parentCid) { var tree = [], i = 0, len = categories.length, category; - for(i; i < len; ++i) { + for (i; i < len; ++i) { category = categories[i]; if (!category.hasOwnProperty('parentCid')) { category.parentCid = 0; } - if(category.parentCid == parentCid){ + if (category.parentCid == parentCid){ tree.push(category); category.children = Categories.getTree(categories, category.cid); } diff --git a/src/categories/create.js b/src/categories/create.js index 71eef4e72e..73a2591714 100644 --- a/src/categories/create.js +++ b/src/categories/create.js @@ -10,6 +10,8 @@ module.exports = function(Categories) { Categories.create = function(data, callback) { var category; + var parentCid = data.parentCid ? data.parentCid : 0; + async.waterfall([ function(next) { db.incrObjectField('global', 'nextCid', next); @@ -27,7 +29,7 @@ module.exports = function(Categories) { bgColor: data.bgColor || colours[0], color: data.color || colours[1], slug: slug, - parentCid: ( data.parentCid ? data.parentCid : 0 ), + parentCid: parentCid, topic_count: 0, post_count: 0, disabled: 0, @@ -48,6 +50,7 @@ module.exports = function(Categories) { async.series([ async.apply(db.setObject, 'category:' + category.cid, category), async.apply(db.sortedSetAdd, 'categories:cid', category.order, category.cid), + async.apply(db.sortedSetAdd, 'cid:' + parentCid + ':children', category.order, category.cid), async.apply(privileges.categories.give, defaultPrivileges, category.cid, 'administrators'), async.apply(privileges.categories.give, defaultPrivileges, category.cid, 'registered-users'), async.apply(privileges.categories.give, ['find', 'read'], category.cid, 'guests') diff --git a/src/categories/delete.js b/src/categories/delete.js index 1679ab6731..8483efaf72 100644 --- a/src/categories/delete.js +++ b/src/categories/delete.js @@ -30,15 +30,32 @@ module.exports = function(Categories) { function(next) { db.sortedSetRemove('categories:cid', cid, next); }, + function(next) { + removeFromParent(cid, next); + }, function(next) { db.deleteAll([ 'cid:' + cid + ':tids', 'cid:' + cid + ':tids:posts', 'cid:' + cid + ':pids', 'cid:' + cid + ':read_by_uid', + 'cid:' + cid + ':children', 'category:' + cid ], next); } ], callback); } + + function removeFromParent(cid, callback) { + async.waterfall([ + function(next) { + Categories.getCategoryField(cid, 'parentCid', next); + }, + function(parentCid, next) { + parentCid = parseInt(parentCid, 10) || 0; + db.sortedSetRemove('cid:' + parentCid + ':children', cid, next); + } + ], callback); + + } }; \ No newline at end of file diff --git a/src/categories/recentreplies.js b/src/categories/recentreplies.js index f495ab1463..d7a2a165a0 100644 --- a/src/categories/recentreplies.js +++ b/src/categories/recentreplies.js @@ -56,9 +56,10 @@ module.exports = function(Categories) { } }, function(posts, next) { - categoryData.forEach(function(category) { - assignPostsToCategory(category, posts); - }); + assignPostsToCategories(categoryData, posts); + + bubbleUpChildrenPosts(categoryData); + next(); } ], callback); @@ -87,13 +88,42 @@ module.exports = function(Categories) { ], callback); } - function assignPostsToCategory(category, posts) { - category.posts = posts.filter(function(post) { - return post.category && (parseInt(post.category.cid, 10) === parseInt(category.cid, 10) || - parseInt(post.category.parentCid, 10) === parseInt(category.cid, 10)); - }).sort(function(a, b) { - return b.timestamp - a.timestamp; - }).slice(0, parseInt(category.numRecentReplies, 10)); + function bubbleUpChildrenPosts(categoryData) { + categoryData.forEach(function(category) { + if (category.posts.length) { + return; + } + var posts = []; + getPostsRecursive(category, posts); + + posts.sort(function(a, b) { + return b.timestamp - a.timestamp; + }); + if (posts.length) { + category.posts = [posts[0]]; + } + }); + } + + function getPostsRecursive(category, posts) { + category.posts.forEach(function(p) { + posts.push(p); + }); + + category.children.forEach(function(child) { + getPostsRecursive(child, posts); + }); + } + + function assignPostsToCategories(categories, posts) { + categories.forEach(function(category) { + category.posts = posts.filter(function(post) { + return post.category && (parseInt(post.category.cid, 10) === parseInt(category.cid, 10) || + parseInt(post.category.parentCid, 10) === parseInt(category.cid, 10)); + }).sort(function(a, b) { + return b.timestamp - a.timestamp; + }).slice(0, parseInt(category.numRecentReplies, 10)); + }); } function getRecentTopicPids(category, callback) { diff --git a/src/categories/update.js b/src/categories/update.js index fb5cec5054..036b405c96 100644 --- a/src/categories/update.js +++ b/src/categories/update.js @@ -50,17 +50,63 @@ module.exports = function(Categories) { }; function updateCategoryField(cid, key, value, callback) { + if (key === 'parentCid') { + return updateParent(cid, value, callback); + } + db.setObjectField('category:' + cid, key, value, function(err) { if (err) { return callback(err); } if (key === 'order') { - db.sortedSetAdd('categories:cid', value, cid, callback); + updateOrder(cid, value, callback); } else { callback(); } }); } + function updateParent(cid, newParent, callback) { + Categories.getCategoryField(cid, 'parentCid', function(err, oldParent) { + if (err) { + return callback(err); + } + + async.series([ + function (next) { + oldParent = parseInt(oldParent, 10) || 0; + db.sortedSetRemove('cid:' + oldParent + ':children', cid, next); + }, + function (next) { + newParent = parseInt(newParent, 10) || 0; + db.sortedSetAdd('cid:' + newParent + ':children', cid, cid, next); + }, + function (next) { + db.setObjectField('category:' + cid, 'parentCid', newParent, next); + } + ], function(err, results) { + callback(err); + }); + }); + } + + function updateOrder(cid, order, callback) { + Categories.getCategoryField(cid, 'parentCid', function(err, parentCid) { + if (err) { + return callback(err); + } + + async.parallel([ + function (next) { + db.sortedSetAdd('categories:cid', order, cid, next); + }, + function (next) { + parentCid = parseInt(parentCid, 10) || 0; + db.sortedSetAdd('cid:' + parentCid + ':children', order, cid, next); + } + ], callback); + }); + } + }; diff --git a/src/controllers/accounts.js b/src/controllers/accounts.js index 64a6d26786..cafcabafcb 100644 --- a/src/controllers/accounts.js +++ b/src/controllers/accounts.js @@ -175,6 +175,10 @@ accountsController.getAccount = function(req, res, next) { return next(err); } + if (parseInt(meta.config['reputation:disabled'], 10) === 1) { + delete userData.reputation; + } + userData.posts = results.posts.posts.filter(function (p) { return p && parseInt(p.deleted, 10) !== 1; }); @@ -226,6 +230,7 @@ function getFollow(tpl, name, req, res, next) { userData.users = users; userData.nextStart = 50; + userData.title = '[[pages:' + tpl + ', ' + userData.username + ']]'; res.render(tpl, userData); }); @@ -264,7 +269,7 @@ accountsController.getGroups = function(req, res, next) { userData.groups = groupsData[0]; userData.groups.forEach(groups.escapeGroupData); - + userData.title = '[[pages:account/groups, ' + userData.username + ']]'; res.render('account/groups', userData); }); }); @@ -317,6 +322,8 @@ function getFromUserSet(tpl, set, method, type, req, res, next) { var pagination = require('../pagination'); userData.pagination = pagination.create(page, pageCount); + userData.title = '[[pages:' + tpl + ', ' + userData.username + ']]'; + res.render(tpl, userData); }); }); @@ -373,7 +380,7 @@ accountsController.accountEdit = function(req, res, next) { } userData.hasPassword = !!password; - + userData.title = '[[pages:account/edit, ' + userData.username + ']]'; res.render('account/edit', userData); }); }; @@ -424,6 +431,82 @@ accountsController.accountSettings = function(req, res, next) { {value: 'month', name: '[[user:digest_monthly]]', selected: 'month' === userData.settings.dailyDigestFreq} ]; + + userData.bootswatchSkinOptions = [ + { + "name": "Default", + "value": "default" + }, + { + "name": "Cerulean", + "value": "cerulean" + }, + { + "name": "Cosmo", + "value": "cosmo" + }, + { + "name": "Cyborg", + "value": "cyborg" + }, + { + "name": "Darkly", + "value": "darkly" + }, + { + "name": "Flatly", + "value": "flatly" + }, + { + "name": "Journal", + "value": "journal" + }, + { + "name": "Lumen", + "value": "lumen" + }, + { + "name": "Paper", + "value": "paper" + }, + { + "name": "Readable", + "value": "readable" + }, + { + "name": "Sandstone", + "value": "sandstone" + }, + { + "name": "Simplex", + "value": "simplex" + }, + { + "name": "Slate", + "value": "slate" + }, + { + "name": "Spacelab", + "value": "spacelab" + }, + { + "name": "Superhero", + "value": "superhero" + }, + { + "name": "United", + "value": "united" + }, + { + "name": "Yeti", + "value": "yeti" + } + ]; + + userData.bootswatchSkinOptions.forEach(function(skin) { + skin.selected = skin.value === userData.settings.bootswatchSkin; + }); + userData.userGroups.forEach(function(group) { group.selected = group.name === userData.settings.groupTitle; }); @@ -432,6 +515,10 @@ accountsController.accountSettings = function(req, res, next) { language.selected = language.code === userData.settings.userLang; }); + userData.disableCustomUserSkins = parseInt(meta.config.disableCustomUserSkins, 10) === 1; + + userData.title = '[[pages:account/settings]]'; + res.render('account/settings', userData); }); }; @@ -481,7 +568,8 @@ accountsController.getNotifications = function(req, res, next) { return next(err); } res.render('notifications', { - notifications: notifications + notifications: notifications, + title: '[[pages:notifications]]' }); }); }; @@ -498,7 +586,7 @@ accountsController.getChats = function(req, res, next) { } async.parallel({ - contacts: async.apply(user.getFollowing, req.user.uid, 0, 19), + contacts: async.apply(user.getFollowing, req.user.uid, 0, 199), recentChats: async.apply(messaging.getRecentChats, req.user.uid, 0, 19) }, function(err, results) { if (err) { @@ -521,7 +609,8 @@ accountsController.getChats = function(req, res, next) { chats: results.recentChats.users, nextStart: results.recentChats.nextStart, contacts: results.contacts, - allowed: true + allowed: true, + title: '[[pages:chats]]' }); } @@ -549,7 +638,8 @@ accountsController.getChats = function(req, res, next) { contacts: results.contacts, meta: data.toUser, messages: data.messages, - allowed: data.allowed + allowed: data.allowed, + title: '[[pages:chat, ' + data.toUser.username + ']]' }); }); }); diff --git a/src/controllers/admin.js b/src/controllers/admin.js index 934881a6bd..776b6e9362 100644 --- a/src/controllers/admin.js +++ b/src/controllers/admin.js @@ -269,17 +269,39 @@ adminController.postCache.get = function(req, res, next) { }; adminController.plugins.get = function(req, res, next) { - plugins.getAll(function(err, plugins) { - if (err || !Array.isArray(plugins)) { - plugins = []; + async.parallel({ + compatible: function(next) { + plugins.list(function(err, plugins) { + if (err || !Array.isArray(plugins)) { + plugins = []; + } + + next(null, plugins); + }); + }, + all: function(next) { + plugins.list(false, function(err, plugins) { + if (err || !Array.isArray(plugins)) { + plugins = []; + } + + next(null, plugins); + }); } + }, function(err, payload) { + var compatiblePkgNames = payload.compatible.map(function(pkgData) { + return pkgData.name; + }); res.render('admin/extend/plugins' , { - installed: plugins.filter(function(plugin) { + installed: payload.compatible.filter(function(plugin) { return plugin.installed; }), - download: plugins.filter(function(plugin) { + download: payload.compatible.filter(function(plugin) { return !plugin.installed; + }), + incompatible: payload.all.filter(function(plugin) { + return compatiblePkgNames.indexOf(plugin.name) === -1; }) }); }); diff --git a/src/controllers/admin/uploads.js b/src/controllers/admin/uploads.js index 88509df0a0..8cdf5f81f3 100644 --- a/src/controllers/admin/uploads.js +++ b/src/controllers/admin/uploads.js @@ -38,7 +38,7 @@ uploadsController.uploadFavicon = function(req, res, next) { return next(err); } - res.json([{name: uploadedFile.name, url: nconf.get('relative_path') + image.url}]); + res.json([{name: uploadedFile.name, url: image.url}]); }); } }; diff --git a/src/controllers/api.js b/src/controllers/api.js index c09a96490d..ed0be22efe 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -27,6 +27,7 @@ apiController.getConfig = function(req, res, next) { config.websocketAddress = nconf.get('socket.io:address') || ''; config.version = nconf.get('version'); config.siteTitle = validator.escape(meta.config.title || meta.config.browserTitle || 'NodeBB'); + config.browserTitle = validator.escape(meta.config.browserTitle || meta.config.title || 'NodeBB'); config.showSiteTitle = parseInt(meta.config.showSiteTitle, 10) === 1; config.postDelay = meta.config.postDelay; config.minimumTitleLength = meta.config.minimumTitleLength; @@ -63,6 +64,7 @@ apiController.getConfig = function(req, res, next) { config.postsPerPage = meta.config.postsPerPage || 20; config.maximumFileSize = meta.config.maximumFileSize; config['theme:id'] = meta.config['theme:id']; + config['theme:src'] = meta.config['theme:src']; config.defaultLang = meta.config.defaultLang || 'en_GB'; config.userLang = req.query.lang || config.defaultLang; config.environment = process.env.NODE_ENV; diff --git a/src/controllers/categories.js b/src/controllers/categories.js index fe44af90a8..82c1cbc1e1 100644 --- a/src/controllers/categories.js +++ b/src/controllers/categories.js @@ -9,64 +9,12 @@ var categoriesController = {}, privileges = require('../privileges'), user = require('../user'), categories = require('../categories'), - topics = require('../topics'), meta = require('../meta'), plugins = require('../plugins'), pagination = require('../pagination'), helpers = require('./helpers'), utils = require('../../public/src/utils'); -categoriesController.recent = function(req, res, next) { - var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; - topics.getTopicsFromSet('topics:recent', req.uid, 0, stop, function(err, data) { - if (err) { - return next(err); - } - - data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; - data.rssFeedUrl = nconf.get('relative_path') + '/recent.rss'; - data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[recent:title]]'}]); - res.render('recent', data); - }); -}; - -var anonCache = {}, lastUpdateTime = 0; - -categoriesController.popular = function(req, res, next) { - var terms = { - daily: 'day', - weekly: 'week', - monthly: 'month', - alltime: 'alltime' - }; - var term = terms[req.params.term] || 'day'; - - if (!req.uid) { - if (anonCache[term] && (Date.now() - lastUpdateTime) < 60 * 60 * 1000) { - return res.render('popular', anonCache[term]); - } - } - - topics.getPopular(term, req.uid, meta.config.topicsPerList, function(err, topics) { - if (err) { - return next(err); - } - - var data = { - topics: topics, - 'feeds:disableRSS': parseInt(meta.config['feeds:disableRSS'], 10) === 1, - rssFeedUrl: nconf.get('relative_path') + '/popular/' + (req.params.term || 'daily') + '.rss', - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[global:header.popular]]'}]) - }; - - if (!req.uid) { - anonCache[term] = data; - lastUpdateTime = Date.now(); - } - - res.render('popular', data); - }); -}; categoriesController.list = function(req, res, next) { async.parallel({ @@ -85,7 +33,7 @@ categoriesController.list = function(req, res, next) { content: 'website' }]; - if(meta.config['brand:logo']) { + if (meta.config['brand:logo']) { res.locals.metaTags.push({ property: 'og:image', content: meta.config['brand:logo'] @@ -98,22 +46,13 @@ categoriesController.list = function(req, res, next) { var categoryData; async.waterfall([ function(next) { - categories.getCategoriesByPrivilege(req.uid, 'find', next); + categories.getCategoriesByPrivilege('cid:0:children', req.uid, 'find', next); }, function(_categoryData, next) { categoryData = _categoryData; + var allCategories = []; - - categoryData = categoryData.filter(function(category) { - if (!category.parent) { - allCategories.push(category); - } - - if (Array.isArray(category.children) && category.children.length) { - allCategories.push.apply(allCategories, category.children); - } - return category && !category.parent; - }); + categories.flattenCategories(allCategories, categoryData); categories.getRecentTopicReplies(allCategories, req.uid, next); } @@ -126,6 +65,8 @@ categoriesController.list = function(req, res, next) { return next(err); } + data.title = '[[pages:categories]]'; + plugins.fireHook('filter:categories.build', {req: req, res: res, templateData: data}, function(err, data) { if (err) { return next(err); @@ -252,7 +193,9 @@ categoriesController.get = function(req, res, next) { }); }, function(categoryData, next) { - categories.getRecentTopicReplies(categoryData.children, req.uid, function(err) { + var allCategories = []; + categories.flattenCategories(allCategories, [categoryData]); + categories.getRecentTopicReplies(allCategories, req.uid, function(err) { next(err, categoryData); }); }, @@ -309,7 +252,7 @@ categoriesController.get = function(req, res, next) { data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; data.rssFeedUrl = nconf.get('relative_path') + '/category/' + data.cid + '.rss'; data.pagination = pagination.create(data.currentPage, data.pageCount); - + data.title = data.name; data.pagination.rel.forEach(function(rel) { res.locals.linkTags.push(rel); }); diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 071ffcb975..a44307d41e 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -16,6 +16,7 @@ groupsController.list = function(req, res, next) { if (err) { return next(err); } + data.title = '[[pages:groups]]'; res.render('groups/list', data); }); }; @@ -97,6 +98,7 @@ groupsController.details = function(req, res, next) { return helpers.notFound(req, res); } + results.title = '[[pages:group, ' + results.group.displayName + ']]'; res.render('groups/details', results); }); }); diff --git a/src/controllers/index.js b/src/controllers/index.js index 25e0b7f1ee..f6cf3c3c6d 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -19,6 +19,8 @@ var Controllers = { topics: require('./topics'), categories: require('./categories'), unread: require('./unread'), + recent: require('./recent'), + popular: require('./popular'), tags: require('./tags'), search: require('./search'), users: require('./users'), @@ -40,9 +42,9 @@ Controllers.home = function(req, res, next) { if (route === 'categories') { Controllers.categories.list(req, res, next); } else if (route === 'recent') { - Controllers.categories.recent(req, res, next); + Controllers.recent.get(req, res, next); } else if (route === 'popular') { - Controllers.categories.popular(req, res, next); + Controllers.popular.get(req, res, next); } else { next(); } @@ -59,7 +61,8 @@ Controllers.reset = function(req, res, next) { valid: valid, displayExpiryNotice: req.session.passwordExpired, code: req.params.code ? req.params.code : null, - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[reset_password:reset_password]]', url: '/reset'}, {text: '[[reset_password:update_password]]'}]) + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[reset_password:reset_password]]', url: '/reset'}, {text: '[[reset_password:update_password]]'}]), + title: '[[pages:reset]]' }); delete req.session.passwordExpired; @@ -67,7 +70,8 @@ Controllers.reset = function(req, res, next) { } else { res.render('reset', { code: req.params.code ? req.params.code : null, - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[reset_password:reset_password]]'}]) + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[reset_password:reset_password]]'}]), + title: '[[pages:reset]]' }); } @@ -88,6 +92,7 @@ Controllers.login = function(req, res, next) { data.allowLoginWith = '[[login:' + (meta.config.allowLoginWith || 'username-email') + ']]'; data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[global:login]]'}]); data.error = req.flash('error')[0]; + data.title = '[[pages:login]]'; res.render('login', data); }; @@ -108,6 +113,9 @@ Controllers.register = function(req, res, next) { } }, function(next) { + plugins.fireHook('filter:parse.post', {postData: {content: meta.config.termsOfUse}}, next); + }, + function(tos, next) { var loginStrategies = require('../routes/authentication').getLoginStrategies(); var data = { 'register_window:spansize': loginStrategies.length ? 'col-md-6' : 'col-md-12', @@ -119,10 +127,11 @@ Controllers.register = function(req, res, next) { data.minimumUsernameLength = meta.config.minimumUsernameLength; data.maximumUsernameLength = meta.config.maximumUsernameLength; data.minimumPasswordLength = meta.config.minimumPasswordLength; - data.termsOfUse = meta.config.termsOfUse; + data.termsOfUse = tos.postData.content; data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[register:register]]'}]); data.regFormEntry = []; data.error = req.flash('error')[0]; + data.title = '[[pages:register]]'; plugins.fireHook('filter:register.build', {req: req, res: res, templateData: data}, next); } @@ -181,7 +190,7 @@ Controllers.robots = function (req, res) { Controllers.outgoing = function(req, res, next) { var url = req.query.url, data = { - url: url, + url: validator.escape(url), title: meta.config.title, breadcrumbs: helpers.buildBreadcrumbs([{text: '[[notifications:outgoing_link]]'}]) }; diff --git a/src/controllers/popular.js b/src/controllers/popular.js new file mode 100644 index 0000000000..9a39af45f6 --- /dev/null +++ b/src/controllers/popular.js @@ -0,0 +1,52 @@ + +'use strict'; + +var nconf = require('nconf'), + topics = require('../topics'), + meta = require('../meta'), + helpers = require('./helpers'); + +var popularController = {}; + +var anonCache = {}, lastUpdateTime = 0; + +var terms = { + daily: 'day', + weekly: 'week', + monthly: 'month', + alltime: 'alltime' +}; + +popularController.get = function(req, res, next) { + + var term = terms[req.params.term] || 'day'; + + if (!req.uid) { + if (anonCache[term] && (Date.now() - lastUpdateTime) < 60 * 60 * 1000) { + return res.render('popular', anonCache[term]); + } + } + + topics.getPopular(term, req.uid, meta.config.topicsPerList, function(err, topics) { + if (err) { + return next(err); + } + + var data = { + topics: topics, + 'feeds:disableRSS': parseInt(meta.config['feeds:disableRSS'], 10) === 1, + rssFeedUrl: nconf.get('relative_path') + '/popular/' + (req.params.term || 'daily') + '.rss', + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[global:header.popular]]'}]), + title: '[[pages:popular-' + term + ']]' + }; + + if (!req.uid) { + anonCache[term] = data; + lastUpdateTime = Date.now(); + } + + res.render('popular', data); + }); +}; + +module.exports = popularController; \ No newline at end of file diff --git a/src/controllers/recent.js b/src/controllers/recent.js new file mode 100644 index 0000000000..a7f0cfca8a --- /dev/null +++ b/src/controllers/recent.js @@ -0,0 +1,35 @@ + +'use strict'; + +var nconf = require('nconf'), + topics = require('../topics'), + meta = require('../meta'), + helpers = require('./helpers'), + plugins = require('../plugins'); + +var recentController = {}; + +recentController.get = function(req, res, next) { + + var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; + + topics.getTopicsFromSet('topics:recent', req.uid, 0, stop, function(err, data) { + if (err) { + return next(err); + } + + data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1; + data.rssFeedUrl = nconf.get('relative_path') + '/recent.rss'; + data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[recent:title]]'}]); + data.title = '[[pages:recent]]'; + + plugins.fireHook('filter:recent.build', {req: req, res: res, templateData: data}, function(err, data) { + if (err) { + return next(err); + } + res.render('recent', data.templateData); + }); + }); +}; + +module.exports = recentController; \ No newline at end of file diff --git a/src/controllers/search.js b/src/controllers/search.js index 6637acbbc3..2148e6644b 100644 --- a/src/controllers/search.js +++ b/src/controllers/search.js @@ -17,7 +17,7 @@ searchController.search = function(req, res, next) { var breadcrumbs = helpers.buildBreadcrumbs([{text: '[[global:search]]'}]); - categories.getCategoriesByPrivilege(req.uid, 'read', function(err, categories) { + categories.getCategoriesByPrivilege('categories:cid', req.uid, 'read', function(err, categories) { if (err) { return next(err); } diff --git a/src/controllers/tags.js b/src/controllers/tags.js index c63e220cc8..6c9654006f 100644 --- a/src/controllers/tags.js +++ b/src/controllers/tags.js @@ -62,7 +62,8 @@ tagsController.getTag = function(req, res, next) { topics: results.topics, tag: tag, nextStart: stop + 1, - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[tags:tags]]', url: '/tags'}, {text: tag}]) + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[tags:tags]]', url: '/tags'}, {text: tag}]), + title: '[[pages:tag, ' + tag + ']]' }; res.render('tag', data); }); @@ -76,7 +77,8 @@ tagsController.getTags = function(req, res, next) { var data = { tags: tags, nextStart: 100, - breadcrumbs: helpers.buildBreadcrumbs([{text: '[[tags:tags]]'}]) + breadcrumbs: helpers.buildBreadcrumbs([{text: '[[tags:tags]]'}]), + title: '[[pages:tags]]' }; res.render('tags', data); }); diff --git a/src/controllers/unread.js b/src/controllers/unread.js index 672ec37542..f9cccf3d3a 100644 --- a/src/controllers/unread.js +++ b/src/controllers/unread.js @@ -5,14 +5,14 @@ var async = require('async'), meta = require('../meta'), categories = require('../categories'), + privileges = require('../privileges'), user = require('../user'), topics = require('../topics'), helpers = require('./helpers'); var unreadController = {}; - -unreadController.unread = function(req, res, next) { +unreadController.get = function(req, res, next) { var stop = (parseInt(meta.config.topicsPerList, 10) || 20) - 1; var results; var cid = req.query.cid; @@ -30,11 +30,15 @@ unreadController.unread = function(req, res, next) { }, function(_results, next) { results = _results; - categories.getMultipleCategoryFields(results.watchedCategories, ['cid', 'name', 'slug', 'icon', 'link', 'disabled'], next); + + privileges.categories.filterCids('read', results.watchedCategories, req.uid, next); + }, + function(cids, next) { + categories.getMultipleCategoryFields(cids, ['cid', 'name', 'slug', 'icon', 'link'], next); }, function(categories, next) { categories = categories.filter(function(category) { - return category && !category.link && !category.disabled; + return category && !category.link; }); categories.forEach(function(category) { category.selected = parseInt(category.cid, 10) === parseInt(cid, 10); @@ -51,6 +55,8 @@ unreadController.unread = function(req, res, next) { } data.breadcrumbs = helpers.buildBreadcrumbs([{text: '[[unread:title]]'}]); + data.title = '[[pages:unread]]'; + res.render('unread', data); }); }; diff --git a/src/controllers/users.js b/src/controllers/users.js index 6e2cfd566f..a03f457913 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -14,6 +14,10 @@ var async = require('async'), db = require('../database'), helpers = require('./helpers'); +usersController.redirectToOnlineUsers = function(req, res, next) { + helpers.redirect(res, '/users/online'); +}; + usersController.getOnlineUsers = function(req, res, next) { var websockets = require('../socket.io'); @@ -40,11 +44,13 @@ usersController.getOnlineUsers = function(req, res, next) { } var userData = { - 'users:online': true, + 'route_users:online': true, search_display: 'hidden', loadmore_display: results.count > 50 ? 'block' : 'hide', users: results.users, - anonymousUserCount: websockets.getOnlineAnonCount() + anonymousUserCount: websockets.getOnlineAnonCount(), + defaultGravatar: user.createGravatarURLFromEmail(''), + title: '[[pages:users/online]]' }; render(req, res, userData, next); @@ -64,6 +70,11 @@ usersController.getUsersSortedByJoinDate = function(req, res, next) { }; usersController.getUsers = function(set, start, stop, req, res, next) { + var setToTitles = { + 'users:postcount': '[[pages:users/sort-posts]]', + 'users:reputation': '[[pages:users/sort-reputation]]', + 'users:joindate': '[[pages:users/latest]]' + }; usersController.getUsersAndCount(set, req.uid, start, stop, function(err, data) { if (err) { return next(err); @@ -73,9 +84,10 @@ usersController.getUsers = function(set, start, stop, req, res, next) { search_display: 'hidden', loadmore_display: data.count > (stop - start + 1) ? 'block' : 'hide', users: data.users, - pagination: pagination.create(1, pageCount) + pagination: pagination.create(1, pageCount), + title: setToTitles[set] || '[[pages:users/latest]]' }; - userData[set] = true; + userData['route_' + set] = true; render(req, res, userData, next); }); }; @@ -114,7 +126,8 @@ usersController.getUsersForSearch = function(req, res, next) { var userData = { search_display: 'block', loadmore_display: 'hidden', - users: data.users + users: data.users, + title: '[[pages:users/search]]' }; render(req, res, userData, next); @@ -157,6 +170,7 @@ usersController.getMap = function(req, res, next) { } data.room = validator.escape(categoryData.name); data.link = '/category/' + categoryData.slug; + data.core = false; next(null, data); }); } else if (roomName.startsWith('topic_')) { @@ -167,13 +181,18 @@ usersController.getMap = function(req, res, next) { } data.room = validator.escape(topicData.title); data.link = '/topic/' + topicData.slug; + data.core = false; next(null, data); }); } else { + data.core = true; next(null, data); } }); }, function(err, data) { + if (err) { + return next(err); + } data.sort(function(a, b) { return b.users.length - a.users.length; }); @@ -184,7 +203,7 @@ usersController.getMap = function(req, res, next) { } }); - res.render('usersMap', {rooms: data}); + res.render('usersMap', {rooms: data, title: '[[pages:users/map]]'}); }); }; diff --git a/src/database/mongo.js b/src/database/mongo.js index 389a85bf7d..49f2da5edd 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -177,16 +177,25 @@ }; module.info = function(db, callback) { - db.stats({scale:1024}, function(err, stats) { - if(err) { + async.parallel({ + serverStats: function(next) { + db.command({'serverStatus': 1}, next); + }, + stats: function(next) { + db.stats({scale:1024}, next); + } + }, function(err, results) { + if (err) { return callback(err); } + var stats = results.stats; stats.avgObjSize = (stats.avgObjSize / 1024).toFixed(2); stats.dataSize = (stats.dataSize / 1024).toFixed(2); stats.storageSize = (stats.storageSize / 1024).toFixed(2); stats.fileSize = (stats.fileSize / 1024).toFixed(2); stats.indexSize = (stats.indexSize / 1024).toFixed(2); + stats.mem = results.serverStats.mem; stats.raw = JSON.stringify(stats, null, 4); stats.mongo = true; diff --git a/src/database/mongo/main.js b/src/database/mongo/main.js index 9d8fae3b65..045bc2c5bc 100644 --- a/src/database/mongo/main.js +++ b/src/database/mongo/main.js @@ -36,17 +36,19 @@ module.exports = function(db, module) { } if (Array.isArray(data.cid) && data.cid.length) { - if (data.cid.length > 1) { + data.cid = data.cid.filter(Boolean); + if (data.cid.length > 1) { searchQuery.cid = {$in: data.cid.map(String)}; - } else { + } else if (data.cid[0]) { searchQuery.cid = data.cid[0].toString(); } } if (Array.isArray(data.uid) && data.uid.length) { + data.uid = data.uid.filter(Boolean); if (data.uid.length > 1) { searchQuery.uid = {$in: data.uid.map(String)}; - } else { + } else if (data.uid[0]) { searchQuery.uid = data.uid[0].toString(); } } diff --git a/src/emailer.js b/src/emailer.js index a4f2c407bd..14c683d640 100644 --- a/src/emailer.js +++ b/src/emailer.js @@ -71,6 +71,7 @@ var fs = require('fs'), Plugins.fireHook('action:email.send', { to: email, from: meta.config['email:from'] || 'no-reply@localhost.lan', + from_name: meta.config['email:from_name'] || 'NodeBB', subject: translated[2], html: translated[0], plaintext: translated[1], diff --git a/src/groups.js b/src/groups.js index 4a0d2a563e..f0f7efe066 100644 --- a/src/groups.js +++ b/src/groups.js @@ -105,8 +105,8 @@ var async = require('async'), } }; - Groups.getGroups = function(start, stop, callback) { - db.getSortedSetRevRange('groups:createtime', start, stop, callback); + Groups.getGroups = function(set, start, stop, callback) { + db.getSortedSetRevRange(set, start, stop, callback); }; Groups.get = function(groupName, options, callback) { diff --git a/src/image.js b/src/image.js index 078b2d134d..d35040ff9d 100644 --- a/src/image.js +++ b/src/image.js @@ -18,12 +18,16 @@ image.resizeImage = function(path, extension, width, height, callback) { }); } else { lwip.open(path, function(err, image) { + if (err) { + return callback(err); + } + image.batch() .cover(width, height) .crop(width, height) .writeFile(path, function(err) { - callback(err) - }) + callback(err); + }); }); } }; @@ -41,7 +45,7 @@ image.normalise = function(path, extension, callback) { if (err) { return callback(err); } - image.writeFile(path, 'png', callback) + image.writeFile(path, 'png', callback); }); } }; diff --git a/src/install.js b/src/install.js index 48e42d5295..caafcbfacc 100644 --- a/src/install.js +++ b/src/install.js @@ -478,15 +478,31 @@ function enableDefaultPlugins(next) { process.stdout.write('Enabling default plugins\n'); var defaultEnabled = [ - 'nodebb-plugin-composer-default', - 'nodebb-plugin-markdown', - 'nodebb-plugin-mentions', - 'nodebb-widget-essentials', - 'nodebb-rewards-essentials', - 'nodebb-plugin-soundpack-default', - 'nodebb-plugin-emoji-extended' - ]; - var db = require('./database'); + 'nodebb-plugin-composer-default', + 'nodebb-plugin-markdown', + 'nodebb-plugin-mentions', + 'nodebb-widget-essentials', + 'nodebb-rewards-essentials', + 'nodebb-plugin-soundpack-default', + 'nodebb-plugin-emoji-extended' + ], + customDefaults = nconf.get('defaultPlugins'); + + if (customDefaults && customDefaults.length) { + try { + customDefaults = JSON.parse(customDefaults); + defaultEnabled = defaultEnabled.concat(customDefaults); + } catch (e) { + // Invalid value received + winston.warn('[install/enableDefaultPlugins] Invalid defaultPlugins value received. Ignoring.'); + } + } + + defaultEnabled = defaultEnabled.filter(function(plugin, index, array) { + return array.indexOf(plugin) === index; + }); + + var db = require('./database'); var order = defaultEnabled.map(function(plugin, index) { return index; }); diff --git a/src/messaging.js b/src/messaging.js index 9edd99d836..bb1ce85182 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -164,6 +164,9 @@ var db = require('./database'), if (index > 0 && parseInt(message.timestamp, 10) > parseInt(messages[index-1].timestamp, 10) + (1000*60*5)) { // If it's been 5 minutes, this is a new set of messages message.newSet = true; + } else if (index > 0 && message.fromuid !== messages[index-1].fromuid) { + // If the previous message was from the other person, this is also a new set + message.newSet = true } return message; diff --git a/src/meta.js b/src/meta.js index 2def8dedff..a9b276c313 100644 --- a/src/meta.js +++ b/src/meta.js @@ -17,7 +17,6 @@ var async = require('async'), require('./meta/configs')(Meta); require('./meta/themes')(Meta); - require('./meta/title')(Meta); require('./meta/js')(Meta); require('./meta/css')(Meta); require('./meta/sounds')(Meta); diff --git a/src/meta/css.js b/src/meta/css.js index 982388dafb..bc4ea92352 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -69,6 +69,7 @@ module.exports = function(Meta) { source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/textcomplete/jquery.textcomplete.css";'; source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";'; source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/generics.less";'; + source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/mixins.less";'; var acpSource = '\n@import "..' + path.sep + 'public/less/admin/admin";\n' + source; acpSource += '\n@import "..' + path.sep + 'public/less/generics.less";'; diff --git a/src/meta/dependencies.js b/src/meta/dependencies.js index 3bc9719890..791e3d57ab 100644 --- a/src/meta/dependencies.js +++ b/src/meta/dependencies.js @@ -19,18 +19,24 @@ module.exports = function(Meta) { fs.readFile(path.join(__dirname, '../../node_modules/', module, 'package.json'), { encoding: 'utf-8' }, function(err, pkgData) { + // If a bundled plugin/theme is not present, skip the dep check (#3384) + if (err && err.code === 'ENOENT' && (module.startsWith('nodebb-plugin') || module.startsWith('nodebb-theme'))) { + winston.warn('[meta/dependencies] Bundled plugin ' + module + ' not found, skipping dependency check.'); + return next(true); + } + try { var pkgData = JSON.parse(pkgData), - ok = semver.satisfies(pkgData.version, pkg.dependencies[module]); + ok = !semver.validRange(pkg.dependencies[module]) || semver.satisfies(pkgData.version, pkg.dependencies[module]); - if (ok) { + if (ok || (pkgData._resolved && pkgData._resolved.indexOf('//github.com') !== -1)) { next(true); } else { - process.stdout.write('[' + 'outdated'.yellow + '] ' + module.bold + ' v' + pkgData.version + ', requires ' + pkg.dependencies[module] + '\n') + process.stdout.write('[' + 'outdated'.yellow + '] ' + module.bold + ' installed v' + pkgData.version + ', package.json requires ' + pkg.dependencies[module] + '\n') next(false); } } catch(e) { - winston.error('[meta.dependencies] Could not read: ' + module); + winston.error('[meta/dependencies] Could not read: ' + module); process.exit(); } }) @@ -38,4 +44,4 @@ module.exports = function(Meta) { callback(!ok && global.env !== 'development' ? new Error('dependencies-out-of-date') : null); }); }; -}; \ No newline at end of file +}; diff --git a/src/meta/js.js b/src/meta/js.js index 020611e7ce..21dc1c4cee 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -23,7 +23,7 @@ module.exports = function(Meta) { base: [ 'public/vendor/jquery/js/jquery.js', './node_modules/socket.io-client/socket.io.js', - 'public/vendor/jquery/timeago/jquery.timeago.min.js', + 'public/vendor/jquery/timeago/jquery.timeago.js', 'public/vendor/jquery/js/jquery.form.min.js', 'public/vendor/visibility/visibility.min.js', 'public/vendor/bootstrap/js/bootstrap.min.js', @@ -111,7 +111,24 @@ module.exports = function(Meta) { Meta.js.minify = function(minify, callback) { if (nconf.get('isPrimary') === 'true') { - var minifier = Meta.js.minifierProc = fork('minifier.js'), + /** + * Check if the parent process is running with the debug option --debug (or --debug-brk) + */ + var forkProcessParams = {}; + if(global.v8debug) { + /** + * use the line below if you want to debug minifier.js script too (or even --debug-brk option, but + * you'll have to setup your debugger and connect to the forked process) + */ + //forkProcessParams = {execArgv: ['--debug=' + (global.process.debugPort + 1), '--nolazy']}; + + /** + * otherwise, just clean up --debug/--debug-brk options which are set up by default from the parent one + */ + forkProcessParams = {execArgv: []}; + } + + var minifier = Meta.js.minifierProc = fork('minifier.js', [], forkProcessParams), onComplete = function(err) { if (err) { winston.error('[meta/js] Minification failed: ' + err.message); diff --git a/src/meta/title.js b/src/meta/title.js deleted file mode 100644 index c33348ab4e..0000000000 --- a/src/meta/title.js +++ /dev/null @@ -1,111 +0,0 @@ -'use strict'; - -var winston = require('winston'), - validator = require('validator'), - user = require('../user'), - plugins = require('../plugins'), - translator = require('../../public/src/modules/translator'); - -module.exports = function(Meta) { - Meta.title = {}; - - var tests = { - isCategory: /^category\/\d+\/?/, - isTopic: /^topic\/\d+\/?/, - isTag: /^tags\/[\s\S]+\/?/, - isUserPage: /^user\/[^\/]+(\/[\w]+)?/ - }; - - Meta.title.build = function (urlFragment, language, callback) { - var uri = ''; - var fallbackTitle = validator.escape(Meta.config.browserTitle || Meta.config.title || 'NodeBB'); - try { - uri = decodeURIComponent(urlFragment); - } catch(e) { - winston.error('Invalid url fragment : ' + urlFragment, e.stack); - return callback(null, fallbackTitle); - } - - Meta.title.parseFragment(uri, language, function(err, title) { - if (err) { - title = fallbackTitle; - } else { - if (title) { - title = validator.escape(title); - } - title = (title ? title + ' | ' : '') + fallbackTitle; - } - - callback(null, title); - }); - }; - - Meta.title.parseFragment = function (urlFragment, language, callback) { - var translated = ['', 'recent', 'unread', 'users', 'notifications', 'popular', 'tags'], - onParsed = function(err, translated) { - if (err) { - return callback(err); - } - - plugins.fireHook('filter:parse.title', { - fragment: urlFragment, - language: language, - parsed: translated - }, function(err, data) { - if (err) { - return callback(err); - } - - callback(null, data.parsed); - }); - }; - - if (translated.indexOf(urlFragment) !== -1) { - if (!urlFragment.length) { - urlFragment = 'home'; - } - - translator.translate('[[pages:' + urlFragment + ']]', language, function(translated) { - onParsed(null, translated); - }); - } else if (tests.isCategory.test(urlFragment)) { - var cid = urlFragment.match(/category\/(\d+)/)[1]; - - require('../categories').getCategoryField(cid, 'name', onParsed); - } else if (tests.isTopic.test(urlFragment)) { - var tid = urlFragment.match(/topic\/(\d+)/)[1]; - - require('../topics').getTopicField(tid, 'title', onParsed); - } else if (tests.isTag.test(urlFragment)) { - var tag = urlFragment.match(/tags\/([\s\S]+)/)[1]; - - translator.translate('[[pages:tag, ' + tag + ']]', language, function(translated) { - onParsed(null, translated); - }); - } else if (tests.isUserPage.test(urlFragment)) { - var matches = urlFragment.match(/user\/([^\/]+)\/?([\w]+)?/), - userslug = matches[1], - subpage = matches[2]; - - user.getUsernameByUserslug(userslug, function(err, username) { - if (err) { - return onParsed(err); - } - - if (!username) { - username = '[[error:no-user]]'; - } - - if (!subpage) { - return onParsed(null, username); - } - - translator.translate('[[pages:user.' + subpage + ', ' + username + ']]', language, function(translated) { - onParsed(null, translated); - }); - }); - } else { - onParsed(null); - } - }; -}; \ No newline at end of file diff --git a/src/middleware/admin.js b/src/middleware/admin.js index ca02878335..cba2bc8bec 100644 --- a/src/middleware/admin.js +++ b/src/middleware/admin.js @@ -52,7 +52,7 @@ middleware.buildHeader = function(req, res, next) { }); }; -middleware.renderHeader = function(req, res, next) { +middleware.renderHeader = function(req, res, data, next) { var custom_header = { 'plugins': [], 'authentication': [] @@ -92,7 +92,7 @@ middleware.renderHeader = function(req, res, next) { } res.locals.config = results.config; - var data = { + var templateValues = { relative_path: nconf.get('relative_path'), configJSON: JSON.stringify(results.config), user: userData, @@ -104,10 +104,10 @@ middleware.renderHeader = function(req, res, next) { env: process.env.NODE_ENV ? true : false, }; - data.template = {name: res.locals.template}; - data.template[res.locals.template] = true; + templateValues.template = {name: res.locals.template}; + templateValues.template[res.locals.template] = true; - app.render('admin/header', data, next); + app.render('admin/header', templateValues, next); }); }); }; diff --git a/src/middleware/index.js b/src/middleware/index.js index c7358ca5ac..fedb8b55cb 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -22,7 +22,7 @@ var middleware = {}; function setupFavicon(app) { var faviconPath = path.join(__dirname, '../../', 'public', meta.config['brand:favicon'] ? meta.config['brand:favicon'] : 'favicon.ico'); if (fs.existsSync(faviconPath)) { - app.use(favicon(faviconPath)); + app.use(nconf.get('relative_path'), favicon(faviconPath)); } } @@ -57,6 +57,10 @@ module.exports = function(app) { cookie.domain = meta.config.cookieDomain; } + if (nconf.get('secure')) { + cookie.secure = true; + } + app.use(session({ store: db.sessionStore, secret: nconf.get('secret'), diff --git a/src/middleware/middleware.js b/src/middleware/middleware.js index 093362c433..2e3386d44c 100644 --- a/src/middleware/middleware.js +++ b/src/middleware/middleware.js @@ -68,7 +68,7 @@ middleware.pageView = function(req, res, next) { middleware.pluginHooks = function(req, res, next) { async.each(plugins.loadedHooks['filter:router.page'] || [], function(hookObj, next) { - hookObj.method(req, res, next) + hookObj.method(req, res, next); }, function(req, res) { // If it got here, then none of the subscribed hooks did anything, or there were no hooks next(); @@ -126,32 +126,29 @@ middleware.checkGlobalPrivacySettings = function(req, res, next) { middleware.checkAccountPermissions = function(req, res, next) { // This middleware ensures that only the requested user and admins can pass - middleware.authenticate(req, res, function(err) { - if (err) { - return next(err); - } - - user.getUidByUserslug(req.params.userslug, function (err, uid) { - if (err) { - return next(err); - } - + async.waterfall([ + function (next) { + middleware.authenticate(req, res, next); + }, + function (next) { + user.getUidByUserslug(req.params.userslug, next); + }, + function (uid, next) { if (!uid) { return controllers.helpers.notFound(req, res); } if (parseInt(uid, 10) === req.uid) { - return next(); + return next(null, true); } - user.isAdministrator(req.uid, function(err, isAdmin) { - if (err || isAdmin) { - return next(err); - } - - controllers.helpers.notAllowed(req, res); - }); - }); + user.isAdministrator(req.uid, next); + } + ], function (err, allowed) { + if (err || allowed) { + return next(err); + } + controllers.helpers.notAllowed(req, res); }); }; @@ -186,6 +183,9 @@ middleware.buildHeader = function(req, res, next) { }, footer: function(next) { app.render('footer', {loggedIn: (req.user ? parseInt(req.user.uid, 10) !== 0 : false)}, next); + }, + plugins: function(next) { + plugins.fireHook('filter:middleware.buildHeader', {req: req, locals: res.locals}, next); } }, function(err, results) { if (err) { @@ -202,7 +202,7 @@ middleware.buildHeader = function(req, res, next) { }); }; -middleware.renderHeader = function(req, res, callback) { +middleware.renderHeader = function(req, res, data, callback) { var registrationType = meta.config.registrationType || 'normal'; var templateValues = { bootswatchCSS: meta.config['theme:src'], @@ -211,6 +211,7 @@ middleware.renderHeader = function(req, res, callback) { 'cache-buster': meta.config['cache-buster'] ? 'v=' + meta.config['cache-buster'] : '', 'brand:logo': meta.config['brand:logo'] || '', 'brand:logo:url': meta.config['brand:logo:url'] || '', + 'brand:logo:alt': meta.config['brand:logo:alt'] || '', 'brand:logo:display': meta.config['brand:logo']?'':'hide', allowRegistration: registrationType === 'normal' || registrationType === 'admin-approval', searchEnabled: plugins.hasListeners('filter:search.query') @@ -236,18 +237,18 @@ middleware.renderHeader = function(req, res, callback) { templateValues.useCustomJS = parseInt(meta.config.useCustomJS, 10) === 1; next(null, templateValues.useCustomJS ? meta.config.customJS : ''); }, - title: function(next) { + settings: function(next) { if (req.uid) { - user.getSettings(req.uid, function(err, settings) { - if (err) { - return next(err); - } - meta.title.build(req.url.slice(1), settings.userLang, next); - }); + user.getSettings(req.uid, next); } else { - meta.title.build(req.url.slice(1), meta.config.defaultLang, next); + next(); } }, + title: function(next) { + var title = validator.escape(meta.config.browserTitle || meta.config.title || 'NodeBB'); + title = data.title ? (data.title + ' | ' + title) : title; + next(null, title); + }, isAdmin: function(next) { user.isAdministrator(req.uid, next); }, @@ -274,13 +275,16 @@ middleware.renderHeader = function(req, res, callback) { if (results.user && parseInt(results.user.banned, 10) === 1) { req.logout(); - res.redirect('/'); - return; + return res.redirect('/'); } results.user.isAdmin = results.isAdmin || false; results.user.uid = parseInt(results.user.uid, 10); results.user['email:confirmed'] = parseInt(results.user['email:confirmed'], 10) === 1; + if (results.settings && results.settings.bootswatchSkin && results.settings.bootswatchSkin !== 'default') { + templateValues.bootswatchCSS = '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + settings.bootswatchSkin + '/bootstrap.min.css'; + } + templateValues.browserTitle = results.title; templateValues.navigation = results.navigation; templateValues.metaTags = results.tags.meta; @@ -291,11 +295,18 @@ middleware.renderHeader = function(req, res, callback) { templateValues.customCSS = results.customCSS; templateValues.customJS = results.customJS; templateValues.maintenanceHeader = parseInt(meta.config.maintenanceMode, 10) === 1 && !results.isAdmin; + templateValues.defaultLang = meta.config.defaultLang || 'en_GB'; templateValues.template = {name: res.locals.template}; templateValues.template[res.locals.template] = true; - app.render('header', templateValues, callback); + plugins.fireHook('filter:middleware.renderHeader', {templateValues: templateValues, req: req, res: res}, function(err, data) { + if (err) { + return callback(err); + } + + app.render('header', data.templateValues, callback); + }); }); }; @@ -351,7 +362,7 @@ middleware.processRender = function(req, res, next) { if (res.locals.renderHeader || res.locals.renderAdminHeader) { var method = res.locals.renderHeader ? middleware.renderHeader : middleware.admin.renderHeader; - method(req, res, function(err, template) { + method(req, res, options, function(err, template) { if (err) { return fn(err); } @@ -407,7 +418,8 @@ middleware.maintenanceMode = function(req, res, next) { '/templates/[\\w/]+.tpl', '/api/login', '/api/?', - '/language/.+' + '/language/.+', + '/uploads/system/site-logo.png' ], render = function() { res.status(503); @@ -512,4 +524,4 @@ module.exports = function(webserver) { middleware.admin = require('./admin')(webserver); return middleware; -}; \ No newline at end of file +}; diff --git a/src/plugins.js b/src/plugins.js index 138948374c..32b38ffdda 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -31,6 +31,7 @@ var fs = require('fs'), Plugins.clientScripts = []; Plugins.customLanguages = []; Plugins.libraryPaths = []; + Plugins.versionWarning = []; Plugins.initialized = false; @@ -74,6 +75,7 @@ var fs = require('fs'), Plugins.libraries = {}; Plugins.loadedHooks = {}; Plugins.staticDirs = {}; + Plugins.versionWarning = []; Plugins.cssFiles.length = 0; Plugins.lessFiles.length = 0; Plugins.clientScripts.length = 0; @@ -106,6 +108,16 @@ var fs = require('fs'), }); }, function(next) { + // If some plugins are incompatible, throw the warning here + if (Plugins.versionWarning.length) { + process.stdout.write('\n'); + winston.warn('[plugins/load] The following plugins may not be compatible with your version of NodeBB. This may cause unintended behaviour or crashing. In the event of an unresponsive NodeBB caused by this plugin, run `./nodebb reset -p PLUGINNAME` to disable it.'); + for(var x=0,numPlugins=Plugins.versionWarning.length;xStorage Size {mongo.storageSize} mb
    Index Size {mongo.indexSize} mb
    File Size {mongo.fileSize} mb
    +
    + Resident Memory {mongo.mem.resident} mb
    + Virtual Memory {mongo.mem.virtual} mb
    + Mapped Memory {mongo.mem.mapped} mb
    diff --git a/src/views/admin/appearance/customise.tpl b/src/views/admin/appearance/customise.tpl index 2d36ac55d9..b4d54bec13 100644 --- a/src/views/admin/appearance/customise.tpl +++ b/src/views/admin/appearance/customise.tpl @@ -1,7 +1,11 @@
    -
    -
    Custom CSS
    -
    + +
    +
    +

    Enter your own CSS declarations here, which will be applied after all other styles.

    @@ -11,18 +15,14 @@
    -
    -
    - -
    -
    Custom Header
    -
    +

    Enter custom HTML here (ex. JavaScript, Meta Tags, etc.), which will be appended to the <head> section of your forum's markup.

    @@ -33,14 +33,16 @@
    -
    +
    - -
    \ No newline at end of file + \ No newline at end of file diff --git a/src/views/admin/appearance/skins.tpl b/src/views/admin/appearance/skins.tpl index 10211893f5..fe50dead11 100644 --- a/src/views/admin/appearance/skins.tpl +++ b/src/views/admin/appearance/skins.tpl @@ -1,25 +1,12 @@
    -
    -
    -
    Bootswatch Themes
    -
    -

    - NodeBB's skins are powered by Bootswatch, a repository containing themes built with Bootstrap as a base theme. Currently, the Vanilla theme is best optimized for use with Bootswatch. -

    -
      -
    • Loading Themes
    • -
    -
    -
    +
    + Loading Themes
    -
    -
    -
    Revert to Default
    -
    -

    This will remove any custom Bootswatch skin applied to your NodeBB, and restore the base theme.

    - -
    -
    + +
    +
    diff --git a/src/views/admin/appearance/themes.tpl b/src/views/admin/appearance/themes.tpl index 9e543052f9..e67c6a2755 100644 --- a/src/views/admin/appearance/themes.tpl +++ b/src/views/admin/appearance/themes.tpl @@ -1,14 +1,9 @@
    -
    -
    Installed Themes
    -
    -

    - The following themes are currently installed on your forum. -

    - -
      -
    • Checking for installed themes...
    • -
    -
    +
    + Checking for installed themes...
    -
    \ No newline at end of file +
    + + \ No newline at end of file diff --git a/src/views/admin/extend/plugins.tpl b/src/views/admin/extend/plugins.tpl index a3dea7554c..64f4524d8a 100644 --- a/src/views/admin/extend/plugins.tpl +++ b/src/views/admin/extend/plugins.tpl @@ -1,24 +1,27 @@ -
    + +
    + +
    -
    -
    Installed Plugins
    -
    +
    +
    -
    - -
    -
    Download Plugins
    -
    -
      - - - -
    +
    +
    +
      + + + +
    +
    @@ -35,9 +38,6 @@
    Re-order Plugins
    -

    - Certain plugins work ideally when they are initialised before/after other plugins. You can alter this loading behaviour here. -

    @@ -60,10 +60,13 @@